From 82bb3886a8ed3f4ef04f2c5e99265787eee3acbd Mon Sep 17 00:00:00 2001 From: Sergey Andreenko Date: Wed, 25 Nov 2020 00:57:41 -0800 Subject: [PATCH 1/2] CMake changes. --- src/coreclr/clrdefinitions.cmake | 15 +++++++++++---- src/coreclr/src/jit/CMakeLists.txt | 18 ++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake index d22738910023c4..fc63852944116e 100644 --- a/src/coreclr/clrdefinitions.cmake +++ b/src/coreclr/clrdefinitions.cmake @@ -37,6 +37,10 @@ if (CLR_CMAKE_TARGET_UNIX) endif(CLR_CMAKE_TARGET_UNIX) +if(CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) + add_compile_definitions($<$>>:OSX_ARM64_ABI>) +endif() + if(CLR_CMAKE_TARGET_ALPINE_LINUX) # Alpine Linux doesn't have fixed stack limit, this define disables some stack pointer # sanity checks in debug / checked build that rely on a fixed stack limit @@ -234,7 +238,7 @@ function(set_target_definitions_to_custom_os_and_arch) set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE) set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE) - if ((TARGETDETAILS_OS STREQUAL "unix")) + if ((TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX) if (TARGETDETAILS_ARCH STREQUAL "x64") target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_AMD64_ABI) @@ -245,9 +249,12 @@ function(set_target_definitions_to_custom_os_and_arch) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_X86_ABI) elseif (TARGETDETAILS_ARCH STREQUAL "arm64") endif() + if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "osx")) + target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE OSX_ARM64_ABI) + endif() else() target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS) - endif((TARGETDETAILS_OS STREQUAL "unix")) + endif((TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) if (TARGETDETAILS_ARCH STREQUAL "x86") target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_X86) @@ -262,7 +269,7 @@ function(set_target_definitions_to_custom_os_and_arch) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM) endif() - if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix")) + if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_EH_FUNCLETS) - endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix")) + endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) endfunction() diff --git a/src/coreclr/src/jit/CMakeLists.txt b/src/coreclr/src/jit/CMakeLists.txt index 914dc83bc5c7a7..0acd9505bfdd3c 100644 --- a/src/coreclr/src/jit/CMakeLists.txt +++ b/src/coreclr/src/jit/CMakeLists.txt @@ -17,7 +17,14 @@ function(create_standalone_jit) set(options) cmake_parse_arguments(TARGETDETAILS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - set(JIT_ARCH_LINK_LIBRARIES gcinfo_${TARGETDETAILS_OS}_${TARGETDETAILS_ARCH}) + if(TARGETDETAILS_OS STREQUAL "osx") + if (NOT (TARGETDETAILS_ARCH STREQUAL "arm64")) + message(FATAL_ERROR "Only arm64 Apple has a special ABI, use Unix for x64 Mac OS." ) + endif() + set(JIT_ARCH_LINK_LIBRARIES gcinfo_unix_arm64) + else() + set(JIT_ARCH_LINK_LIBRARIES gcinfo_${TARGETDETAILS_OS}_${TARGETDETAILS_ARCH}) + endif() if(TARGETDETAILS_ARCH STREQUAL "x64") set(JIT_ARCH_SOURCES ${JIT_AMD64_SOURCES}) @@ -451,10 +458,12 @@ endif (FEATURE_MERGE_JIT_AND_ENGINE) # Creates a static library "clrjit_static" to link into the VM. add_subdirectory(static) -if (CLR_CMAKE_TARGET_UNIX) -set(TARGET_OS_NAME unix) +if (CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) + set(TARGET_OS_NAME osx) # Apple Arm64 has a special ABI, distinguish it. +elseif (CLR_CMAKE_TARGET_UNIX) + set(TARGET_OS_NAME unix) else() -set(TARGET_OS_NAME win) + set(TARGET_OS_NAME win) endif() create_standalone_jit(TARGET clrjit OS ${TARGET_OS_NAME} ARCH ${ARCH_TARGET_NAME} ADDITIONAL_DESTINATIONS sharedFramework) @@ -472,6 +481,7 @@ endif () if (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) create_standalone_jit(TARGET clrjit_unix_arm64_${ARCH_HOST_NAME} OS unix ARCH arm64) + create_standalone_jit(TARGET clrjit_osx_arm64_${ARCH_HOST_NAME} OS osx ARCH arm64) create_standalone_jit(TARGET clrjit_unix_x64_${ARCH_HOST_NAME} OS unix ARCH x64) create_standalone_jit(TARGET clrjit_win_arm64_${ARCH_HOST_NAME} OS win ARCH arm64) create_standalone_jit(TARGET clrjit_win_x64_${ARCH_HOST_NAME} OS win ARCH x64) From e609ad2892c4c8966a74cd0d841fdd27c0d5ee5c Mon Sep 17 00:00:00 2001 From: Sergey Andreenko Date: Tue, 1 Dec 2020 23:02:43 -0800 Subject: [PATCH 2/2] use unix_osx. --- src/coreclr/clrdefinitions.cmake | 14 +++++++------- src/coreclr/src/jit/CMakeLists.txt | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/coreclr/clrdefinitions.cmake b/src/coreclr/clrdefinitions.cmake index fc63852944116e..75a5fac08fbe2e 100644 --- a/src/coreclr/clrdefinitions.cmake +++ b/src/coreclr/clrdefinitions.cmake @@ -37,9 +37,9 @@ if (CLR_CMAKE_TARGET_UNIX) endif(CLR_CMAKE_TARGET_UNIX) -if(CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) +if (CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) add_compile_definitions($<$>>:OSX_ARM64_ABI>) -endif() +endif(CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) if(CLR_CMAKE_TARGET_ALPINE_LINUX) # Alpine Linux doesn't have fixed stack limit, this define disables some stack pointer @@ -238,7 +238,7 @@ function(set_target_definitions_to_custom_os_and_arch) set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE) set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE) - if ((TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) + if ((TARGETDETAILS_OS MATCHES "^unix")) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX) if (TARGETDETAILS_ARCH STREQUAL "x64") target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_AMD64_ABI) @@ -249,12 +249,12 @@ function(set_target_definitions_to_custom_os_and_arch) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_X86_ABI) elseif (TARGETDETAILS_ARCH STREQUAL "arm64") endif() - if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "osx")) + if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "unix_osx")) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE OSX_ARM64_ABI) endif() else() target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS) - endif((TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) + endif((TARGETDETAILS_OS MATCHES "^unix")) if (TARGETDETAILS_ARCH STREQUAL "x86") target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_X86) @@ -269,7 +269,7 @@ function(set_target_definitions_to_custom_os_and_arch) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM) endif() - if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) + if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix")) target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_EH_FUNCLETS) - endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix") OR (TARGETDETAILS_OS STREQUAL "osx")) + endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix")) endfunction() diff --git a/src/coreclr/src/jit/CMakeLists.txt b/src/coreclr/src/jit/CMakeLists.txt index 0acd9505bfdd3c..a2776acc38ae51 100644 --- a/src/coreclr/src/jit/CMakeLists.txt +++ b/src/coreclr/src/jit/CMakeLists.txt @@ -17,9 +17,9 @@ function(create_standalone_jit) set(options) cmake_parse_arguments(TARGETDETAILS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if(TARGETDETAILS_OS STREQUAL "osx") + if(TARGETDETAILS_OS STREQUAL "unix_osx") if (NOT (TARGETDETAILS_ARCH STREQUAL "arm64")) - message(FATAL_ERROR "Only arm64 Apple has a special ABI, use Unix for x64 Mac OS." ) + message(FATAL_ERROR "Only arm64 Apple has a special ABI, use just unix for x64 Mac OS." ) endif() set(JIT_ARCH_LINK_LIBRARIES gcinfo_unix_arm64) else() @@ -459,7 +459,7 @@ endif (FEATURE_MERGE_JIT_AND_ENGINE) add_subdirectory(static) if (CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64) - set(TARGET_OS_NAME osx) # Apple Arm64 has a special ABI, distinguish it. + set(TARGET_OS_NAME unix_osx) # Apple Arm64 has a special ABI, distinguish it. elseif (CLR_CMAKE_TARGET_UNIX) set(TARGET_OS_NAME unix) else() @@ -481,7 +481,7 @@ endif () if (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) create_standalone_jit(TARGET clrjit_unix_arm64_${ARCH_HOST_NAME} OS unix ARCH arm64) - create_standalone_jit(TARGET clrjit_osx_arm64_${ARCH_HOST_NAME} OS osx ARCH arm64) + create_standalone_jit(TARGET clrjit_unix_osx_arm64_${ARCH_HOST_NAME} OS unix_osx ARCH arm64) create_standalone_jit(TARGET clrjit_unix_x64_${ARCH_HOST_NAME} OS unix ARCH x64) create_standalone_jit(TARGET clrjit_win_arm64_${ARCH_HOST_NAME} OS win ARCH arm64) create_standalone_jit(TARGET clrjit_win_x64_${ARCH_HOST_NAME} OS win ARCH x64) @@ -494,4 +494,4 @@ else() if (CLR_CMAKE_TARGET_UNIX) create_standalone_jit(TARGET clrjit_unix_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME} OS unix ARCH ${ARCH_TARGET_NAME}) endif(CLR_CMAKE_TARGET_UNIX) -endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD) \ No newline at end of file +endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD)