From 4d490ac95cbfcad15a059ecf95730f91fccb8d50 Mon Sep 17 00:00:00 2001 From: Adeel <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:18:08 +0300 Subject: [PATCH 1/8] Sync eng/native with runtime --- CMakeLists.txt | 4 + eng/native/build-commons.sh | 43 +++--- eng/native/configurecompiler.cmake | 102 +++++++++----- eng/native/configurepaths.cmake | 3 +- eng/native/configureplatform.cmake | 22 ++- eng/native/configuretools.cmake | 15 ++- eng/native/createdump-entitlements.plist | 12 ++ eng/native/entitlements.plist | 16 +++ eng/native/functions.cmake | 156 ++++++++++++++++------ eng/native/gen-buildsys.cmd | 70 +++++----- eng/native/gen-buildsys.sh | 19 ++- eng/native/generateversionscript.ps1 | 34 +++++ eng/native/ijw/IJW.cmake | 4 + eng/native/naming.props | 30 ++++- eng/native/sign-with-dac-certificate.ps1 | 56 ++++++++ eng/native/signing/auth.json | 20 +++ eng/native/signing/config.json | 6 + eng/native/signing/input.template.json | 36 +++++ eng/native/signing/policy.json | 3 + eng/native/tryrun.cmake | 63 ++++----- eng/native/tryrun_ios_tvos.cmake | 1 + eng/native/version/copy_version_files.ps1 | 27 ++++ 22 files changed, 564 insertions(+), 178 deletions(-) create mode 100644 eng/native/createdump-entitlements.plist create mode 100644 eng/native/entitlements.plist create mode 100644 eng/native/generateversionscript.ps1 create mode 100644 eng/native/sign-with-dac-certificate.ps1 create mode 100644 eng/native/signing/auth.json create mode 100644 eng/native/signing/config.json create mode 100644 eng/native/signing/input.template.json create mode 100644 eng/native/signing/policy.json create mode 100644 eng/native/version/copy_version_files.ps1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 882f5b3e05..656a564f3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,10 @@ project(diagnostics) include(eng/native/configurepaths.cmake) include(${CLR_ENG_NATIVE_DIR}/configurecompiler.cmake) +# Platform specific compiler options +set(CLR_SHARED_DIR ${CLR_REPO_ROOT_DIR}/src/shared) +get_filename_component(CLR_SRC_NATIVE_DIR ${CLR_SHARED_DIR}/native ABSOLUTE) + if(CLR_CMAKE_HOST_UNIX) # The -fms-extensions enable the stuff like __if_exists, __declspec(uuid()), etc. add_compile_options(-fms-extensions) diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh index e0346c9d33..8c8baaaf34 100755 --- a/eng/native/build-commons.sh +++ b/eng/native/build-commons.sh @@ -63,6 +63,20 @@ build_native() # All set to commence the build echo "Commencing build of \"$target\" target in \"$message\" for $__TargetOS.$__TargetArch.$__BuildType in $intermediatesDir" + SAVED_CFLAGS="${CFLAGS}" + SAVED_CXXFLAGS="${CXXFLAGS}" + SAVED_LDFLAGS="${LDFLAGS}" + + # Let users provide additional compiler/linker flags via EXTRA_CFLAGS/EXTRA_CXXFLAGS/EXTRA_LDFLAGS. + # If users directly override CFLAG/CXXFLAGS/LDFLAGS, that may lead to some configure tests working incorrectly. + # See https://github.com/dotnet/runtime/issues/35727 for more information. + # + # These flags MUST be exported before gen-buildsys.sh runs or cmake will ignore them + # + export CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}" + export CXXFLAGS="${CXXFLAGS} ${EXTRA_CXXFLAGS}" + export LDFLAGS="${LDFLAGS} ${EXTRA_LDFLAGS}" + if [[ "$targetOS" == osx || "$targetOS" == maccatalyst ]]; then if [[ "$hostArch" == x64 ]]; then cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs" @@ -75,19 +89,23 @@ build_native() fi if [[ "$targetOS" == maccatalyst ]]; then - cmakeArgs="-DCMAKE_SYSTEM_VARIANT=maccatalyst $cmakeArgs" + cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs" + + # set default macCatalyst deployment target + # keep in sync with SetOSTargetMinVersions in the root Directory.Build.props + cmakeArgs="-DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_SYSROOT=macosx -DCMAKE_SYSTEM_VARIANT=maccatalyst -DCMAKE_OSX_DEPLOYMENT_TARGET=15.0 $cmakeArgs" fi if [[ "$targetOS" == android || "$targetOS" == linux-bionic ]]; then + # Keep in sync with $(AndroidApiLevelMin) in Directory.Build.props in the repository rooot + local ANDROID_API_LEVEL=21 if [[ -z "$ANDROID_NDK_ROOT" ]]; then echo "Error: You need to set the ANDROID_NDK_ROOT environment variable pointing to the Android NDK root." exit 1 fi - cmakeArgs="-C $__RepoRootDir/eng/native/tryrun.cmake $cmakeArgs" - - # keep ANDROID_PLATFORM in sync with SetOSTargetMinVersions in the root Directory.Build.props - cmakeArgs="-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-21 $cmakeArgs" + cmakeArgs="-DANDROID_BUILD=1 -C $__RepoRootDir/eng/native/tryrun.cmake $cmakeArgs" + cmakeArgs="-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-${ANDROID_API_LEVEL} -DANDROID_NATIVE_API_LEVEL=${ANDROID_API_LEVEL} $cmakeArgs" # Don't try to set CC/CXX in init-compiler.sh - it's handled in android.toolchain.cmake already __Compiler="default" @@ -194,17 +212,6 @@ build_native() return fi - SAVED_CFLAGS="${CFLAGS}" - SAVED_CXXFLAGS="${CXXFLAGS}" - SAVED_LDFLAGS="${LDFLAGS}" - - # Let users provide additional compiler/linker flags via EXTRA_CFLAGS/EXTRA_CXXFLAGS/EXTRA_LDFLAGS. - # If users directly override CFLAG/CXXFLAGS/LDFLAGS, that may lead to some configure tests working incorrectly. - # See https://github.com/dotnet/runtime/issues/35727 for more information. - export CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}" - export CXXFLAGS="${CXXFLAGS} ${EXTRA_CXXFLAGS}" - export LDFLAGS="${LDFLAGS} ${EXTRA_LDFLAGS}" - local exit_code if [[ "$__StaticAnalyzer" == 1 ]]; then pushd "$intermediatesDir" @@ -485,7 +492,6 @@ while :; do hostarch|-hostarch) if [[ -n "$2" ]]; then __HostArch="$2" - __ExplicitHostArch=1 shift else echo "ERROR: 'hostarch' requires a non-empty option argument" @@ -545,6 +551,9 @@ elif [[ "$__TargetOS" == ios || "$__TargetOS" == iossimulator ]]; then elif [[ "$__TargetOS" == tvos || "$__TargetOS" == tvossimulator ]]; then # nothing to do here true +elif [[ "$__TargetOS" == osx || "$__TargetOS" == maccatalyst ]]; then + # nothing to do here + true elif [[ "$__TargetOS" == android ]]; then # nothing to do here true diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 312312daa3..a3ed8cefb4 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -1,7 +1,3 @@ -# Due to how we build the libraries native build as part of the CoreCLR build as well as standalone, -# we can end up coming to this file twice. Only run it once to simplify our build. -include_guard() - include(${CMAKE_CURRENT_LIST_DIR}/configuretools.cmake) # Set initial flags for each configuration @@ -9,7 +5,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/configuretools.cmake) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # We need to set this to Release as there's no way to intercept configuration-specific linker flags @@ -38,6 +34,13 @@ if (CLR_CMAKE_HOST_UNIX) endif() endif() +# Force usage of classic linker on Xcode 15 +if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15 AND + CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + add_link_options("-Wl,-ld_classic") +endif() + if (CMAKE_CONFIGURATION_TYPES) # multi-configuration generator? set(CMAKE_CONFIGURATION_TYPES "Debug;Checked;Release;RelWithDebInfo" CACHE STRING "" FORCE) endif (CMAKE_CONFIGURATION_TYPES) @@ -74,6 +77,12 @@ if (MSVC) add_compile_options($<$:$>) add_link_options($<$>:/guard:cf>) + if (NOT CLR_CMAKE_PGO_INSTRUMENT) + # Load all imported DLLs from the System32 directory. + # Don't do this when instrumenting for PGO as a local DLL dependency is introduced by the instrumentation + add_linker_flag(/DEPENDENTLOADFLAG:0x800) + endif() + # Linker flags # set (WINDOWS_SUBSYSTEM_VERSION 6.01) @@ -131,17 +140,13 @@ if (MSVC) add_linker_flag(/OPT:NOICF CHECKED) # Release build specific flags - add_linker_flag(/LTCG RELEASE) add_linker_flag(/OPT:REF RELEASE) add_linker_flag(/OPT:ICF RELEASE) add_linker_flag(/INCREMENTAL:NO RELEASE) - set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG") # ReleaseWithDebugInfo build specific flags - add_linker_flag(/LTCG RELWITHDEBINFO) add_linker_flag(/OPT:REF RELWITHDEBINFO) add_linker_flag(/OPT:ICF RELWITHDEBINFO) - set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG") elseif (CLR_CMAKE_HOST_UNIX) # Set the values to display when interactively configuring CMAKE_BUILD_TYPE @@ -304,15 +309,22 @@ elseif(CLR_CMAKE_HOST_SUNOS) add_compile_options($<$:-Wa,--noexecstack>) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector") - add_definitions(-D__EXTENSIONS__ -D_XPG4_2 -D_POSIX_PTHREAD_SEMANTICS) -elseif(CLR_CMAKE_HOST_OSX AND NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS) + add_definitions(-D__EXTENSIONS__ -D_XPG4_2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT) +elseif(CLR_CMAKE_HOST_APPLE) + # enable support for X/Open and POSIX APIs, like the header file add_definitions(-D_XOPEN_SOURCE) - - # the new linker in Xcode 15 (ld_new/ld_prime) deprecated the -bind_at_load flag for macOS which causes a warning - # that fails the build since we build with -Werror. Only pass the flag if we need it, i.e. older linkers. - check_linker_flag(C "-Wl,-bind_at_load,-fatal_warnings" LINKER_SUPPORTS_BIND_AT_LOAD_FLAG) - if(LINKER_SUPPORTS_BIND_AT_LOAD_FLAG) - add_linker_flag("-Wl,-bind_at_load") + # enable support for Darwin extension APIs, like pthread_getthreadid_np + add_definitions(-D_DARWIN_C_SOURCE) + # enable the non-cancellable versions of APIs with $NOCANCEL variants, like close(2) + add_definitions(-D__DARWIN_NON_CANCELABLE=1) + + if(CLR_CMAKE_HOST_OSX) + # the new linker in Xcode 15 (ld_new/ld_prime) deprecated the -bind_at_load flag for macOS which causes a warning + # that fails the build since we build with -Werror. Only pass the flag if we need it, i.e. older linkers. + check_linker_flag(C "-Wl,-bind_at_load,-fatal_warnings" LINKER_SUPPORTS_BIND_AT_LOAD_FLAG) + if(LINKER_SUPPORTS_BIND_AT_LOAD_FLAG) + add_linker_flag("-Wl,-bind_at_load") + endif() endif() elseif(CLR_CMAKE_HOST_HAIKU) add_compile_options($<$:-Wa,--noexecstack>) @@ -439,6 +451,8 @@ if (CLR_CMAKE_HOST_UNIX) message("Detected Haiku x86_64") elseif(CLR_CMAKE_HOST_BROWSER) add_definitions(-DHOST_BROWSER) + elseif(CLR_CMAKE_HOST_ANDROID) + add_definitions(-DHOST_ANDROID) endif() elseif(CLR_CMAKE_HOST_WASI) add_definitions(-DHOST_WASI) @@ -522,13 +536,18 @@ endif () #-------------------------------------- # Compile Options #-------------------------------------- -if (CLR_CMAKE_HOST_UNIX) +if (CLR_CMAKE_HOST_UNIX OR CLR_CMAKE_HOST_WASI) # Disable frame pointer optimizations so profilers can get better call stacks add_compile_options(-fno-omit-frame-pointer) - # Make signed arithmetic overflow of addition, subtraction, and multiplication wrap around + # Make signed overflow well-defined. Implies the following flags in clang-20 and above. + # -fwrapv - Make signed arithmetic overflow of addition, subtraction, and multiplication wrap around # using twos-complement representation (this is normally undefined according to the C++ spec). - add_compile_options(-fwrapv) + # -fwrapv-pointer - The same as -fwrapv but for pointers. + add_compile_options(-fno-strict-overflow) + + # Suppress C++ strict aliasing rules. This matches our use of MSVC. + add_compile_options(-fno-strict-aliasing) if(CLR_CMAKE_HOST_APPLE) # Clang will by default emit objc_msgSend stubs in Xcode 14, which ld from earlier Xcodes doesn't understand. @@ -624,6 +643,9 @@ if (CLR_CMAKE_HOST_UNIX) # clang 18.1 supressions add_compile_options(-Wno-switch-default) + + # clang 20 suppressions + add_compile_options($<$:-Wno-nontrivial-memaccess>) else() add_compile_options(-Wno-uninitialized) add_compile_options(-Wno-strict-aliasing) @@ -666,26 +688,38 @@ if (CLR_CMAKE_HOST_UNIX) # a value for mmacosx-version-min (blank CMAKE_OSX_DEPLOYMENT_TARGET gets # replaced with a default value, and always gets expanded to an OS version. # https://gitlab.kitware.com/cmake/cmake/-/issues/20132 - # We need to disable the warning that -tagret replaces -mmacosx-version-min - set(DISABLE_OVERRIDING_MIN_VERSION_ERROR -Wno-overriding-t-option) - add_link_options(-Wno-overriding-t-option) + # We need to disable the warning that -target replaces -mmacosx-version-min + # + # With https://github.com/llvm/llvm-project/commit/1c66d08b0137cef7761b8220d3b7cb7833f57cdb clang renamed the option so we need to check for both + check_c_compiler_flag("-Wno-overriding-option" COMPILER_SUPPORTS_W_NO_OVERRIDING_OPTION) + if (COMPILER_SUPPORTS_W_NO_OVERRIDING_OPTION) + set(DISABLE_OVERRIDING_MIN_VERSION_ERROR -Wno-overriding-option) + else() + check_c_compiler_flag("-Wno-overriding-t-option" COMPILER_SUPPORTS_W_NO_OVERRIDING_T_OPTION) + if (COMPILER_SUPPORTS_W_NO_OVERRIDING_T_OPTION) + set(DISABLE_OVERRIDING_MIN_VERSION_ERROR -Wno-overriding-t-option) + else() + message(FATAL_ERROR "Compiler does not support -Wno-overriding-option or -Wno-overriding-t-option, needed for Mac Catalyst builds.") + endif() + endif() + add_link_options(${DISABLE_OVERRIDING_MIN_VERSION_ERROR}) if(CLR_CMAKE_HOST_ARCH_ARM64) - set(MACOS_VERSION_MIN_FLAGS "-target arm64-apple-ios15.0-macabi") - add_link_options(-target arm64-apple-ios15.0-macabi) + set(CLR_CMAKE_MACCATALYST_COMPILER_TARGET "arm64-apple-ios15.0-macabi") + add_link_options(-target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET}) elseif(CLR_CMAKE_HOST_ARCH_AMD64) - set(MACOS_VERSION_MIN_FLAGS "-target x86_64-apple-ios15.0-macabi") - add_link_options(-target x86_64-apple-ios15.0-macabi) + set(CLR_CMAKE_MACCATALYST_COMPILER_TARGET "x86_64-apple-ios15.0-macabi") + add_link_options(-target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET}) else() clr_unknown_arch() endif() # These options are intentionally set using the CMAKE_XXX_FLAGS instead of # add_compile_options so that they take effect on the configuration functions # in various configure.cmake files. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_OBJCXX_FLAGS "${CMAKE_OBJCXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS}-target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_OBJCXX_FLAGS "${CMAKE_OBJCXX_FLAGS} -target ${CLR_CMAKE_MACCATALYST_COMPILER_TARGET} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") elseif(CLR_CMAKE_HOST_OSX) set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0") if(CLR_CMAKE_HOST_ARCH_ARM64) @@ -697,7 +731,7 @@ if (CLR_CMAKE_HOST_UNIX) endif() endif(CLR_CMAKE_HOST_MACCATALYST) -endif(CLR_CMAKE_HOST_UNIX) +endif(CLR_CMAKE_HOST_UNIX OR CLR_CMAKE_HOST_WASI) if(CLR_CMAKE_TARGET_UNIX) add_compile_definitions($<$>>:TARGET_UNIX>) @@ -797,8 +831,6 @@ if (MSVC) add_compile_options($<$:/fp:precise>) # Enable precise floating point # Disable C++ RTTI - # /GR is added by default by CMake, so remove it manually. - string(REPLACE "/GR " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-") add_compile_options($<$:/FC>) # use full pathnames in diagnostics diff --git a/eng/native/configurepaths.cmake b/eng/native/configurepaths.cmake index 0ffe4ebfa1..7d6851d1cf 100644 --- a/eng/native/configurepaths.cmake +++ b/eng/native/configurepaths.cmake @@ -1,10 +1,9 @@ get_filename_component(CLR_REPO_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE) set(CLR_ENG_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR}) -get_filename_component(CLR_SRC_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../src/shared/native ABSOLUTE) +get_filename_component(CLR_SRC_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../src/native ABSOLUTE) set (CLR_ARTIFACTS_OBJ_DIR "${CLR_REPO_ROOT_DIR}/artifacts/obj") set (CLR_SOURCELINK_FILE_PATH "${CLR_ARTIFACTS_OBJ_DIR}/native.sourcelink.json") set(VERSION_HEADER_PATH "${CLR_ARTIFACTS_OBJ_DIR}/_version.h") set(VERSION_FILE_PATH "${CLR_ARTIFACTS_OBJ_DIR}/_version.c") set(VERSION_FILE_RC_PATH "${CLR_ARTIFACTS_OBJ_DIR}/NativeVersion.rc") set(RUNTIME_VERSION_HEADER_PATH "${CLR_ARTIFACTS_OBJ_DIR}/runtime_version.h") -set(CLR_SHARED_DIR ${CLR_REPO_ROOT_DIR}/src/shared) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index 10f623e6d5..5cd67cbadf 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -29,6 +29,8 @@ if(CLR_CMAKE_HOST_OS STREQUAL linux) set(CLR_CMAKE_HOST_UNIX_X86 1) elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL aarch64) set(CLR_CMAKE_HOST_UNIX_ARM64 1) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL riscv64) + set(CLR_CMAKE_HOST_UNIX_RISCV64 1) else() clr_unknown_arch() endif() @@ -368,6 +370,11 @@ if(CLR_CMAKE_HOST_LINUX_MUSL OR CLR_CMAKE_TARGET_OS STREQUAL alpine) set(CLR_CMAKE_TARGET_LINUX_MUSL 1) endif(CLR_CMAKE_HOST_LINUX_MUSL OR CLR_CMAKE_TARGET_OS STREQUAL alpine) +macro(set_cache_value) + set(${ARGV0} ${ARGV1} CACHE STRING "Result from TRY_RUN" FORCE) + set(${ARGV0}__TRYRUN_OUTPUT "dummy output" CACHE STRING "Output from TRY_RUN" FORCE) +endmacro() + if(CLR_CMAKE_TARGET_OS STREQUAL android) set(CLR_CMAKE_TARGET_UNIX 1) set(CLR_CMAKE_TARGET_LINUX 1) @@ -427,10 +434,10 @@ if(CLR_CMAKE_TARGET_OS STREQUAL haiku) set(CLR_CMAKE_TARGET_HAIKU 1) endif(CLR_CMAKE_TARGET_OS STREQUAL haiku) -if(CLR_CMAKE_TARGET_OS STREQUAL emscripten) +if(CLR_CMAKE_TARGET_OS STREQUAL emscripten OR CLR_CMAKE_TARGET_OS STREQUAL browser) set(CLR_CMAKE_TARGET_UNIX 1) set(CLR_CMAKE_TARGET_BROWSER 1) -endif(CLR_CMAKE_TARGET_OS STREQUAL emscripten) +endif(CLR_CMAKE_TARGET_OS STREQUAL emscripten OR CLR_CMAKE_TARGET_OS STREQUAL browser) if(CLR_CMAKE_TARGET_OS STREQUAL wasi) set(CLR_CMAKE_TARGET_WASI 1) @@ -471,7 +478,7 @@ if(CLR_CMAKE_TARGET_OS STREQUAL windows) endif() # check if host & target os/arch combination are valid -if (NOT (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS) AND NOT CLR_CMAKE_TARGET_WASI) +if (NOT (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS) AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER) if(NOT (CLR_CMAKE_HOST_OS STREQUAL windows)) message(FATAL_ERROR "Invalid host and target os/arch combination. Host OS: ${CLR_CMAKE_HOST_OS}") endif() @@ -494,7 +501,7 @@ if(NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() -if (CLR_CMAKE_TARGET_ANDROID) +if (CLR_CMAKE_HOST_ANDROID) # Google requires all the native libraries to be aligned to 16 bytes (for 16k memory page size) # This applies only to 64-bit binaries if(CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) @@ -504,6 +511,8 @@ endif() string(TOLOWER "${CMAKE_BUILD_TYPE}" LOWERCASE_CMAKE_BUILD_TYPE) if(LOWERCASE_CMAKE_BUILD_TYPE STREQUAL debug) # Clear _FORTIFY_SOURCE=2, if set + string(REPLACE "-Wp,-D_FORTIFY_SOURCE=2 " "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REPLACE "-Wp,-D_FORTIFY_SOURCE=2 " "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") string(REPLACE "-D_FORTIFY_SOURCE=2 " "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-D_FORTIFY_SOURCE=2 " "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") endif() @@ -514,3 +523,8 @@ if (CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET # - Armv6: zlib-ng has build breaks set(CLR_CMAKE_USE_SYSTEM_ZLIB 1) endif() + +if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) + # opt into building tools like ildasm/ilasm + set(CLR_CMAKE_BUILD_TOOLS 1) +endif() diff --git a/eng/native/configuretools.cmake b/eng/native/configuretools.cmake index 6898f88578..de4571f905 100644 --- a/eng/native/configuretools.cmake +++ b/eng/native/configuretools.cmake @@ -77,10 +77,17 @@ endif() if (NOT CLR_CMAKE_HOST_WIN32) # detect linker - execute_process(COMMAND sh -c "${CMAKE_C_COMPILER} ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--version | head -1" - ERROR_QUIET - OUTPUT_VARIABLE ldVersionOutput - OUTPUT_STRIP_TRAILING_WHITESPACE) + if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + execute_process(COMMAND ${CMAKE_C_COMPILER} -Wl,--version + ERROR_QUIET + OUTPUT_VARIABLE ldVersionOutput + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + execute_process(COMMAND sh -c "${CMAKE_C_COMPILER} ${CMAKE_SHARED_LINKER_FLAGS} -Wl,--version | head -1" + ERROR_QUIET + OUTPUT_VARIABLE ldVersionOutput + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() if("${ldVersionOutput}" MATCHES "LLD") set(LD_LLVM 1) diff --git a/eng/native/createdump-entitlements.plist b/eng/native/createdump-entitlements.plist new file mode 100644 index 0000000000..1f2d3798ee --- /dev/null +++ b/eng/native/createdump-entitlements.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.debugger + + + diff --git a/eng/native/entitlements.plist b/eng/native/entitlements.plist new file mode 100644 index 0000000000..168fce4fcd --- /dev/null +++ b/eng/native/entitlements.plist @@ -0,0 +1,16 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.debugger + + com.apple.security.get-task-allow + + + diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake index b1cb09d662..5b5ad8e678 100644 --- a/eng/native/functions.cmake +++ b/eng/native/functions.cmake @@ -1,11 +1,5 @@ function(clr_unknown_arch) - if (WIN32) - message(FATAL_ERROR "Only AMD64, ARM64, ARM and I386 hosts are supported. Found: ${CMAKE_SYSTEM_PROCESSOR}") - elseif(CLR_CROSS_COMPONENTS_BUILD) - message(FATAL_ERROR "Only AMD64, ARM64 and I386 hosts are supported for linux cross-architecture component. Found: ${CMAKE_SYSTEM_PROCESSOR}") - else() - message(FATAL_ERROR "'${CMAKE_SYSTEM_PROCESSOR}' is an unsupported architecture.") - endif() + message(FATAL_ERROR "'${CMAKE_SYSTEM_PROCESSOR}' is an unsupported architecture.") endfunction() # C to MASM include file translator @@ -319,7 +313,7 @@ function(add_component componentName) else() set(componentTargetName "${componentName}") endif() - if (${ARGC} EQUAL 3 AND "${ARG2}" STREQUAL "EXCLUDE_FROM_ALL") + if (${ARGC} EQUAL 3 AND "${ARGV2}" STREQUAL "EXCLUDE_FROM_ALL") set(exclude_from_all_flag "EXCLUDE_FROM_ALL") endif() get_property(definedComponents GLOBAL PROPERTY CLR_CMAKE_COMPONENTS) @@ -338,39 +332,66 @@ function(generate_exports_file) list(GET INPUT_LIST -1 outputFilename) list(REMOVE_AT INPUT_LIST -1) - if(CLR_CMAKE_TARGET_APPLE) - set(SCRIPT_NAME generateexportedsymbols.sh) + # Win32 may be false when cross compiling + if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(SCRIPT_NAME ${CLR_ENG_NATIVE_DIR}/generateversionscript.ps1) + + add_custom_command( + OUTPUT ${outputFilename} + COMMAND powershell -NoProfile -ExecutionPolicy ByPass -File "${SCRIPT_NAME}" ${INPUT_LIST} >${outputFilename} + DEPENDS ${INPUT_LIST} ${SCRIPT_NAME} + COMMENT "Generating exports file ${outputFilename}" + ) else() - set(SCRIPT_NAME generateversionscript.sh) + if(CLR_CMAKE_TARGET_APPLE) + set(SCRIPT_NAME ${CLR_ENG_NATIVE_DIR}/generateexportedsymbols.sh) + else() + set(SCRIPT_NAME ${CLR_ENG_NATIVE_DIR}/generateversionscript.sh) + endif() + + add_custom_command( + OUTPUT ${outputFilename} + COMMAND ${SCRIPT_NAME} ${INPUT_LIST} >${outputFilename} + DEPENDS ${INPUT_LIST} ${SCRIPT_NAME} + COMMENT "Generating exports file ${outputFilename}" + ) endif() - add_custom_command( - OUTPUT ${outputFilename} - COMMAND ${CLR_ENG_NATIVE_DIR}/${SCRIPT_NAME} ${INPUT_LIST} >${outputFilename} - DEPENDS ${INPUT_LIST} ${CLR_ENG_NATIVE_DIR}/${SCRIPT_NAME} - COMMENT "Generating exports file ${outputFilename}" - ) set_source_files_properties(${outputFilename} PROPERTIES GENERATED TRUE) endfunction() function(generate_exports_file_prefix inputFilename outputFilename prefix) - if(CMAKE_SYSTEM_NAME STREQUAL Darwin) set(SCRIPT_NAME generateexportedsymbols.sh) else() - set(SCRIPT_NAME generateversionscript.sh) + # Win32 may be false when cross compiling + if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(SCRIPT_NAME ${CLR_ENG_NATIVE_DIR}/generateversionscript.ps1) + else() + set(SCRIPT_NAME ${CLR_ENG_NATIVE_DIR}/generateversionscript.sh) + endif() + if (NOT ${prefix} STREQUAL "") set(EXTRA_ARGS ${prefix}) endif() endif(CMAKE_SYSTEM_NAME STREQUAL Darwin) - add_custom_command( - OUTPUT ${outputFilename} - COMMAND ${CLR_ENG_NATIVE_DIR}/${SCRIPT_NAME} ${inputFilename} ${EXTRA_ARGS} >${outputFilename} - DEPENDS ${inputFilename} ${CLR_ENG_NATIVE_DIR}/${SCRIPT_NAME} - COMMENT "Generating exports file ${outputFilename}" - ) + if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + add_custom_command( + OUTPUT ${outputFilename} + COMMAND powershell -NoProfile -ExecutionPolicy ByPass -File \"${SCRIPT_NAME}\" ${inputFilename} ${EXTRA_ARGS} >${outputFilename} + DEPENDS ${inputFilename} ${SCRIPT_NAME} + COMMENT "Generating exports file ${outputFilename}" + ) + else() + add_custom_command( + OUTPUT ${outputFilename} + COMMAND ${SCRIPT_NAME} ${inputFilename} ${EXTRA_ARGS} >${outputFilename} + DEPENDS ${inputFilename} ${SCRIPT_NAME} + COMMENT "Generating exports file ${outputFilename}" + ) + endif() set_source_files_properties(${outputFilename} PROPERTIES GENERATED TRUE) endfunction() @@ -445,16 +466,28 @@ function(strip_symbols targetName outputFilename) COMMAND ${strip_command} ) else (CLR_CMAKE_TARGET_APPLE) - - add_custom_command( - TARGET ${targetName} - POST_BUILD - VERBATIM - COMMAND sh -c "echo Stripping symbols from $(basename '${strip_source_file}') into $(basename '${strip_destination_file}')" - COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} - COMMAND ${CMAKE_OBJCOPY} --strip-debug --strip-unneeded ${strip_source_file} - COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} + # Win32 may be false when cross compiling + if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + add_custom_command( + TARGET ${targetName} + POST_BUILD + VERBATIM + COMMAND powershell -C "echo Stripping symbols from $(Split-Path -Path '${strip_source_file}' -Leaf) into $(Split-Path -Path '${strip_destination_file}' -Leaf)" + COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} + COMMAND ${CMAKE_OBJCOPY} --strip-debug --strip-unneeded ${strip_source_file} + COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} + ) + else() + add_custom_command( + TARGET ${targetName} + POST_BUILD + VERBATIM + COMMAND sh -c "echo Stripping symbols from $(basename '${strip_source_file}') into $(basename '${strip_destination_file}')" + COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} + COMMAND ${CMAKE_OBJCOPY} --strip-debug --strip-unneeded ${strip_source_file} + COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} ) + endif() endif (CLR_CMAKE_TARGET_APPLE) endif(CLR_CMAKE_HOST_UNIX) endfunction() @@ -489,7 +522,8 @@ endfunction() function(install_symbol_file symbol_file destination_path) if(CLR_CMAKE_TARGET_WIN32) - install(FILES ${symbol_file} DESTINATION ${destination_path}/PDB ${ARGN}) + cmake_path(SET DEST NORMALIZE "${destination_path}/PDB") + install(FILES ${symbol_file} DESTINATION ${DEST} ${ARGN}) else() install(FILES ${symbol_file} DESTINATION ${destination_path} ${ARGN}) endif() @@ -514,11 +548,11 @@ function(install_static_library targetName destination component) endif() endfunction() -# install_clr(TARGETS targetName [targetName2 ...] [DESTINATIONS destination [destination2 ...]] [COMPONENT componentName]) +# install_clr(TARGETS targetName [targetName2 ...] [DESTINATIONS destination [destination2 ...]] [COMPONENT componentName] [OPTIONAL]) function(install_clr) set(multiValueArgs TARGETS DESTINATIONS) set(singleValueArgs COMPONENT) - set(options "") + set(options OPTIONAL) cmake_parse_arguments(INSTALL_CLR "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGV}) if ("${INSTALL_CLR_TARGETS}" STREQUAL "") @@ -553,12 +587,36 @@ function(install_clr) get_symbol_file_name(${targetName} symbolFile) endif() + if (${INSTALL_CLR_OPTIONAL}) + set(INSTALL_CLR_OPTIONAL "OPTIONAL") + else() + set(INSTALL_CLR_OPTIONAL "") + endif() + foreach(destination ${destinations}) - # We don't need to install the export libraries for our DLLs - # since they won't be directly linked against. - install(PROGRAMS $ DESTINATION ${destination} COMPONENT ${INSTALL_CLR_COMPONENT}) - if (NOT "${symbolFile}" STREQUAL "") - install_symbol_file(${symbolFile} ${destination} COMPONENT ${INSTALL_CLR_COMPONENT}) + # CMake bug with executable WASM outputs - https://gitlab.kitware.com/cmake/cmake/-/issues/20745 + if (CLR_CMAKE_TARGET_ARCH_WASM AND "${targetType}" STREQUAL "EXECUTABLE") + # Use install FILES since these are WASM assets that aren't executable. + install(FILES + "$/${targetName}.js" + "$/${targetName}.wasm" + DESTINATION ${destination} COMPONENT ${INSTALL_CLR_COMPONENT} ${INSTALL_CLR_OPTIONAL}) + + # Conditionally check for and copy any extra data file at install time. + install(CODE + " + if(EXISTS \"$/${targetName}.data\") + file(INSTALL \"$/${targetName}.data\" DESTINATION \"${CMAKE_INSTALL_PREFIX}/${destination}\") + endif() + " + COMPONENT ${INSTALL_CLR_COMPONENT} ${INSTALL_CLR_OPTIONAL}) + else() + # We don't need to install the export libraries for our DLLs + # since they won't be directly linked against. + install(PROGRAMS $ DESTINATION ${destination} COMPONENT ${INSTALL_CLR_COMPONENT} ${INSTALL_CLR_OPTIONAL}) + if (NOT "${symbolFile}" STREQUAL "") + install_symbol_file(${symbolFile} ${destination} COMPONENT ${INSTALL_CLR_COMPONENT} ${INSTALL_CLR_OPTIONAL}) + endif() endif() if(CLR_CMAKE_PGO_INSTRUMENT) @@ -637,7 +695,7 @@ endfunction() function(add_sanitizer_runtime_support targetName) # Add sanitizer support functions. if (CLR_CMAKE_ENABLE_ASAN) - target_sources(${targetName} PRIVATE "$<$,EXECUTABLE>:${CLR_SRC_NATIVE_DIR}/minipal/asansupport.cpp>") + target_link_libraries(${targetName} PRIVATE $<$,EXECUTABLE>:minipal_sanitizer_support>) endif() endfunction() @@ -677,3 +735,15 @@ function(adhoc_sign_with_entitlements targetName entitlementsFile) POST_BUILD COMMAND codesign -s - -f --entitlements ${entitlementsFile} $) endfunction() + +function(esrp_sign targetName) + if ("${CLR_CMAKE_ESRP_CLIENT}" STREQUAL "") + return() + endif() + + add_custom_command( + TARGET ${targetName} + POST_BUILD + COMMAND powershell -ExecutionPolicy ByPass -NoProfile "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/sign-with-dac-certificate.ps1" -esrpClient ${CLR_CMAKE_ESRP_CLIENT} $ + ) +endfunction() diff --git a/eng/native/gen-buildsys.cmd b/eng/native/gen-buildsys.cmd index 3a6e1b5426..0f5cccf8c8 100644 --- a/eng/native/gen-buildsys.cmd +++ b/eng/native/gen-buildsys.cmd @@ -2,30 +2,43 @@ rem rem This file invokes cmake and generates the build system for windows. -setlocal +set __argCount=0 +for %%x in (%*) do set /A __argCount+=1 -set argC=0 -for %%x in (%*) do Set /A argC+=1 +if %__argCount% lss 4 goto :USAGE +if %1=="/?" goto :USAGE -if %argC% lss 4 GOTO :USAGE -if %1=="/?" GOTO :USAGE - -setlocal enabledelayedexpansion +set __Os=%5 set "__repoRoot=%~dp0..\.." :: normalize for %%i in ("%__repoRoot%") do set "__repoRoot=%%~fi" +:: Set up the EMSDK environment before setlocal so that it propagates to the caller. +if /i "%__Os%" == "browser" ( + if "%EMSDK_PATH%" == "" ( + if not exist "%__repoRoot%\src\mono\browser\emsdk" ( + echo Error: Should set EMSDK_PATH environment variable pointing to emsdk root. + exit /B 1 + ) + set EMSDK_QUIET=1 && call "%__repoRoot%\src\mono\browser\emsdk\emsdk_env" + ) else ( + set EMSDK_QUIET=1 && call "%EMSDK_PATH%\emsdk_env" + ) +) + +setlocal enabledelayedexpansion + set __SourceDir=%1 set __IntermediatesDir=%2 set __VSVersion=%3 set __Arch=%4 -set __Os=%5 set __CmakeGenerator=Visual Studio -set __UseEmcmake=0 +set __ExtraCmakeParams= if /i "%__Ninja%" == "1" ( set __CmakeGenerator=Ninja ) else ( if /i NOT "%__Arch%" == "wasm" ( + if /i "%__VSVersion%" == "18.0" (set __CmakeGenerator=%__CmakeGenerator% 18 2026) if /i "%__VSVersion%" == "17.0" (set __CmakeGenerator=%__CmakeGenerator% 17 2022) if /i "%__Arch%" == "x64" (set __ExtraCmakeParams=%__ExtraCmakeParams% -A x64) @@ -38,43 +51,24 @@ if /i "%__Ninja%" == "1" ( ) if /i "%__Arch%" == "wasm" ( - if "%__Os%" == "" ( echo Error: Please add target OS parameter exit /B 1 ) if /i "%__Os%" == "browser" ( - if "%EMSDK_PATH%" == "" ( - if not exist "%__repoRoot%\src\mono\browser\emsdk" ( - echo Error: Should set EMSDK_PATH environment variable pointing to emsdk root. - exit /B 1 - ) - - set "EMSDK_PATH=%__repoRoot%\src\mono\browser\emsdk" - ) - :: replace backslash with forward slash and append last slash - set "EMSDK_PATH=!EMSDK_PATH:\=/!" - if not "!EMSDK_PATH:~-1!" == "/" set "EMSDK_PATH=!EMSDK_PATH!/" - - set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_TOOLCHAIN_FILE=!EMSDK_PATH!/emscripten/cmake/Modules/Platform/Emscripten.cmake" - set __UseEmcmake=1 + set CMakeToolPrefix=emcmake ) if /i "%__Os%" == "wasi" ( - set "__repoRoot=!__repoRoot:\=/!" - if not "!__repoRoot:~-1!" == "/" set "__repoRoot=!__repoRoot!/" if "%WASI_SDK_PATH%" == "" ( - if not exist "%__repoRoot%\src\mono\wasi\wasi-sdk" ( + if not exist "%__repoRoot%\artifacts\wasi-sdk" ( echo Error: Should set WASI_SDK_PATH environment variable pointing to WASI SDK root. exit /B 1 ) - set "WASI_SDK_PATH=%__repoRoot%\src\mono\wasi\wasi-sdk" + set "WASI_SDK_PATH=%__repoRoot%\artifacts\wasi-sdk" ) - :: replace backslash with forward slash and append last slash - set "WASI_SDK_PATH=!WASI_SDK_PATH:\=/!" - if not "!WASI_SDK_PATH:~-1!" == "/" set "WASI_SDK_PATH=!WASI_SDK_PATH!/" set __CmakeGenerator=Ninja - set __ExtraCmakeParams=%__ExtraCmakeParams% -DCLR_CMAKE_TARGET_OS=wasi -DCLR_CMAKE_TARGET_ARCH=wasm "-DWASI_SDK_PREFIX=!WASI_SDK_PATH!" "-DCMAKE_TOOLCHAIN_FILE=!WASI_SDK_PATH!/share/cmake/wasi-sdk-p2.cmake" "-DCMAKE_SYSROOT=!WASI_SDK_PATH!share/wasi-sysroot" "-DCMAKE_CROSSCOMPILING_EMULATOR=node --experimental-wasm-bigint --experimental-wasi-unstable-preview1" + set __ExtraCmakeParams=%__ExtraCmakeParams% -DCLR_CMAKE_TARGET_OS=wasi "-DCMAKE_TOOLCHAIN_FILE=!WASI_SDK_PATH!/share/cmake/wasi-sdk-p2.cmake" "-DCMAKE_CROSSCOMPILING_EMULATOR=node --experimental-wasm-bigint --experimental-wasi-unstable-preview1" ) ) else ( set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_SYSTEM_VERSION=10.0" @@ -135,12 +129,8 @@ if not "%__ConfigureOnly%" == "1" ( ) ) -if /i "%__UseEmcmake%" == "1" ( - call "!EMSDK_PATH!/emsdk_env.cmd" > nul 2>&1 && emcmake "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% -) else ( - echo "%CMakePath% %__ExtraCmakeParams% --no-warn-unused-cli -G %__CmakeGenerator% -B %__IntermediatesDir% -S %__SourceDir%" - "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% -) +echo %CMakeToolPrefix% "%CMakePath% %__ExtraCmakeParams% --no-warn-unused-cli -G %__CmakeGenerator% -B %__IntermediatesDir% -S %__SourceDir%" +%CMakeToolPrefix% "%CMakePath%" %__ExtraCmakeParams% --no-warn-unused-cli -G "%__CmakeGenerator%" -B %__IntermediatesDir% -S %__SourceDir% if "%errorlevel%" == "0" ( echo %__ExtraCmakeParams% > %__CmdLineOptionsUpToDateFile% @@ -152,6 +142,6 @@ exit /B %errorlevel% :USAGE echo "Usage..." echo "gen-buildsys.cmd " - echo "Specify the path to the top level CMake file - /src/NDP" - echo "Specify the VSVersion to be used - VS2017 or VS2019" + echo "Specify the path to the top level CMake file" + echo "Specify the VSVersion to be used, e. g. 17.0 for VS2022" EXIT /B 1 diff --git a/eng/native/gen-buildsys.sh b/eng/native/gen-buildsys.sh index d4028cb957..1d52c232b8 100755 --- a/eng/native/gen-buildsys.sh +++ b/eng/native/gen-buildsys.sh @@ -97,9 +97,26 @@ fi cmake_extra_defines_wasm=() if [[ "$host_arch" == "wasm" ]]; then if [[ "$target_os" == "browser" ]]; then + if [[ -z "$EMSDK_PATH" ]]; then + if [[ -d "$reporoot"/src/mono/browser/emsdk/ ]]; then + export EMSDK_PATH="$reporoot"/src/mono/browser/emsdk/ + else + echo "Error: You need to set the EMSDK_PATH environment variable pointing to the emscripten SDK root." + exit 1 + fi + fi + export EMSDK_QUIET=1 && source "$EMSDK_PATH"/emsdk_env.sh cmake_command="emcmake $cmake_command" elif [[ "$target_os" == "wasi" ]]; then - cmake_extra_defines_wasm=("-DCLR_CMAKE_TARGET_OS=wasi" "-DCLR_CMAKE_TARGET_ARCH=wasm" "-DWASI_SDK_PREFIX=$WASI_SDK_PATH" "-DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-p2.cmake" "-DCMAKE_SYSROOT=${WASI_SDK_PATH}/share/wasi-sysroot" "-DCMAKE_CROSSCOMPILING_EMULATOR=node --experimental-wasm-bigint --experimental-wasi-unstable-preview1") + if [[ -z "$WASI_SDK_PATH" ]]; then + if [[ -d "$reporoot"/artifacts/wasi-sdk ]]; then + export WASI_SDK_PATH="$reporoot"/artifacts/wasi-sdk + else + echo "Error: You need to set the WASI_SDK_PATH environment variable pointing to the WASI SDK root." + exit 1 + fi + fi + cmake_extra_defines_wasm=("-DCLR_CMAKE_TARGET_OS=wasi" "-DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-p2.cmake" "-DCMAKE_CROSSCOMPILING_EMULATOR=node --experimental-wasm-bigint --experimental-wasi-unstable-preview1") else echo "target_os was not specified" exit 1 diff --git a/eng/native/generateversionscript.ps1 b/eng/native/generateversionscript.ps1 new file mode 100644 index 0000000000..945ab6f706 --- /dev/null +++ b/eng/native/generateversionscript.ps1 @@ -0,0 +1,34 @@ +param ( + [string]$inputFile, + [string]$prefix +) + +# Print the header +Write-Output "V1.0 {" +Write-Output " global:" + +# Read the input file line by line +Get-Content $inputFile | ForEach-Object { + $line = $_.Trim() + + # Skip empty lines and comment lines starting with semicolon + if ($line -match '^\;.*$' -or $line -match '^[\s]*$') { + return + } + + # Remove the CR character in case the sources are mapped from + # a Windows share and contain CRLF line endings + $line = $line -replace "`r", "" + + # Only prefix the entries that start with "#" + if ($line -match '^#.*$') { + $line = $line -replace '^#', '' + Write-Output " $prefix$line;" + } else { + Write-Output " $line;" + } +} + +# Print the footer +Write-Output " local: *;" +Write-Output "};" \ No newline at end of file diff --git a/eng/native/ijw/IJW.cmake b/eng/native/ijw/IJW.cmake index 4d145a6847..2529ec596f 100644 --- a/eng/native/ijw/IJW.cmake +++ b/eng/native/ijw/IJW.cmake @@ -64,6 +64,10 @@ if (CLR_CMAKE_HOST_WIN32) remove_ijw_incompatible_options("${dirCompileOptions}" dirCompileOptions) set_directory_properties(PROPERTIES COMPILE_OPTIONS "${dirCompileOptions}") + # IJW tests needs to load DLLs from somewhere other than System32 + string(REPLACE "/DEPENDENTLOADFLAG:0x800" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + string(REPLACE "/DEPENDENTLOADFLAG:0x800" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(CLR_SDK_REF_PACK_OUTPUT "") set(CLR_SDK_REF_PACK_DISCOVERY_ERROR "") set(CLR_SDK_REF_PACK_DISCOVERY_RESULT 0) diff --git a/eng/native/naming.props b/eng/native/naming.props index b50c0c131c..7648055792 100644 --- a/eng/native/naming.props +++ b/eng/native/naming.props @@ -6,14 +6,40 @@ - + + + .dll + .lib + .pdb + + + + + lib + .dylib + .a + .dwarf + + + + + lib + .so + .a + .dbg + + + + + + .dll .lib .pdb - + lib .dylib diff --git a/eng/native/sign-with-dac-certificate.ps1 b/eng/native/sign-with-dac-certificate.ps1 new file mode 100644 index 0000000000..bb0f7bcf65 --- /dev/null +++ b/eng/native/sign-with-dac-certificate.ps1 @@ -0,0 +1,56 @@ +[CmdletBinding()] +param( + [string] + [Parameter(Mandatory)] + $esrpClient, + [Parameter(ValueFromRemainingArguments=$true)][string[]]$filesToSign +) + +[array]$signEntries = $filesToSign | ForEach-Object { + @{ + SourceLocation = $_ + } +} + +$inputFile = Get-Content -Raw $PSScriptRoot/signing/input.template.json | ConvertFrom-Json +$inputFile.SignBatches[0].SignRequestFiles = $signEntries + +$inputJson = [System.IO.Path]::GetTempFileName() +# Our JSON goes up to 6 levels deep, so we need to set the depth to 6 +# to successfully round-trip our JSON through ConvertTo-Json +$inputFile | ConvertTo-Json -Depth 6 | Out-File -FilePath $inputJson -Encoding utf8 + +$outputJson = "$PSScriptRoot/../../artifacts/log/Release/signing-$(New-Guid).json.log" + +New-Item $outputJson -ItemType File + +$outputJson = Resolve-Path $outputJson + +Write-Host "Signing files with DAC certificate" +Write-Host "Logging output to $outputJson" + +& $esrpClient sign -a $PSScriptRoot/signing/auth.json -c $PSScriptRoot/signing/config.json -i $inputJson -o $outputJson -p $PSScriptRoot/signing/policy.json + +# Validate that the files are signed correctly +foreach ($file in $filesToSign) { + $signingCert = $(Get-AuthenticodeSignature $file).SignerCertificate + if ($null -eq $signingCert) + { + throw "File $file does not contain a signature." + } + + if ($signingCert.Subject -ne "CN=.NET DAC, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" ` + -or $signingCert.Issuer -ne "CN=Microsoft Windows Code Signing PCA 2024, O=Microsoft Corporation, C=US") + { + throw "File $file not in expected trust chain." + } + + $certEKU = $signingCert.Extensions.Where({ $_.Oid.FriendlyName -eq "Enhanced Key Usage" }) | Select-Object -First 1 + + if ($certEKU.EnhancedKeyUsages.Where({ $_.Value -eq "1.3.6.1.4.1.311.84.4.1" }).Count -ne 1) + { + throw "Signature for $file does not contain expected EKU." + } + + Write-Host "$file is correctly signed." +} diff --git a/eng/native/signing/auth.json b/eng/native/signing/auth.json new file mode 100644 index 0000000000..a467bd95b5 --- /dev/null +++ b/eng/native/signing/auth.json @@ -0,0 +1,20 @@ +{ + "Version" : "1.0.0", + "AuthenticationType" : "AAD_MSI_WIF", + "TenantId" : "975f013f-7f24-47e8-a7d3-abc4752bf346", + "ClientId" : "22346933-af99-4e94-97d5-7fa1dcf4bba6", + "EsrpClientId": "22346933-af99-4e94-97d5-7fa1dcf4bba6", + "RequestSigningCert" : + { + "GetCertFromKeyVault" : true, + "KeyVaultName": "clrdiag-esrp-pme", + "KeyVaultCertName": "dac-dnceng-esrpclient-cert", + "SendX5c": false, + "WithAzureRegion": false, + "StoreLocation": null, + "StoreName": null, + "SubjectName": null + }, + "OAuthToken": null, + "FederatedTokenData": {} +} diff --git a/eng/native/signing/config.json b/eng/native/signing/config.json new file mode 100644 index 0000000000..ab1530645a --- /dev/null +++ b/eng/native/signing/config.json @@ -0,0 +1,6 @@ +{ + "Version" : "1.0.0", + "MaxDegreeOfParallelism" : 50, + "ExponentialRetryCount" : 5, + "EsrpSessionTimeoutInSec" : 1800 +} diff --git a/eng/native/signing/input.template.json b/eng/native/signing/input.template.json new file mode 100644 index 0000000000..7ee214cb62 --- /dev/null +++ b/eng/native/signing/input.template.json @@ -0,0 +1,36 @@ +{ + "Version": "1.0.0", + "UseMinimatch" : false, + "SignBatches": [ + { + "SigningInfo" : { + "Operations" : [ + { + "keyCode": "CP-471322", + "operationCode": "SigntoolSign", + "parameters": { + "OpusName": "Microsoft", + "OpusInfo": "http://www.microsoft.com", + "PageHash": "/NPH", + "FileDigest": "/fd sha256", + "TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + }, + "toolName": "sign", + "toolVersion": "1.0" + }, + { + "KeyCode": "CP-471322", + "OperationCode": "SigntoolVerify", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + }, + "SourceLocationType" : "UNC", + "DestinationLocationType": "UNC", + "SignRequestFiles" : [ + ] + } + ] +} diff --git a/eng/native/signing/policy.json b/eng/native/signing/policy.json new file mode 100644 index 0000000000..abbe16c1b9 --- /dev/null +++ b/eng/native/signing/policy.json @@ -0,0 +1,3 @@ +{ + "Version": "1.0.0" +} diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index 187037d79b..2397f8dcc8 100644 --- a/eng/native/tryrun.cmake +++ b/eng/native/tryrun.cmake @@ -2,7 +2,7 @@ set(CROSS_ROOTFS $ENV{ROOTFS_DIR}) set(TARGET_ARCH_NAME $ENV{TARGET_BUILD_ARCH}) # Also allow building as Android without specifying `-cross`. -if(NOT DEFINED TARGET_ARCH_NAME AND DEFINED ANDROID_PLATFORM) +if(NOT DEFINED TARGET_ARCH_NAME AND DEFINED ANDROID_BUILD) if(ANDROID_ABI STREQUAL "arm64-v8a") set(TARGET_ARCH_NAME "arm64") elseif(ANDROID_ABI STREQUAL "x86_64") @@ -21,33 +21,35 @@ macro(set_cache_value) set(${ARGV0}__TRYRUN_OUTPUT "dummy output" CACHE STRING "Output from TRY_RUN" FORCE) endmacro() -if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/x86_64-alpine-linux-musl OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) +if(NOT DEFINED ANDROID_BUILD) + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/x86_64-alpine-linux-musl OR + EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) - set(ALPINE_LINUX 1) -elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) - set(FREEBSD 1) - set(CMAKE_SYSTEM_NAME FreeBSD) - set(CLR_CMAKE_TARGET_OS freebsd) -elseif(EXISTS ${CROSS_ROOTFS}/usr/platform/i86pc) - set(ILLUMOS 1) - set(CLR_CMAKE_TARGET_OS sunos) -elseif(EXISTS /System/Library/CoreServices) - set(DARWIN 1) -elseif(EXISTS ${CROSS_ROOTFS}/etc/tizen-release) - set(TIZEN 1) -elseif(EXISTS ${CROSS_ROOTFS}/boot/system/develop/headers/config/HaikuConfig.h) - set(HAIKU 1) - set(CLR_CMAKE_TARGET_OS haiku) + set(ALPINE_LINUX 1) + elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) + set(FREEBSD 1) + set(CMAKE_SYSTEM_NAME FreeBSD) + set(CLR_CMAKE_TARGET_OS freebsd) + elseif(EXISTS ${CROSS_ROOTFS}/usr/platform/i86pc) + set(ILLUMOS 1) + set(CLR_CMAKE_TARGET_OS sunos) + elseif(EXISTS /System/Library/CoreServices) + set(DARWIN 1) + elseif(EXISTS ${CROSS_ROOTFS}/etc/tizen-release) + set(TIZEN 1) + elseif(EXISTS ${CROSS_ROOTFS}/boot/system/develop/headers/config/HaikuConfig.h) + set(HAIKU 1) + set(CLR_CMAKE_TARGET_OS haiku) + endif() endif() -if(DARWIN) +if(DARWIN AND NOT DEFINED ANDROID_BUILD) if(TARGET_ARCH_NAME MATCHES "^(arm64|x64)$") set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 1) set_cache_value(HAVE_BROKEN_FIFO_KEVENT_EXITCODE 1) @@ -55,11 +57,11 @@ if(DARWIN) set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 1) set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) set_cache_value(HAVE_CLOCK_REALTIME_EXITCODE 0) + set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) set_cache_value(HAVE_CLOCK_GETTIME_NSEC_NP_EXITCODE 0) set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 1) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) - set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) set_cache_value(HAVE_PROCFS_STATM_EXITCODE 1) set_cache_value(HAVE_SCHED_GETCPU_EXITCODE 1) @@ -75,11 +77,12 @@ if(DARWIN) else() message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm64 or x64 is supported for OSX cross build!") endif() -elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s390x|ppc64le|x86|x64)$" OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) +elseif(DEFINED ANDROID_BUILD OR TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s390x|ppc64le|x86|x64)$" OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) set_cache_value(HAVE_CLOCK_REALTIME_EXITCODE 0) + set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 0) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 0) @@ -92,7 +95,6 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39 set_cache_value(PTHREAD_CREATE_MODIFIES_ERRNO_EXITCODE 1) set_cache_value(REALPATH_SUPPORTS_NONEXISTENT_FILES_EXITCODE 1) set_cache_value(SEM_INIT_MODIFIES_ERRNO_EXITCODE 1) - set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 0) if(ALPINE_LINUX) set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1) @@ -105,7 +107,6 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39 set_cache_value(HAVE_CLOCK_MONOTONIC 1) set_cache_value(HAVE_CLOCK_REALTIME 1) set_cache_value(HAVE_BROKEN_FIFO_KEVENT_EXITCODE 1) - set_cache_value(HAVE_PROCFS_MAPS 0) set_cache_value(HAVE_PROCFS_STAT 0) set_cache_value(HAVE_PROCFS_STATM 0) set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0) @@ -121,8 +122,10 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39 set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) set_cache_value(HAVE_PROCFS_STATM_EXITCODE 1) + elseif(ANDROID_BUILD) + set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS 0) endif() -else() +elseif(NOT WIN32) message(FATAL_ERROR "Unsupported platform. OS: ${CMAKE_SYSTEM_NAME}, arch: ${TARGET_ARCH_NAME}") endif() diff --git a/eng/native/tryrun_ios_tvos.cmake b/eng/native/tryrun_ios_tvos.cmake index cb82c7af06..7a260f2af2 100644 --- a/eng/native/tryrun_ios_tvos.cmake +++ b/eng/native/tryrun_ios_tvos.cmake @@ -14,6 +14,7 @@ set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 1) set_cache_value(HAVE_BROKEN_FIFO_KEVENT_EXITCODE 1) set_cache_value(HAVE_BROKEN_FIFO_SELECT_EXITCODE 1) set_cache_value(HAVE_CLOCK_REALTIME_EXITCODE 0) +set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) set_cache_value(HAVE_CLOCK_GETTIME_NSEC_NP_EXITCODE 0) set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 1) diff --git a/eng/native/version/copy_version_files.ps1 b/eng/native/version/copy_version_files.ps1 new file mode 100644 index 0000000000..7573abcbb1 --- /dev/null +++ b/eng/native/version/copy_version_files.ps1 @@ -0,0 +1,27 @@ +$VersionFolder = $PSScriptRoot +$RepoRoot = (Resolve-Path "$VersionFolder/../../../").Path.TrimEnd("\") + +Get-ChildItem -Path "$VersionFolder" -Filter "_version.*" | ForEach-Object { + $path = $_.FullName + if ($_.Name -eq "_version.c") { + # For _version.c, update the commit ID if it has changed from the last build. + $commit = (git rev-parse HEAD 2>$null) + if (-not $commit) { $commit = "N/A" } + $substitute = "static char sccsid[] __attribute__((used)) = `"@(#)Version N/A @Commit: $commit`";" + $version_file_contents = Get-Content -Path $path | ForEach-Object { $_ -replace "^static.*", $substitute } + $version_file_destination = "$RepoRoot\\artifacts\\obj\\_version.c" + $current_contents = "" + $is_placeholder_file = $false + if (Test-Path -Path $version_file_destination) { + $current_contents = Get-Content -Path $version_file_destination -Raw + $is_placeholder_file = $current_contents -match "@\(#\)Version N/A @Commit:" + } else { + $is_placeholder_file = $true + } + if ($is_placeholder_file -and $version_file_contents -ne $current_contents) { + $version_file_contents | Set-Content -Path $version_file_destination + } + } elseif (-not (Test-Path -Path "$RepoRoot\\artifacts\\obj\\$($_.Name)")) { + Copy-Item -Path $path -Destination "$RepoRoot\\artifacts\\obj\\" + } +} From 8e8af8a80964e32e1f8b5cc4d0da8cbe8d80a7bd Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:31:49 +0300 Subject: [PATCH 2/8] Add cache value for HAVE_PROCFS_MAPS_EXITCODE Added cache value for HAVE_PROCFS_MAPS_EXITCODE. --- eng/native/tryrun.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index 2397f8dcc8..8d16676cc3 100644 --- a/eng/native/tryrun.cmake +++ b/eng/native/tryrun.cmake @@ -62,6 +62,7 @@ if(DARWIN AND NOT DEFINED ANDROID_BUILD) set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 1) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) + set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) set_cache_value(HAVE_PROCFS_STATM_EXITCODE 1) set_cache_value(HAVE_SCHED_GETCPU_EXITCODE 1) @@ -83,6 +84,7 @@ elseif(DEFINED ANDROID_BUILD OR TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm6 set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) set_cache_value(HAVE_CLOCK_REALTIME_EXITCODE 0) set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) + set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 0) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 0) From b1139672e1a5236df369a5f6413873b8b20ef88a Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:39:10 +0300 Subject: [PATCH 3/8] Update tryrun condition --- eng/native/tryrun.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index 8d16676cc3..ff216bb939 100644 --- a/eng/native/tryrun.cmake +++ b/eng/native/tryrun.cmake @@ -78,7 +78,7 @@ if(DARWIN AND NOT DEFINED ANDROID_BUILD) else() message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm64 or x64 is supported for OSX cross build!") endif() -elseif(DEFINED ANDROID_BUILD OR TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s390x|ppc64le|x86|x64)$" OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) +elseif(DEFINED ANDROID_BUILD OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) @@ -97,6 +97,7 @@ elseif(DEFINED ANDROID_BUILD OR TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm6 set_cache_value(PTHREAD_CREATE_MODIFIES_ERRNO_EXITCODE 1) set_cache_value(REALPATH_SUPPORTS_NONEXISTENT_FILES_EXITCODE 1) set_cache_value(SEM_INIT_MODIFIES_ERRNO_EXITCODE 1) + set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 0) if(ALPINE_LINUX) set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1) From 4fbb8d0422f28dabdd353012cf93bd80b36a7599 Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:44:56 +0300 Subject: [PATCH 4/8] More cleanups --- eng/native/tryrun.cmake | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index ff216bb939..95cb39b645 100644 --- a/eng/native/tryrun.cmake +++ b/eng/native/tryrun.cmake @@ -78,7 +78,7 @@ if(DARWIN AND NOT DEFINED ANDROID_BUILD) else() message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm64 or x64 is supported for OSX cross build!") endif() -elseif(DEFINED ANDROID_BUILD OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) +else() set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 0) set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) @@ -128,8 +128,6 @@ elseif(DEFINED ANDROID_BUILD OR FREEBSD OR ILLUMOS OR TIZEN OR HAIKU) elseif(ANDROID_BUILD) set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS 0) endif() -elseif(NOT WIN32) - message(FATAL_ERROR "Unsupported platform. OS: ${CMAKE_SYSTEM_NAME}, arch: ${TARGET_ARCH_NAME}") endif() if(TARGET_ARCH_NAME MATCHES "^(x86|x64|s390x|armv6|loongarch64|riscv64|ppc64le)$") From 0f13e25762f01767a9d6dea4acf3aa500cb6ef8e Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:52:32 +0300 Subject: [PATCH 5/8] . --- eng/native/tryrun.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index 95cb39b645..5ba517319f 100644 --- a/eng/native/tryrun.cmake +++ b/eng/native/tryrun.cmake @@ -84,7 +84,6 @@ else() set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) set_cache_value(HAVE_CLOCK_REALTIME_EXITCODE 0) set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) - set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 0) set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 0) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 0) From e07d31b9db5b2c7851602a48117544af2f94276f Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 20:11:21 +0300 Subject: [PATCH 6/8] Fix C5043 --- src/SOS/Strike/util.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SOS/Strike/util.cpp b/src/SOS/Strike/util.cpp index a4731d5cba..246555983e 100644 --- a/src/SOS/Strike/util.cpp +++ b/src/SOS/Strike/util.cpp @@ -73,14 +73,14 @@ const UINT kcMaxTieredVersions = 10; #ifndef FEATURE_PAL // ensure we always allocate on the process heap -void* __cdecl operator new(size_t size) throw() +void* __cdecl operator new(size_t size) noexcept { return HeapAlloc(GetProcessHeap(), 0, size); } -void __cdecl operator delete(void* pObj) throw() +void __cdecl operator delete(void* pObj) noexcept { HeapFree(GetProcessHeap(), 0, pObj); } -void* __cdecl operator new[](size_t size) throw() +void* __cdecl operator new[](size_t size) noexcept { return HeapAlloc(GetProcessHeap(), 0, size); } -void __cdecl operator delete[](void* pObj) throw() +void __cdecl operator delete[](void* pObj) noexcept { HeapFree(GetProcessHeap(), 0, pObj); } /**********************************************************************\ From b1d02754012436069f80e75fe7a9691e8d276b36 Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Fri, 24 Oct 2025 20:37:16 +0300 Subject: [PATCH 7/8] . --- src/SOS/Strike/util.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SOS/Strike/util.cpp b/src/SOS/Strike/util.cpp index 246555983e..5912c06028 100644 --- a/src/SOS/Strike/util.cpp +++ b/src/SOS/Strike/util.cpp @@ -73,14 +73,14 @@ const UINT kcMaxTieredVersions = 10; #ifndef FEATURE_PAL // ensure we always allocate on the process heap -void* __cdecl operator new(size_t size) noexcept +void* __cdecl operator new(size_t size, const std::nothrow_t&) noexcept { return HeapAlloc(GetProcessHeap(), 0, size); } -void __cdecl operator delete(void* pObj) noexcept +void __cdecl operator delete(void* pObj, const std::nothrow_t&) noexcept { HeapFree(GetProcessHeap(), 0, pObj); } -void* __cdecl operator new[](size_t size) noexcept +void* __cdecl operator new[](size_t size, const std::nothrow_t&) noexcept { return HeapAlloc(GetProcessHeap(), 0, size); } -void __cdecl operator delete[](void* pObj) noexcept +void __cdecl operator delete[](void* pObj, const std::nothrow_t&) noexcept { HeapFree(GetProcessHeap(), 0, pObj); } /**********************************************************************\ From 6a9d7d0b51152ce57176921f7e21e1e1177f4039 Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Sat, 25 Oct 2025 07:00:48 +0000 Subject: [PATCH 8/8] Rename PackageRID to TargetRid --- src/dbgshim/pkg/Directory.Build.props | 10 +++++----- .../pkg/Microsoft.Diagnostics.DbgShim.linux-arm.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.linux-arm64.proj | 2 +- .../Microsoft.Diagnostics.DbgShim.linux-musl-arm.proj | 2 +- ...Microsoft.Diagnostics.DbgShim.linux-musl-arm64.proj | 2 +- .../Microsoft.Diagnostics.DbgShim.linux-musl-x64.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.linux-x64.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.osx-arm64.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.osx-x64.proj | 2 +- src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.props | 6 +++--- .../pkg/Microsoft.Diagnostics.DbgShim.win-arm64.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.win-x64.proj | 2 +- .../pkg/Microsoft.Diagnostics.DbgShim.win-x86.proj | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/dbgshim/pkg/Directory.Build.props b/src/dbgshim/pkg/Directory.Build.props index 4b12ff819e..32e2665efd 100644 --- a/src/dbgshim/pkg/Directory.Build.props +++ b/src/dbgshim/pkg/Directory.Build.props @@ -5,11 +5,11 @@ true true Internal implementation package not meant for direct consumption. Please do not reference directly. - .exe - Windows_NT - Linux-musl - Linux - OSX + .exe + Windows_NT + Linux-musl + Linux + OSX diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm.proj index fb228f6235..d5e436a331 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm.proj @@ -1,6 +1,6 @@ - linux-arm + linux-arm arm diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm64.proj index d9f61eef3f..06c2224d9a 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-arm64.proj @@ -1,6 +1,6 @@ - linux-arm64 + linux-arm64 arm64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm.proj index 89a1074b9b..76c8b13898 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm.proj @@ -1,6 +1,6 @@ - linux-musl-arm + linux-musl-arm arm diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm64.proj index 17aa3f3358..f90c9450a9 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-arm64.proj @@ -1,6 +1,6 @@ - linux-musl-arm64 + linux-musl-arm64 arm64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-x64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-x64.proj index 6bae66704c..81e7fc9bca 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-x64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-musl-x64.proj @@ -1,6 +1,6 @@ - linux-musl-x64 + linux-musl-x64 x64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-x64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-x64.proj index 26e2c04e0c..645b474d8b 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-x64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.linux-x64.proj @@ -1,6 +1,6 @@ - linux-x64 + linux-x64 x64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-arm64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-arm64.proj index 0aed728885..6521fc252c 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-arm64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-arm64.proj @@ -1,6 +1,6 @@ - osx-arm64 + osx-arm64 arm64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-x64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-x64.proj index 127cc45a18..46f353b3d6 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-x64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.osx-x64.proj @@ -1,6 +1,6 @@ - osx-x64 + osx-x64 x64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.props b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.props index 9c22d95636..d1c5e77c89 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.props +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.props @@ -16,14 +16,14 @@ <_SymbolFilePath>$([MSBuild]::NormalizePath('$(NativeBinDir)', '$(LibPrefix)dbgshim$(LibSuffix)$(SymbolsSuffix)')) - <_SymbolFilePath Condition="$(PackageRID.StartsWith('win'))">$([MSBuild]::NormalizePath('$(NativeBinDir)', 'PDB', '$(LibPrefix)dbgshim$(SymbolsSuffix)')) + <_SymbolFilePath Condition="$(TargetRid.StartsWith('win'))">$([MSBuild]::NormalizePath('$(NativeBinDir)', 'PDB', '$(LibPrefix)dbgshim$(SymbolsSuffix)')) diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-arm64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-arm64.proj index ea85c3329b..3e4f2aea65 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-arm64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-arm64.proj @@ -1,6 +1,6 @@ - win-arm64 + win-arm64 arm64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x64.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x64.proj index a3a610fe05..81d25c80fe 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x64.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x64.proj @@ -1,6 +1,6 @@ - win-x64 + win-x64 x64 diff --git a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x86.proj b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x86.proj index 07cfcee8da..aee6359eb2 100644 --- a/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x86.proj +++ b/src/dbgshim/pkg/Microsoft.Diagnostics.DbgShim.win-x86.proj @@ -1,6 +1,6 @@ - win-x86 + win-x86 x86