diff options
Diffstat (limited to 'src/pal/src/CMakeLists.txt')
-rw-r--r-- | src/pal/src/CMakeLists.txt | 111 |
1 files changed, 85 insertions, 26 deletions
diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt index 28ee83a77c..16c9d8bd6f 100644 --- a/src/pal/src/CMakeLists.txt +++ b/src/pal/src/CMakeLists.txt @@ -23,20 +23,37 @@ include_directories(include) # Compile options -if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64) - set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1) - add_definitions(-D_AMD64_) -elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l) - set(PAL_CMAKE_PLATFORM_ARCH_ARM 1) - add_definitions(-D_ARM_) -elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) - set(PAL_CMAKE_PLATFORM_ARCH_ARM64 1) - add_definitions(-D_ARM64_) -elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686) - set(CLR_CMAKE_PLATFORM_ARCH_I386 1) - add_definitions(-D_X86_) +if(CLR_CROSS_COMPONENTS_BUILD) + if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL amd64) + if(CLR_CMAKE_TARGET_ARCH STREQUAL "arm") + set(PAL_CMAKE_PLATFORM_ARCH_I386 1) + add_definitions(-D_X86_) + else() + set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1) + add_definitions(-D_AMD64_) + endif() + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL i686) + set(PAL_CMAKE_PLATFORM_ARCH_I386 1) + add_definitions(-D_X86_) + else() + message(FATAL_ERROR "Only AMD64, I386 host for cross-architecture component is supported") + endif() else() - message(FATAL_ERROR "Only ARM and AMD64 is supported") + if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64) + set(PAL_CMAKE_PLATFORM_ARCH_AMD64 1) + add_definitions(-D_AMD64_) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l) + set(PAL_CMAKE_PLATFORM_ARCH_ARM 1) + add_definitions(-D_ARM_) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) + set(PAL_CMAKE_PLATFORM_ARCH_ARM64 1) + add_definitions(-D_ARM64_) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686) + set(PAL_CMAKE_PLATFORM_ARCH_I386 1) + add_definitions(-D_X86_) + else() + message(FATAL_ERROR "Only ARM, AMD64, ARM64 and I386 is supported") + endif() endif() if(CMAKE_SYSTEM_NAME STREQUAL Darwin) @@ -65,7 +82,7 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_ARM) elseif(PAL_CMAKE_PLATFORM_ARCH_ARM64) add_definitions(-DBIT64=1) add_definitions(-D_WIN64=1) -elseif(CLR_CMAKE_PLATFORM_ARCH_I386) +elseif(PAL_CMAKE_PLATFORM_ARCH_I386) add_definitions(-DBIT32=1) endif() @@ -105,7 +122,7 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_ARM64) arch/arm64/exceptionhelper.S arch/arm64/processor.cpp ) -elseif(CLR_CMAKE_PLATFORM_ARCH_I386) +elseif(PAL_CMAKE_PLATFORM_ARCH_I386) set(ARCH_SOURCES arch/i386/context2.S arch/i386/debugbreak.S @@ -264,31 +281,73 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux) find_library(UNWIND_ARCH NAMES unwind-arm) endif() + if(PAL_CMAKE_PLATFORM_ARCH_ARM64) + find_library(UNWIND_ARCH NAMES unwind-aarch64) + endif() + if(PAL_CMAKE_PLATFORM_ARCH_AMD64) find_library(UNWIND_ARCH NAMES unwind-x86_64) endif() - if(CLR_CMAKE_PLATFORM_ALPINE_LINUX) + if(CLR_CMAKE_PLATFORM_ALPINE_LINUX OR CLR_CMAKE_PLATFORM_ANDROID) find_library(INTL intl) endif() - find_library(UNWIND NAMES unwind) + # On Android, we don't need to link with gcc_s, pthread and rt + if(NOT CLR_CMAKE_PLATFORM_ANDROID) + target_link_libraries(coreclrpal + gcc_s + pthread + rt + ) + endif() + + if(CLR_CMAKE_PLATFORM_ANDROID) + target_link_libraries(coreclrpal + gnustl_shared + android-support + android-glob) + endif() + + if(NOT CLR_CMAKE_PLATFORM_ANDROID) + find_library(UNWIND NAMES unwind) + + if(UNWIND STREQUAL UNWIND-NOTFOUND) + message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev and libunwind8.") + endif(UNWIND STREQUAL UNWIND-NOTFOUND) + + target_link_libraries(coreclrpal ${UNWIND}) + endif() + + if(CLR_MAKE_PLATFORM_ANDROID) + find_library(ANDROID_SUPPORT NAMES android-support) + find_library(ANDROID_GLOB NAMES android-glob) + find_library(INTL NAMES intl) + + if(UNWIND_ARCH STREQUAL UNWIND_ARCH-NOTFOUND) + message(FATAL_ERROR "Cannot find libunwind.") + endif() + + if(ANDROID_SUPPORT STREQUAL ANDROID_SUPPORT-NOTFOUND) + message(FATAL_ERROR "Cannot find android-support.") + endif() + + if(ANDROID_GLOB STREQUAL ANDROID_GLOB-NOTFOUND) + message(FATAL_ERROR "Cannot find android-glob.") + endif() + + if(INTL STREQUAL INTL-NOTFOUND) + message(FATAL_ERROR "Cannot find libintl.") + endif() + endif() + find_library(UNWIND_GENERIC NAMES unwind-generic) target_link_libraries(coreclrpal - gcc_s - pthread - rt dl uuid ) - if(UNWIND STREQUAL UNWIND-NOTFOUND) - message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev and libunwind8.") - endif(UNWIND STREQUAL UNWIND-NOTFOUND) - - target_link_libraries(coreclrpal ${UNWIND}) - if(NOT UNWIND_GENERIC STREQUAL UNWIND_GENERIC-NOTFOUND) target_link_libraries(coreclrpal ${UNWIND_GENERIC}) endif(NOT UNWIND_GENERIC STREQUAL UNWIND_GENERIC-NOTFOUND) |