From ec9743603e4eec860e351883493bbc01457d0bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Thu, 5 Nov 2026 13:47:08 +0900 Subject: [PATCH 1/4] Align NativeAOT WASM runtime artifact names Rename the portable runtime library to Runtime.WorkstationGC and generate AsmOffsets.cs. Update the WASM linker and CoreLib consumers without changing runtime sources or defines. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: b3e871f9-f4ec-4d90-91ad-fd5697b4b31b --- .../Microsoft.NETCore.Native.Wasm.targets | 2 +- .../nativeaot/Runtime/Portable/CMakeLists.txt | 16 ++++++++-------- .../src/System.Private.CoreLib.csproj | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Wasm.targets b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Wasm.targets index b6b47b8a7cc5d9..8c5565cf8c7cc9 100644 --- a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Wasm.targets +++ b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Wasm.targets @@ -36,7 +36,7 @@ - + diff --git a/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt index d380efc5294c99..4f24712eecf5c8 100644 --- a/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt @@ -1,4 +1,4 @@ -project(PortableRuntime) +project(Runtime) # Portable version of the runtime is designed to be used with WASM. # It should be written in pure C/C++, with no assembly code. @@ -9,13 +9,13 @@ add_library(Runtime.GC.Workstation OBJECT ${GC_WKS_SVR_SOURCES}) add_dependencies(Runtime.GC.Workstation aot_eventing_headers) set_target_properties(Runtime.GC.Workstation PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) -add_library(PortableRuntime STATIC +add_library(Runtime.WorkstationGC STATIC ${COMMON_RUNTIME_SOURCES} ${RUNTIME_DIR}/portable/AllocFast.cpp ${PORTABLE_RUNTIME_SOURCES} $) -target_link_libraries(PortableRuntime PRIVATE aotminipal) -add_dependencies(PortableRuntime aot_eventing_headers) +target_link_libraries(Runtime.WorkstationGC PRIVATE aotminipal) +add_dependencies(Runtime.WorkstationGC aot_eventing_headers) add_library(standalonegc-disabled STATIC ${STANDALONEGC_DISABLED_SOURCES}) add_dependencies(standalonegc-disabled aot_eventing_headers) @@ -39,12 +39,12 @@ else() endif() add_custom_command( - # The AsmOffsetsPortable.cs is consumed later by the managed build - TARGET PortableRuntime + # The AsmOffsets.cs is consumed later by the managed build + TARGET Runtime.WorkstationGC POST_BUILD - COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsetsPortable.cs" + COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.cs" ) -install_static_library(PortableRuntime aotsdk nativeaot) +install_static_library(Runtime.WorkstationGC aotsdk nativeaot) install_static_library(standalonegc-disabled aotsdk nativeaot) install_static_library(aotminipal aotsdk nativeaot) diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj b/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj index c4d54f9ba0b469..8b28b27f903941 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj @@ -537,7 +537,7 @@ - + From 67fe61a559e746bce449a09c08df584ebbc5c506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Thu, 5 Nov 2026 23:13:45 +0900 Subject: [PATCH 2/4] Consolidate NativeAOT runtime CMake configuration Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 67e21777-f3d8-4031-a350-84b9e2001764 --- src/coreclr/nativeaot/Runtime/CMakeLists.txt | 312 ++++++++++++++---- .../nativeaot/Runtime/Full/CMakeLists.txt | 201 ----------- .../nativeaot/Runtime/Portable/CMakeLists.txt | 50 --- .../src/System.Private.CoreLib.csproj | 7 +- .../Test.CoreLib/src/Test.CoreLib.csproj | 2 +- 5 files changed, 259 insertions(+), 313 deletions(-) delete mode 100644 src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt delete mode 100644 src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt diff --git a/src/coreclr/nativeaot/Runtime/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/CMakeLists.txt index 61e15d3b5a1fd0..76e1e90b95f050 100644 --- a/src/coreclr/nativeaot/Runtime/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/CMakeLists.txt @@ -1,3 +1,10 @@ +project(Runtime) + +set(FEATURE_PORTABLE_HELPERS 0) +if(CLR_CMAKE_TARGET_ARCH_WASM) + set(FEATURE_PORTABLE_HELPERS 1) +endif() + set(GC_DIR ../../gc) set(GC_WKS_SVR_SOURCES @@ -88,9 +95,11 @@ set(STANDALONEGC_ENABLED_SOURCES clrgc.enabled.cpp ) -set(FULL_RUNTIME_SOURCES - ThunksMapping.cpp -) +if(FEATURE_PORTABLE_HELPERS) + list(APPEND COMMON_RUNTIME_SOURCES ${RUNTIME_DIR}/portable/AllocFast.cpp) +else() + list(APPEND COMMON_RUNTIME_SOURCES ThunksMapping.cpp) +endif() include_directories(inc) @@ -146,15 +155,17 @@ if (WIN32) ${GC_DIR}/windows/gcenv.windows.cpp ) - list(APPEND FULL_RUNTIME_SOURCES windows/CoffNativeCodeManager.cpp) - - if(CLR_CMAKE_TARGET_ARCH_ARM64) - list(APPEND FULL_RUNTIME_SOURCES - ../../unwinder/arm64/unwinder.cpp - ) - include_directories(../../inc) - include_directories(../../unwinder) - include_directories(../../unwinder/arm64) + if(NOT FEATURE_PORTABLE_HELPERS) + list(APPEND COMMON_RUNTIME_SOURCES windows/CoffNativeCodeManager.cpp) + + if(CLR_CMAKE_TARGET_ARCH_ARM64) + list(APPEND COMMON_RUNTIME_SOURCES + ../../unwinder/arm64/unwinder.cpp + ) + include_directories(../../inc) + include_directories(../../unwinder) + include_directories(../../unwinder/arm64) + endif() endif() set(ASM_SUFFIX asm) @@ -221,35 +232,37 @@ else() ) endif() - list(APPEND FULL_RUNTIME_SOURCES - unix/HardwareExceptions.cpp - unix/NativeContext.cpp - unix/UnixSignals.cpp - unix/UnwindHelpers.cpp - unix/UnixNativeCodeManager.cpp - ) - - include(${CLR_SRC_NATIVE_DIR}/external/llvm-libunwind.cmake) - - set(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS OFF) - if(CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_APPLE AND NOT CLR_CMAKE_TARGET_ARCH_WASM) - set(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS ON) - endif() - - if(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS) - # Build the bundled libunwind implementation and the runtime unwinder code - # that references it into one relocatable object. The runtime sources are - # part of the partial link so their references to libunwind's implementation - # symbols are resolved before those symbols are localized. - set(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES + if(NOT FEATURE_PORTABLE_HELPERS) + list(APPEND COMMON_RUNTIME_SOURCES + unix/HardwareExceptions.cpp + unix/NativeContext.cpp + unix/UnixSignals.cpp unix/UnwindHelpers.cpp unix/UnixNativeCodeManager.cpp - ${LLVM_LIBUNWIND_SOURCES} - ${LLVM_LIBUNWIND_ASM_SOURCES}) - list(REMOVE_ITEM FULL_RUNTIME_SOURCES unix/UnwindHelpers.cpp unix/UnixNativeCodeManager.cpp) - else() - list(APPEND FULL_RUNTIME_SOURCES ${LLVM_LIBUNWIND_SOURCES}) - set(RUNTIME_SOURCES_ARCH_ASM ${LLVM_LIBUNWIND_ASM_SOURCES}) + ) + + include(${CLR_SRC_NATIVE_DIR}/external/llvm-libunwind.cmake) + + set(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS OFF) + if(CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_APPLE AND NOT CLR_CMAKE_TARGET_ARCH_WASM) + set(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS ON) + endif() + + if(NATIVEAOT_LOCALIZE_LIBUNWIND_SYMBOLS) + # Build the bundled libunwind implementation and the runtime unwinder code + # that references it into one relocatable object. The runtime sources are + # part of the partial link so their references to libunwind's implementation + # symbols are resolved before those symbols are localized. + set(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES + unix/UnwindHelpers.cpp + unix/UnixNativeCodeManager.cpp + ${LLVM_LIBUNWIND_SOURCES} + ${LLVM_LIBUNWIND_ASM_SOURCES}) + list(REMOVE_ITEM COMMON_RUNTIME_SOURCES unix/UnwindHelpers.cpp unix/UnixNativeCodeManager.cpp) + else() + list(APPEND COMMON_RUNTIME_SOURCES ${LLVM_LIBUNWIND_SOURCES}) + set(RUNTIME_SOURCES_ARCH_ASM ${LLVM_LIBUNWIND_ASM_SOURCES}) + endif() endif() set(ASM_SUFFIX S) @@ -291,16 +304,24 @@ if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) ) endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) -list(APPEND RUNTIME_SOURCES_ARCH_ASM - ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/AllocFast.${ASM_SUFFIX} - ${ARCH_SOURCES_DIR}/DispatchResolve.${ASM_SUFFIX} - ${ARCH_SOURCES_DIR}/ExceptionHandling.${ASM_SUFFIX} - ${ARCH_SOURCES_DIR}/GcProbe.${ASM_SUFFIX} - ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/MiscStubs.${ASM_SUFFIX} - ${ARCH_SOURCES_DIR}/PInvoke.${ASM_SUFFIX} - ${ARCH_SOURCES_DIR}/UniversalTransition.${ASM_SUFFIX} - ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/WriteBarriers.${ASM_SUFFIX} -) +if(NOT FEATURE_PORTABLE_HELPERS) + list(APPEND RUNTIME_SOURCES_ARCH_ASM + ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/AllocFast.${ASM_SUFFIX} + ${ARCH_SOURCES_DIR}/DispatchResolve.${ASM_SUFFIX} + ${ARCH_SOURCES_DIR}/ExceptionHandling.${ASM_SUFFIX} + ${ARCH_SOURCES_DIR}/GcProbe.${ASM_SUFFIX} + ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/MiscStubs.${ASM_SUFFIX} + ${ARCH_SOURCES_DIR}/PInvoke.${ASM_SUFFIX} + ${ARCH_SOURCES_DIR}/UniversalTransition.${ASM_SUFFIX} + ${RUNTIME_DIR}/${ARCH_SOURCES_DIR}/WriteBarriers.${ASM_SUFFIX} + ) + + if(CLR_CMAKE_TARGET_APPLE) + list(APPEND RUNTIME_SOURCES_ARCH_ASM + ${ARCH_SOURCES_DIR}/ThunkPoolThunks.${ASM_SUFFIX} + ) + endif() +endif() # Add architecture specific folder for looking up headers. convert_to_absolute_path(ARCH_SOURCES_DIR ${ARCH_SOURCES_DIR}) @@ -379,7 +400,6 @@ set(NATIVEAOT_RUNTIME_DIR ${CMAKE_CURRENT_SOURCE_DIR}) list(APPEND COMMON_RUNTIME_SOURCES ${GC_HEADERS}) convert_to_absolute_path(COMMON_RUNTIME_SOURCES ${COMMON_RUNTIME_SOURCES}) -convert_to_absolute_path(FULL_RUNTIME_SOURCES ${FULL_RUNTIME_SOURCES}) convert_to_absolute_path(GC_WKS_SVR_SOURCES ${GC_WKS_SVR_SOURCES}) convert_to_absolute_path(STANDALONEGC_DISABLED_SOURCES ${STANDALONEGC_DISABLED_SOURCES}) convert_to_absolute_path(STANDALONEGC_ENABLED_SOURCES ${STANDALONEGC_ENABLED_SOURCES}) @@ -388,12 +408,7 @@ convert_to_absolute_path(RUNTIME_SOURCES_ARCH_ASM ${RUNTIME_SOURCES_ARCH_ASM}) convert_to_absolute_path(VXSORT_SOURCES ${VXSORT_SOURCES}) convert_to_absolute_path(DUMMY_VXSORT_SOURCES ${DUMMY_VXSORT_SOURCES}) -if(NOT CLR_CMAKE_TARGET_ARCH_WASM) - add_subdirectory(Full) -else() - add_subdirectory(Portable) -endif() - +# Configure these children before applying helper-specific definitions and include paths. if(FEATURE_PERFTRACING) add_subdirectory(eventpipe) endif() @@ -407,3 +422,188 @@ if(NOT CLR_CMAKE_TARGET_ARCH_WASM) add_subdirectory(datadescriptor) endif() + +if(FEATURE_PORTABLE_HELPERS) + add_definitions(-DFEATURE_PORTABLE_HELPERS) +else() + set(CMAKE_INCLUDE_CURRENT_DIR ON) + + if(NOT CLR_CMAKE_TARGET_APPLE) + add_definitions(-DFEATURE_RX_THUNKS) + endif() + + if(CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64)) + # Needed to include AsmOffsets.inc + include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) + preprocess_files(RUNTIME_SOURCES_ARCH_ASM ${RUNTIME_SOURCES_ARCH_ASM}) + endif() +endif() + +if(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES) + add_library(Runtime.PrivateLibunwind OBJECT ${NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES}) + + set(NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.o") + set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.localize") + set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.localize.unsorted") + # The relocatable object includes runtime-owned objects so their references to + # libunwind implementation symbols are resolved before localization. The + # localize list is generated only from the bundled libunwind source objects. + set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOL_OBJECTS "$,EXCLUDE,.*(UnwindHelpers|UnixNativeCodeManager)\\.cpp\\.o$>") + + add_custom_command( + OUTPUT "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" + COMMAND "${CMAKE_COMMAND}" -E rm -f + "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" + "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" + # Generate the objcopy symbol list from libunwind-owned object files only. + COMMAND sh -c "nm_tool=\"$1\" && shift && \"$nm_tool\" --extern-only --defined-only --format=just-symbols \"$@\" > \"$0\"" + "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" + "${CMAKE_NM}" + ${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOL_OBJECTS} + COMMAND sort -u -o + "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" + "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" + COMMAND "${CMAKE_COMMAND}" -E rm -f + "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" + COMMAND "${CMAKE_LINKER}" -r $ -o "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" + COMMAND "${CMAKE_OBJCOPY}" + "--localize-symbols=${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" + "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" + DEPENDS + Runtime.PrivateLibunwind + $ + BYPRODUCTS "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" + COMMENT "Privatizing NativeAOT libunwind symbols" + COMMAND_EXPAND_LISTS + VERBATIM + ) + set_source_files_properties("${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" PROPERTIES + EXTERNAL_OBJECT TRUE + GENERATED TRUE) +endif() + +get_compile_definitions(DEFINITIONS) +set(ASM_OFFSETS_CSPP ${NATIVEAOT_RUNTIME_DIR}/../Runtime.Base/src/AsmOffsets.cspp) + +if(WIN32) + set(COMPILER_LANGUAGE "") + set(PREPROCESSOR_FLAGS -EP -nologo) + set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/windows/AsmOffsets.cpp) +else() + set(COMPILER_LANGUAGE -x c++) + set(PREPROCESSOR_FLAGS -E -P) + set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/unix/AsmOffsets.cpp) +endif() + +if(NOT FEATURE_PORTABLE_HELPERS) + add_custom_command( + COMMAND ${CMAKE_CXX_COMPILER} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${NATIVEAOT_RUNTIME_DIR}" -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" + DEPENDS "${ASM_OFFSETS_CPP}" "${NATIVEAOT_RUNTIME_DIR}/AsmOffsets.h" + COMMENT "Generating AsmOffsets.inc" + ) + + set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" PROPERTIES GENERATED TRUE) + + # Both runtime archives share AsmOffsets.inc and the assembler helpers. + add_custom_target( + RuntimeAsmHelpers + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" + ) + + add_library(Runtime.AsmHelpers OBJECT ${RUNTIME_SOURCES_ARCH_ASM}) + add_dependencies(Runtime.AsmHelpers RuntimeAsmHelpers) +endif() + +add_library(Runtime.GC.Workstation OBJECT ${GC_WKS_SVR_SOURCES}) +if(FEATURE_PERFTRACING) + add_dependencies(Runtime.GC.Workstation aot_eventing_headers) +endif() +set_target_properties(Runtime.GC.Workstation PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) +if(CLR_CMAKE_TARGET_WIN32) + # GC objects are archived into the runtime libraries and must not reference an external compiler PDB. + set_target_properties(Runtime.GC.Workstation PROPERTIES MSVC_DEBUG_INFORMATION_FORMAT Embedded) +endif() + +add_library(Runtime.WorkstationGC STATIC + ${COMMON_RUNTIME_SOURCES} + ${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT} + $) +if(FEATURE_PERFTRACING) + add_dependencies(Runtime.WorkstationGC aot_eventing_headers) +endif() +target_link_libraries(Runtime.WorkstationGC PRIVATE aotminipal) +if(NOT CLR_CMAKE_TARGET_ARCH_WASM) + target_link_libraries(Runtime.WorkstationGC PRIVATE nativeaot_cdac_contract_descriptor nativeaot_gc_wks_descriptor) +endif() +if(NOT FEATURE_PORTABLE_HELPERS) + target_link_libraries(Runtime.WorkstationGC PRIVATE Runtime.AsmHelpers) +endif() + +if(FEATURE_MULTITHREADING AND NOT CLR_CMAKE_TARGET_ARCH_WASM) + add_library(Runtime.GC.Server OBJECT ${GC_WKS_SVR_SOURCES}) + if(FEATURE_PERFTRACING) + add_dependencies(Runtime.GC.Server aot_eventing_headers) + endif() + target_compile_definitions(Runtime.GC.Server PRIVATE FEATURE_SVR_GC SERVER_GC) + set_target_properties(Runtime.GC.Server PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) + if(CLR_CMAKE_TARGET_WIN32) + set_target_properties(Runtime.GC.Server PROPERTIES MSVC_DEBUG_INFORMATION_FORMAT Embedded) + endif() + + add_library(Runtime.ServerGC STATIC + ${COMMON_RUNTIME_SOURCES} + ${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT} + $ + $) + if(FEATURE_PERFTRACING) + add_dependencies(Runtime.ServerGC aot_eventing_headers) + endif() + target_link_libraries(Runtime.ServerGC PRIVATE aotminipal nativeaot_cdac_contract_descriptor nativeaot_gc_wks_descriptor nativeaot_gc_svr_descriptor Runtime.AsmHelpers) + target_compile_definitions(Runtime.ServerGC PRIVATE FEATURE_SVR_GC) + install_static_library(Runtime.ServerGC aotsdk nativeaot) +endif() + +add_library(standalonegc-disabled STATIC ${STANDALONEGC_DISABLED_SOURCES}) +if(FEATURE_PERFTRACING) + add_dependencies(standalonegc-disabled aot_eventing_headers) +endif() +if(FEATURE_EVENT_TRACE AND CLR_CMAKE_TARGET_WIN32) + add_dependencies(standalonegc-disabled aot_etw_headers) +endif() + +if(NOT CLR_CMAKE_TARGET_ARCH_WASM) + add_library(standalonegc-enabled STATIC ${STANDALONEGC_ENABLED_SOURCES}) + if(FEATURE_PERFTRACING) + add_dependencies(standalonegc-enabled aot_eventing_headers) + endif() + if(FEATURE_EVENT_TRACE AND CLR_CMAKE_TARGET_WIN32) + add_dependencies(standalonegc-enabled aot_etw_headers) + endif() + install_static_library(standalonegc-enabled aotsdk nativeaot) +endif() + +if(CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) + add_library(Runtime.VxsortEnabled STATIC ${VXSORT_SOURCES}) + add_library(Runtime.VxsortDisabled STATIC ${DUMMY_VXSORT_SOURCES}) + install_static_library(Runtime.VxsortEnabled aotsdk nativeaot) + install_static_library(Runtime.VxsortDisabled aotsdk nativeaot) +endif() + +if(CLR_CMAKE_TARGET_WIN32) + set_target_properties(aotminipal PROPERTIES + COMPILE_PDB_NAME "aotminipal" + COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$") +endif() + +add_custom_command( + # The AsmOffsets.cs is consumed later by the managed build. + TARGET Runtime.WorkstationGC + POST_BUILD + COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} + -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.cs" +) + +install_static_library(Runtime.WorkstationGC aotsdk nativeaot) +install_static_library(standalonegc-disabled aotsdk nativeaot) +install_static_library(aotminipal aotsdk nativeaot) diff --git a/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt deleted file mode 100644 index 97208a6b5504d6..00000000000000 --- a/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt +++ /dev/null @@ -1,201 +0,0 @@ -project(Runtime) - -# Full version of the runtime is required by the JIT CodeGen. -# The low-level helpers can be implemented in assembly code. - -# Include auto-generated files on include path -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -if (CLR_CMAKE_TARGET_APPLE) - list(APPEND RUNTIME_SOURCES_ARCH_ASM - ${ARCH_SOURCES_DIR}/ThunkPoolThunks.${ASM_SUFFIX} - ) -else() - add_definitions(-DFEATURE_RX_THUNKS) -endif() - -if (CLR_CMAKE_TARGET_WIN32) - if (CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64) - # Needed to include AsmOffsets.inc - include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - preprocess_files(RUNTIME_SOURCES_ARCH_ASM ${RUNTIME_SOURCES_ARCH_ASM}) - endif() -endif (CLR_CMAKE_TARGET_WIN32) - -if(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES) - add_library(Runtime.PrivateLibunwind OBJECT ${NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES}) - - set(NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.o") - set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.localize") - set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED "${CMAKE_CURRENT_BINARY_DIR}/Runtime.PrivateLibunwind.localize.unsorted") - # The relocatable object includes runtime-owned objects so their references to - # libunwind implementation symbols are resolved before localization. The - # localize list is generated only from the bundled libunwind source objects. - set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOL_OBJECTS "$,EXCLUDE,.*(UnwindHelpers|UnixNativeCodeManager)\\.cpp\\.o$>") - - add_custom_command( - OUTPUT "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" - COMMAND "${CMAKE_COMMAND}" -E rm -f - "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" - "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" - # Generate the objcopy symbol list from libunwind-owned object files only. - COMMAND sh -c "nm_tool=\"$1\" && shift && \"$nm_tool\" --extern-only --defined-only --format=just-symbols \"$@\" > \"$0\"" - "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" - "${CMAKE_NM}" - ${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOL_OBJECTS} - COMMAND sort -u -o - "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" - "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" - COMMAND "${CMAKE_COMMAND}" -E rm -f - "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" - COMMAND "${CMAKE_LINKER}" -r $ -o "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" - COMMAND "${CMAKE_OBJCOPY}" - "--localize-symbols=${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" - "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" - DEPENDS - Runtime.PrivateLibunwind - $ - BYPRODUCTS "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" - COMMENT "Privatizing NativeAOT libunwind symbols" - COMMAND_EXPAND_LISTS - VERBATIM - ) - set_source_files_properties("${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" PROPERTIES - EXTERNAL_OBJECT TRUE - GENERATED TRUE) -endif() - -add_library(Runtime.GC.Workstation OBJECT ${GC_WKS_SVR_SOURCES}) -if(FEATURE_PERFTRACING) - add_dependencies(Runtime.GC.Workstation aot_eventing_headers) -endif() -set_target_properties(Runtime.GC.Workstation PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) - -if(FEATURE_MULTITHREADING) - add_library(Runtime.GC.Server OBJECT ${GC_WKS_SVR_SOURCES}) - if(FEATURE_PERFTRACING) - add_dependencies(Runtime.GC.Server aot_eventing_headers) - endif() - target_compile_definitions(Runtime.GC.Server PRIVATE FEATURE_SVR_GC SERVER_GC) - set_target_properties(Runtime.GC.Server PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) -endif() - -if (CLR_CMAKE_TARGET_WIN32) - # Embed debug info in the object files (/Z7) rather than referencing an external - # compiler PDB. CMake does not assign a compile PDB to OBJECT libraries, so the - # objects archived into Runtime.WorkstationGC/Runtime.ServerGC would otherwise - # reference a vc140.pdb that is absent when these static libs are statically - # linked by the AOT compiler publish projects, producing LNK4099. - set_target_properties(Runtime.GC.Workstation PROPERTIES MSVC_DEBUG_INFORMATION_FORMAT Embedded) - if(FEATURE_MULTITHREADING) - set_target_properties(Runtime.GC.Server PROPERTIES MSVC_DEBUG_INFORMATION_FORMAT Embedded) - endif() -endif (CLR_CMAKE_TARGET_WIN32) - -add_library(Runtime.WorkstationGC STATIC - ${COMMON_RUNTIME_SOURCES} - ${FULL_RUNTIME_SOURCES} - ${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT} - ${RUNTIME_ARCH_ASM_OBJECTS} - $) -if(FEATURE_PERFTRACING) - add_dependencies(Runtime.WorkstationGC aot_eventing_headers) -endif() -target_link_libraries(Runtime.WorkstationGC PRIVATE aotminipal nativeaot_cdac_contract_descriptor nativeaot_gc_wks_descriptor) - -if(FEATURE_MULTITHREADING) - add_library(Runtime.ServerGC STATIC - ${COMMON_RUNTIME_SOURCES} - ${FULL_RUNTIME_SOURCES} - ${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT} - ${RUNTIME_ARCH_ASM_OBJECTS} - $ - $) - if(FEATURE_PERFTRACING) - add_dependencies(Runtime.ServerGC aot_eventing_headers) - endif() - target_link_libraries(Runtime.ServerGC PRIVATE aotminipal nativeaot_cdac_contract_descriptor nativeaot_gc_wks_descriptor nativeaot_gc_svr_descriptor) - target_compile_definitions(Runtime.ServerGC PRIVATE FEATURE_SVR_GC) -endif() -add_library(standalonegc-disabled STATIC ${STANDALONEGC_DISABLED_SOURCES}) -if(FEATURE_PERFTRACING) - add_dependencies(standalonegc-disabled aot_eventing_headers) -endif() -add_library(standalonegc-enabled STATIC ${STANDALONEGC_ENABLED_SOURCES}) -if(FEATURE_PERFTRACING) - add_dependencies(standalonegc-enabled aot_eventing_headers) -endif() -if(FEATURE_EVENT_TRACE) - if(CLR_CMAKE_TARGET_WIN32) - add_dependencies(standalonegc-disabled aot_etw_headers) - add_dependencies(standalonegc-enabled aot_etw_headers) - endif() -endif() - -if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) - add_library(Runtime.VxsortEnabled STATIC ${VXSORT_SOURCES}) - add_library(Runtime.VxsortDisabled STATIC ${DUMMY_VXSORT_SOURCES}) -endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) - -if (CLR_CMAKE_TARGET_WIN32) - set_target_properties(aotminipal PROPERTIES - COMPILE_PDB_NAME "aotminipal" - COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$") -endif (CLR_CMAKE_TARGET_WIN32) - -# Get the current list of definitions -get_compile_definitions(DEFINITIONS) - -set(ASM_OFFSETS_CSPP ${NATIVEAOT_RUNTIME_DIR}/../Runtime.Base/src/AsmOffsets.cspp) - -if(WIN32) - set(COMPILER_LANGUAGE "") - set(PREPROCESSOR_FLAGS -EP -nologo) - set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/windows/AsmOffsets.cpp) -else() - set(COMPILER_LANGUAGE -x c++) - set(PREPROCESSOR_FLAGS -E -P) - set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/unix/AsmOffsets.cpp) -endif() - -add_custom_command( - # The AsmOffsets.cs is consumed later by the managed build - TARGET Runtime.WorkstationGC - POST_BUILD - COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} - -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.cs" -) - -add_custom_command( - COMMAND ${CMAKE_CXX_COMPILER} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${NATIVEAOT_RUNTIME_DIR}" -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" - DEPENDS "${ASM_OFFSETS_CPP}" "${NATIVEAOT_RUNTIME_DIR}/AsmOffsets.h" - COMMENT "Generating AsmOffsets.inc" -) - -set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" PROPERTIES GENERATED TRUE) - -# Runtime.WorkstationGC and Runtime.ServerGC share AsmOffsets.inc and assembler helpers (for Windows ARM/ARM64). -# Avoid a race condition by adding this target as a dependency for both libraries. -add_custom_target( - RuntimeAsmHelpers - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.inc" -) - -add_library(Runtime.AsmHelpers OBJECT ${RUNTIME_SOURCES_ARCH_ASM}) -add_dependencies(Runtime.AsmHelpers RuntimeAsmHelpers) - -target_link_libraries(Runtime.WorkstationGC PRIVATE Runtime.AsmHelpers) -if(FEATURE_MULTITHREADING) - target_link_libraries(Runtime.ServerGC PRIVATE Runtime.AsmHelpers) - install_static_library(Runtime.ServerGC aotsdk nativeaot) -endif() - -install_static_library(Runtime.WorkstationGC aotsdk nativeaot) -install_static_library(standalonegc-disabled aotsdk nativeaot) -install_static_library(standalonegc-enabled aotsdk nativeaot) -install_static_library(aotminipal aotsdk nativeaot) -if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) - install_static_library(Runtime.VxsortEnabled aotsdk nativeaot) - install_static_library(Runtime.VxsortDisabled aotsdk nativeaot) -endif (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) diff --git a/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt deleted file mode 100644 index 4f24712eecf5c8..00000000000000 --- a/src/coreclr/nativeaot/Runtime/Portable/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -project(Runtime) - -# Portable version of the runtime is designed to be used with WASM. -# It should be written in pure C/C++, with no assembly code. - -add_definitions(-DFEATURE_PORTABLE_HELPERS) - -add_library(Runtime.GC.Workstation OBJECT ${GC_WKS_SVR_SOURCES}) -add_dependencies(Runtime.GC.Workstation aot_eventing_headers) -set_target_properties(Runtime.GC.Workstation PROPERTIES UNITY_BUILD ON UNITY_BUILD_BATCH_SIZE 0) - -add_library(Runtime.WorkstationGC STATIC - ${COMMON_RUNTIME_SOURCES} - ${RUNTIME_DIR}/portable/AllocFast.cpp - ${PORTABLE_RUNTIME_SOURCES} - $) -target_link_libraries(Runtime.WorkstationGC PRIVATE aotminipal) -add_dependencies(Runtime.WorkstationGC aot_eventing_headers) - -add_library(standalonegc-disabled STATIC ${STANDALONEGC_DISABLED_SOURCES}) -add_dependencies(standalonegc-disabled aot_eventing_headers) - -# Get the current list of definitions -get_compile_definitions(DEFINITIONS) -set(ASM_OFFSETS_CSPP ${NATIVEAOT_RUNTIME_DIR}/../Runtime.Base/src/AsmOffsets.cspp) - -if(WIN32) - set(COMPILER_LANGUAGE "") - set(PREPROCESSOR_FLAGS -EP -nologo) - set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/windows/AsmOffsets.cpp) - - set_target_properties(aotminipal PROPERTIES - COMPILE_PDB_NAME "aotminipal" - COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$") -else() - set(COMPILER_LANGUAGE -x c++) - set(PREPROCESSOR_FLAGS -E -P) - set(ASM_OFFSETS_CPP ${NATIVEAOT_RUNTIME_DIR}/unix/AsmOffsets.cpp) -endif() - -add_custom_command( - # The AsmOffsets.cs is consumed later by the managed build - TARGET Runtime.WorkstationGC - POST_BUILD - COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.cs" -) - -install_static_library(Runtime.WorkstationGC aotsdk nativeaot) -install_static_library(standalonegc-disabled aotsdk nativeaot) -install_static_library(aotminipal aotsdk nativeaot) diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj b/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj index 8b28b27f903941..7ceffcab62b17b 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj @@ -533,11 +533,8 @@ Common\TransitionBlock.cs - - - - - + + diff --git a/src/coreclr/nativeaot/Test.CoreLib/src/Test.CoreLib.csproj b/src/coreclr/nativeaot/Test.CoreLib/src/Test.CoreLib.csproj index 6f43e30cf95900..acccde8d8fd8f2 100644 --- a/src/coreclr/nativeaot/Test.CoreLib/src/Test.CoreLib.csproj +++ b/src/coreclr/nativeaot/Test.CoreLib/src/Test.CoreLib.csproj @@ -62,7 +62,7 @@ - + From 116925f9e2b3311b6b3c3142dd4bbe5685080718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Fri, 6 Nov 2026 22:03:30 +0900 Subject: [PATCH 3/4] Address NativeAOT CMake review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 404e37e0-40b9-42e0-a486-b369c16cc301 --- src/coreclr/nativeaot/Runtime/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/coreclr/nativeaot/Runtime/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/CMakeLists.txt index 76e1e90b95f050..380d0344100bf0 100644 --- a/src/coreclr/nativeaot/Runtime/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/CMakeLists.txt @@ -408,7 +408,6 @@ convert_to_absolute_path(RUNTIME_SOURCES_ARCH_ASM ${RUNTIME_SOURCES_ARCH_ASM}) convert_to_absolute_path(VXSORT_SOURCES ${VXSORT_SOURCES}) convert_to_absolute_path(DUMMY_VXSORT_SOURCES ${DUMMY_VXSORT_SOURCES}) -# Configure these children before applying helper-specific definitions and include paths. if(FEATURE_PERFTRACING) add_subdirectory(eventpipe) endif() @@ -432,7 +431,7 @@ else() add_definitions(-DFEATURE_RX_THUNKS) endif() - if(CLR_CMAKE_TARGET_WIN32 AND (CLR_CMAKE_HOST_ARCH_ARM OR CLR_CMAKE_HOST_ARCH_ARM64)) + if(CLR_CMAKE_TARGET_WIN32 AND CLR_CMAKE_HOST_ARCH_ARM64) # Needed to include AsmOffsets.inc include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) preprocess_files(RUNTIME_SOURCES_ARCH_ASM ${RUNTIME_SOURCES_ARCH_ASM}) @@ -597,7 +596,7 @@ if(CLR_CMAKE_TARGET_WIN32) endif() add_custom_command( - # The AsmOffsets.cs is consumed later by the managed build. + # AsmOffsets.cs is consumed later by the managed build. TARGET Runtime.WorkstationGC POST_BUILD COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} From 8bae005947a3a590ff9113022d4b992886d5ea1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Sat, 7 Nov 2026 14:28:29 +0900 Subject: [PATCH 4/4] Keep NativeAOT install declarations next to their targets Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 25b5a402-5d11-4d2d-a2b9-5d62a73b3e4d --- src/coreclr/nativeaot/Runtime/CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/coreclr/nativeaot/Runtime/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/CMakeLists.txt index 380d0344100bf0..c68697f292d997 100644 --- a/src/coreclr/nativeaot/Runtime/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/CMakeLists.txt @@ -538,6 +538,7 @@ endif() if(NOT FEATURE_PORTABLE_HELPERS) target_link_libraries(Runtime.WorkstationGC PRIVATE Runtime.AsmHelpers) endif() +install_static_library(Runtime.WorkstationGC aotsdk nativeaot) if(FEATURE_MULTITHREADING AND NOT CLR_CMAKE_TARGET_ARCH_WASM) add_library(Runtime.GC.Server OBJECT ${GC_WKS_SVR_SOURCES}) @@ -570,6 +571,7 @@ endif() if(FEATURE_EVENT_TRACE AND CLR_CMAKE_TARGET_WIN32) add_dependencies(standalonegc-disabled aot_etw_headers) endif() +install_static_library(standalonegc-disabled aotsdk nativeaot) if(NOT CLR_CMAKE_TARGET_ARCH_WASM) add_library(standalonegc-enabled STATIC ${STANDALONEGC_ENABLED_SOURCES}) @@ -594,6 +596,7 @@ if(CLR_CMAKE_TARGET_WIN32) COMPILE_PDB_NAME "aotminipal" COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$") endif() +install_static_library(aotminipal aotsdk nativeaot) add_custom_command( # AsmOffsets.cs is consumed later by the managed build. @@ -602,7 +605,3 @@ add_custom_command( COMMAND ${CMAKE_CXX_COMPILER} ${COMPILER_LANGUAGE} ${DEFINITIONS} ${PREPROCESSOR_FLAGS} -I"${ARCH_SOURCES_DIR}" "${ASM_OFFSETS_CSPP}" >"${CMAKE_CURRENT_BINARY_DIR}/AsmOffsets.cs" ) - -install_static_library(Runtime.WorkstationGC aotsdk nativeaot) -install_static_library(standalonegc-disabled aotsdk nativeaot) -install_static_library(aotminipal aotsdk nativeaot)