Files
UnrealEngine/Engine/Source/ThirdParty/CMake/PlatformScripts/Unix/Unix.cmake
2025-05-18 13:04:45 +08:00

110 lines
4.1 KiB
CMake

# Copyright Epic Games, Inc. All Rights Reserved.
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE STRING "" FORCE)
option(BUILD_WITH_LIBCXX "Include LibCxx" OFF)
if(NOT DEFINED ENV{LINUX_MULTIARCH_ROOT})
message(FATAL_ERROR "LINUX_MULTIARCH_ROOT environment variable is not set!")
endif()
file(TO_CMAKE_PATH $ENV{LINUX_MULTIARCH_ROOT} LINUX_MULTIARCH_ROOT)
if(NOT EXISTS ${LINUX_MULTIARCH_ROOT})
message(FATAL_ERROR "LINUX_MULTIARCH_ROOT environment variable must point to the root directory!")
endif()
if(DEFINED CMAKE_C_COMPILER_TARGET)
set(UE_LINUX_TARGET ${CMAKE_C_COMPILER_TARGET})
elseif(DEFINED CMAKE_CXX_COMPILER_TARGET)
set(UE_LINUX_TARGET ${CMAKE_CXX_COMPILER_TARGET})
else()
message(FATAL_ERROR "Must define CMAKE_C_COMPILER_TARGET or CMAKE_CXX_COMPILER_TARGET to use this toolchain!")
endif()
set(CMAKE_SYSROOT "${LINUX_MULTIARCH_ROOT}/${UE_LINUX_TARGET}")
if(NOT EXISTS ${CMAKE_SYSROOT})
message(FATAL_ERROR "Target '${UE_LINUX_TARGET}' does not exist in '${LINUX_MULTIARCH_ROOT}'!")
endif()
SET(LIBCXX_PATH "${CMAKE_CURRENT_LIST_DIR}/../../../Unix/LibCxx")
string(CONCAT UE_FLAGS
" -fPIC"
" -gdwarf-4"
" --target=${UE_LINUX_TARGET}" # Needed until commit 270e0d9c to CMake in ~3.18.4.
)
string(CONCAT UE_FLAGS_C
)
string(CONCAT UE_FLAGS_CXX
" -std=c++14"
)
string(CONCAT UE_FLAGS_DEBUG
" -O0"
" -D_DEBUG"
" -DDEBUG"
)
string(CONCAT UE_FLAGS_RELEASE
" -O3"
" -DNDEBUG"
)
if(BUILD_WITH_LIBCXX)
string(CONCAT UE_FLAGS_CXX
"${UE_FLAGS_CXX}"
" -stdlib=libc++"
" -I${LIBCXX_PATH}/include"
" -I${LIBCXX_PATH}/include/c++/v1"
)
string(CONCAT LIBCXX_FLAGS
"${LIBCXX_FLAGS}"
" -stdlib=libc++"
" -L${LIBCXX_PATH}/lib/Unix/${UE_LINUX_TARGET}"
" ${LIBCXX_PATH}/lib/Unix/${UE_LINUX_TARGET}/libc++.a"
" ${LIBCXX_PATH}/lib/Unix/${UE_LINUX_TARGET}/libc++abi.a"
)
set(CMAKE_MODULE_LINKER_FLAGS "${LIBCXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${LIBCXX_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${LIBCXX_FLAGS}")
endif()
set(CMAKE_C_FLAGS "${UE_FLAGS} ${UE_FLAGS_C}" CACHE STRING "C Flags" FORCE)
set(CMAKE_CXX_FLAGS "${UE_FLAGS} ${UE_FLAGS_CXX}" CACHE STRING "C++ Flags" FORCE)
set(CMAKE_C_FLAGS_DEBUG "${UE_FLAGS_DEBUG}" CACHE STRING "C Debug Flags" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "${UE_FLAGS_DEBUG}" CACHE STRING "C++ Debug Flags" FORCE)
set(CMAKE_C_FLAGS_RELEASE "${UE_FLAGS_RELEASE}" CACHE STRING "C Release Flags" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "${UE_FLAGS_RELEASE}" CACHE STRING "C++ Release Flags" FORCE)
set(CMAKE_ASM_COMPILER_TARGET "${UE_LINUX_TARGET}")
set(CMAKE_C_COMPILER_TARGET "${UE_LINUX_TARGET}")
set(CMAKE_CXX_COMPILER_TARGET "${UE_LINUX_TARGET}")
set(CMAKE_C_COMPILER "${CMAKE_SYSROOT}/bin/clang.exe" CACHE PATH "C Compiler")
set(CMAKE_CXX_COMPILER "${CMAKE_SYSROOT}/bin/clang++.exe" CACHE PATH "C++ Compiler")
set(CMAKE_CXX_COMPILER_RANLIB "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-ranlib.exe" CACHE PATH "Cxx Ranlib")
set(CMAKE_AR "${CMAKE_SYSROOT}/bin/llvm-ar.exe" CACHE PATH "Archive")
set(CMAKE_AS "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-as.exe" CACHE PATH "Assembler")
set(CMAKE_LINKER "${CMAKE_SYSROOT}/bin/lld.exe" CACHE PATH "Linker")
set(CMAKE_NM "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-nm.exe" CACHE PATH "NM")
set(CMAKE_OBJCOPY "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-objcopy.exe" CACHE PATH "ObjCopy")
set(CMAKE_OBJDUMP "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-objdump.exe" CACHE PATH "ObjDump")
set(CMAKE_RANLIB "${CMAKE_SYSROOT}/bin/${UE_LINUX_TARGET}-ranlib.exe" CACHE PATH "Ranlib")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_SHARED_LIBRARY_PREFIX_C "lib")
set(CMAKE_SHARED_LIBRARY_PREFIX_CXX "lib")
set(CMAKE_STATIC_LIBRARY_PREFIX_C "lib")
set(CMAKE_STATIC_LIBRARY_PREFIX_CXX "lib")
set(CMAKE_STATIC_LIBRARY_SUFFIX_C ".a")
set(CMAKE_STATIC_LIBRARY_SUFFIX_CXX ".a")