Skip to content

Commit 76b52a5

Browse files
author
Sergey Andreenko
authored
Add OSX arm64 jit. (#45467)
* CMake changes. * use unix_osx.
1 parent e9a47b7 commit 76b52a5

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

src/coreclr/clrdefinitions.cmake

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ if (CLR_CMAKE_TARGET_UNIX)
3737

3838
endif(CLR_CMAKE_TARGET_UNIX)
3939

40+
if (CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64)
41+
add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_ARCH>>>:OSX_ARM64_ABI>)
42+
endif(CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64)
43+
4044
if(CLR_CMAKE_TARGET_ALPINE_LINUX)
4145
# Alpine Linux doesn't have fixed stack limit, this define disables some stack pointer
4246
# 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)
234238
set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_ARCH TRUE)
235239
set_target_properties(${TARGETDETAILS_TARGET} PROPERTIES IGNORE_DEFAULT_TARGET_OS TRUE)
236240

237-
if ((TARGETDETAILS_OS STREQUAL "unix"))
241+
if ((TARGETDETAILS_OS MATCHES "^unix"))
238242
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_UNIX)
239243
if (TARGETDETAILS_ARCH STREQUAL "x64")
240244
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_AMD64_ABI)
@@ -245,9 +249,12 @@ function(set_target_definitions_to_custom_os_and_arch)
245249
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE UNIX_X86_ABI)
246250
elseif (TARGETDETAILS_ARCH STREQUAL "arm64")
247251
endif()
252+
if ((TARGETDETAILS_ARCH STREQUAL "arm64") AND (TARGETDETAILS_OS STREQUAL "unix_osx"))
253+
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE OSX_ARM64_ABI)
254+
endif()
248255
else()
249256
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_WINDOWS)
250-
endif((TARGETDETAILS_OS STREQUAL "unix"))
257+
endif((TARGETDETAILS_OS MATCHES "^unix"))
251258

252259
if (TARGETDETAILS_ARCH STREQUAL "x86")
253260
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_X86)
@@ -262,7 +269,7 @@ function(set_target_definitions_to_custom_os_and_arch)
262269
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE TARGET_ARM)
263270
endif()
264271

265-
if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix"))
272+
if (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix"))
266273
target_compile_definitions(${TARGETDETAILS_TARGET} PRIVATE FEATURE_EH_FUNCLETS)
267-
endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS STREQUAL "unix"))
274+
endif (NOT (TARGETDETAILS_ARCH STREQUAL "x86") OR (TARGETDETAILS_OS MATCHES "^unix"))
268275
endfunction()

src/coreclr/src/jit/CMakeLists.txt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,14 @@ function(create_standalone_jit)
1717
set(options)
1818
cmake_parse_arguments(TARGETDETAILS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
1919

20-
set(JIT_ARCH_LINK_LIBRARIES gcinfo_${TARGETDETAILS_OS}_${TARGETDETAILS_ARCH})
20+
if(TARGETDETAILS_OS STREQUAL "unix_osx")
21+
if (NOT (TARGETDETAILS_ARCH STREQUAL "arm64"))
22+
message(FATAL_ERROR "Only arm64 Apple has a special ABI, use just unix for x64 Mac OS." )
23+
endif()
24+
set(JIT_ARCH_LINK_LIBRARIES gcinfo_unix_arm64)
25+
else()
26+
set(JIT_ARCH_LINK_LIBRARIES gcinfo_${TARGETDETAILS_OS}_${TARGETDETAILS_ARCH})
27+
endif()
2128

2229
if(TARGETDETAILS_ARCH STREQUAL "x64")
2330
set(JIT_ARCH_SOURCES ${JIT_AMD64_SOURCES})
@@ -451,10 +458,12 @@ endif (FEATURE_MERGE_JIT_AND_ENGINE)
451458
# Creates a static library "clrjit_static" to link into the VM.
452459
add_subdirectory(static)
453460

454-
if (CLR_CMAKE_TARGET_UNIX)
455-
set(TARGET_OS_NAME unix)
461+
if (CLR_CMAKE_TARGET_OSX AND CLR_CMAKE_TARGET_ARCH_ARM64)
462+
set(TARGET_OS_NAME unix_osx) # Apple Arm64 has a special ABI, distinguish it.
463+
elseif (CLR_CMAKE_TARGET_UNIX)
464+
set(TARGET_OS_NAME unix)
456465
else()
457-
set(TARGET_OS_NAME win)
466+
set(TARGET_OS_NAME win)
458467
endif()
459468

460469
create_standalone_jit(TARGET clrjit OS ${TARGET_OS_NAME} ARCH ${ARCH_TARGET_NAME} ADDITIONAL_DESTINATIONS sharedFramework)
@@ -472,6 +481,7 @@ endif ()
472481
if (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD)
473482
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
474483
create_standalone_jit(TARGET clrjit_unix_arm64_${ARCH_HOST_NAME} OS unix ARCH arm64)
484+
create_standalone_jit(TARGET clrjit_unix_osx_arm64_${ARCH_HOST_NAME} OS unix_osx ARCH arm64)
475485
create_standalone_jit(TARGET clrjit_unix_x64_${ARCH_HOST_NAME} OS unix ARCH x64)
476486
create_standalone_jit(TARGET clrjit_win_arm64_${ARCH_HOST_NAME} OS win ARCH arm64)
477487
create_standalone_jit(TARGET clrjit_win_x64_${ARCH_HOST_NAME} OS win ARCH x64)
@@ -484,4 +494,4 @@ else()
484494
if (CLR_CMAKE_TARGET_UNIX)
485495
create_standalone_jit(TARGET clrjit_unix_${ARCH_TARGET_NAME}_${ARCH_HOST_NAME} OS unix ARCH ${ARCH_TARGET_NAME})
486496
endif(CLR_CMAKE_TARGET_UNIX)
487-
endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD)
497+
endif (CLR_CMAKE_BUILD_SUBSET_ALLJITS AND NOT CLR_CROSS_COMPONENTS_BUILD)

0 commit comments

Comments
 (0)