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..2a036677fe 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,26 @@ build_native() fi if [[ "$targetOS" == maccatalyst ]]; then - cmakeArgs="-DCMAKE_SYSTEM_VARIANT=maccatalyst $cmakeArgs" + cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs" + + # Intentionally do not set CMAKE_OSX_DEPLOYMENT_TARGET for maccatalyst here: + # - CMake interprets CMAKE_OSX_DEPLOYMENT_TARGET as a macOS minimum version + # instead of MacCatalyst, causing newer clang to reject it as invalid. + # - The effective Catalyst minimum version is enforced via the + # -target *-apple-ios-macabi flag in eng/native/configurecompiler.cmake + cmakeArgs="-DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_SYSROOT=macosx -DCMAKE_SYSTEM_VARIANT=maccatalyst $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=24 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" @@ -109,7 +130,7 @@ build_native() # set default iOS simulator deployment target # keep in sync with SetOSTargetMinVersions in the root Directory.Build.props - cmakeArgs="-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=12.2 $cmakeArgs" + cmakeArgs="-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 $cmakeArgs" if [[ "$__TargetArch" == x64 ]]; then cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs" elif [[ "$__TargetArch" == arm64 ]]; then @@ -123,7 +144,7 @@ build_native() # set default iOS device deployment target # keep in sync with SetOSTargetMinVersions in the root Directory.Build.props - cmakeArgs="-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_DEPLOYMENT_TARGET=12.2 $cmakeArgs" + cmakeArgs="-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 $cmakeArgs" if [[ "$__TargetArch" == arm64 ]]; then cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs" else @@ -135,7 +156,7 @@ build_native() # set default tvOS simulator deployment target # keep in sync with SetOSTargetMinVersions in the root Directory.Build.props - cmakeArgs="-DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=12.2 $cmakeArgs" + cmakeArgs="-DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 $cmakeArgs" if [[ "$__TargetArch" == x64 ]]; then cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs" elif [[ "$__TargetArch" == arm64 ]]; then @@ -149,7 +170,7 @@ build_native() # set default tvOS device deployment target # keep in sync with SetOSTargetMinVersions in the root Directory.Build.props - cmakeArgs="-DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_DEPLOYMENT_TARGET=12.2 $cmakeArgs" + cmakeArgs="-DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 $cmakeArgs" if [[ "$__TargetArch" == arm64 ]]; then cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs" else @@ -194,24 +215,13 @@ 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" buildTool="$SCAN_BUILD_COMMAND -o $__BinDir/scan-build-log $buildTool" - echo "Executing $buildTool $target -j $__NumProc" - "$buildTool" $target -j "$__NumProc" + echo "Executing $buildTool -j $__NumProc $target" + "$buildTool" -j "$__NumProc" $target exit_code="$?" popd @@ -227,8 +237,8 @@ build_native() # multiple targets. Instead, directly invoke the build tool to build multiple targets in one invocation. pushd "$intermediatesDir" - echo "Executing $buildTool $target -j $__NumProc" - "$buildTool" $target -j "$__NumProc" + echo "Executing $buildTool -j $__NumProc $target" + "$buildTool" -j "$__NumProc" $target exit_code="$?" popd @@ -264,7 +274,7 @@ usage() echo " will use ROOTFS_DIR environment variable if set." echo "-gcc: optional argument to build using gcc in PATH." echo "-gccx.y: optional argument to build using gcc version x.y." - echo "-ninja: target ninja instead of GNU make" + echo "-ninja: target ninja instead of GNU make (default: true, use -ninja false to disable)" echo "-numproc: set the number of build processes." echo "-targetrid: optional argument that overrides the target rid name." echo "-portablebuild: pass -portablebuild=false to force a non-portable build." @@ -290,7 +300,7 @@ __TargetRid='' # Get the number of processors available to the scheduler platform="$(uname -s | tr '[:upper:]' '[:lower:]')" -if [[ "$platform" == "freebsd" ]]; then +if [[ "$platform" == "freebsd" || "$platform" == "openbsd" ]]; then __NumProc="$(($(sysctl -n hw.ncpu)+1))" elif [[ "$platform" == "netbsd" || "$platform" == "sunos" ]]; then __NumProc="$(($(getconf NPROCESSORS_ONLN)+1))" @@ -304,6 +314,9 @@ else __NumProc=1 fi +# Default to using Ninja for faster builds +__UseNinja=1 + while :; do if [[ "$#" -le 0 ]]; then break @@ -405,7 +418,17 @@ while :; do ;; ninja|-ninja) - __UseNinja=1 + if [[ -z "${2+x}" ]] || [[ "$2" == -* ]]; then + __UseNinja=1 + else + ninja_arg="$(echo "$2" | tr "[:upper:]" "[:lower:]")" + if [[ "$ninja_arg" == "false" ]]; then + __UseNinja=0 + else + __UseNinja=1 + fi + shift + fi ;; numproc|-numproc) @@ -485,7 +508,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 +567,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 d116b0d002..ee9d2b574c 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 @@ -24,6 +20,21 @@ include(CheckLinkerFlag) # "configureoptimization.cmake" must be included after CLR_CMAKE_HOST_UNIX has been set. include(${CMAKE_CURRENT_LIST_DIR}/configureoptimization.cmake) +# Validate tryrun cache version matches current Emscripten version (browser-wasm only) +if(CLR_CMAKE_TARGET_BROWSER AND DEFINED TRYRUN_BROWSER_EMSCRIPTEN_VERSION) + file(READ "${CMAKE_CURRENT_LIST_DIR}/../../src/mono/browser/emscripten-version.txt" CURRENT_EMSCRIPTEN_VERSION) + string(STRIP "${CURRENT_EMSCRIPTEN_VERSION}" CURRENT_EMSCRIPTEN_VERSION) + + if(NOT TRYRUN_BROWSER_EMSCRIPTEN_VERSION STREQUAL CURRENT_EMSCRIPTEN_VERSION) + message(WARNING + "Emscripten version mismatch detected!\n" + " Current Emscripten: ${CURRENT_EMSCRIPTEN_VERSION}\n" + " Cached features for: ${TRYRUN_BROWSER_EMSCRIPTEN_VERSION}\n" + " The CMake feature cache (eng/native/tryrun.browser.cmake) may be outdated.\n" + " Consider regenerating the cache - see instructions in eng/native/tryrun.browser.cmake") + endif() +endif() + #----------------------------------------------------- # Initialize Cmake compiler flags and other variables #----------------------------------------------------- @@ -38,6 +49,17 @@ if (CLR_CMAKE_HOST_UNIX) endif() endif() +if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + # enable $ on AppleClang as a no-op + set(CMAKE_LINK_GROUP_USING_RESCAN "" "") + set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED ON) + # Force usage of classic linker on Xcode 15 + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15 AND + CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + add_link_options(LINKER:-ld_classic) + endif() +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 +96,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) @@ -116,6 +144,10 @@ if (MSVC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /sourcelink:${CLR_SOURCELINK_FILE_PATH}") endif(EXISTS ${CLR_SOURCELINK_FILE_PATH}) + # enable $ on MSVC as a no-op + set(CMAKE_LINK_GROUP_USING_RESCAN "" "") + set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED ON) + if (CMAKE_GENERATOR MATCHES "^Visual Studio.*$") # Debug build specific flags # The Ninja generator doesn't appear to have the default `/INCREMENTAL:ON` that @@ -131,17 +163,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 @@ -300,23 +328,74 @@ if(CLR_CMAKE_HOST_LINUX) elseif(CLR_CMAKE_HOST_FREEBSD) add_compile_options($<$:-Wa,--noexecstack>) add_linker_flag("-Wl,--build-id=sha1") -elseif(CLR_CMAKE_HOST_SUNOS) +elseif(CLR_CMAKE_HOST_OPENBSD) add_compile_options($<$:-Wa,--noexecstack>) + add_linker_flag("-Wl,--build-id=sha1") + # OpenBSD's ld.so can't resolve native TLS relocs in a .so; rely on clang's default + # emulated TLS (don't pass -fno-emulated-tls). + # The PAL's hand-written asm lacks endbr64 landing pads, so disable branch-target CFI. + add_linker_flag("-Wl,-z,nobtcfi") +elseif(CLR_CMAKE_HOST_SUNOS) + # llvm's assembler crashes with noexecstack with solaris triplet; + # bug report with minimal repro at: https://github.com/llvm/llvm-project/issues/202953 + if (CMAKE_C_COMPILER_ID MATCHES "GNU") + add_compile_options($<$:-Wa,--noexecstack>) + endif() + 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) + # Haiku uses the GNU toolchain, which supports WHOLE_ARCHIVE, but only CMake 3.31.0+ recognizes this. + if(CMAKE_VERSION VERSION_LESS 3.31) + if(NOT DEFINED _CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED) + execute_process(COMMAND "${CMAKE_LINKER}" --help + OUTPUT_VARIABLE __linker_help + ERROR_VARIABLE __linker_help) + if(__linker_help MATCHES "--push-state" AND __linker_help MATCHES "--pop-state") + set(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED TRUE CACHE INTERNAL "linker supports push/pop state") + else() + set(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED FALSE CACHE INTERNAL "linker supports push/pop state") + endif() + unset(__linker_help) + endif() + if(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED) + set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:--push-state,--whole-archive" + "" + "LINKER:--pop-state") + else() + set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:--whole-archive" + "" + "LINKER:--no-whole-archive") + endif() + set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE) + set(CMAKE_LINK_LIBRARY_WHOLE_ARCHIVE_ATTRIBUTES LIBRARY_TYPE=STATIC DEDUPLICATION=YES OVERRIDE=DEFAULT) + endif() + add_compile_options($<$:-Wa,--noexecstack>) - add_linker_flag("-Wl,--no-undefined") + add_linker_flag("-Wl,--build-id=sha1") +endif() + +if((CLR_CMAKE_HOST_HAIKU OR CLR_CMAKE_HOST_SUNOS) AND CMAKE_VERSION VERSION_LESS 4.4) + # Haiku and illumos uses the GNU toolchain, which supports RESCAN, but only CMake 4.4.0+ recognizes this. + set(CMAKE_LINK_GROUP_USING_RESCAN "LINKER:--start-group" "LINKER:--end-group") + set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED TRUE) endif() #------------------------------------ @@ -433,12 +512,22 @@ if (CLR_CMAKE_HOST_UNIX) endif() elseif(CLR_CMAKE_HOST_NETBSD) message("Detected NetBSD amd64") + elseif(CLR_CMAKE_HOST_OPENBSD) + if(CLR_CMAKE_HOST_UNIX_ARM64) + message("Detected OpenBSD aarch64") + elseif(CLR_CMAKE_HOST_UNIX_AMD64) + message("Detected OpenBSD amd64") + else() + message(FATAL_ERROR "Unsupported OpenBSD architecture") + endif() elseif(CLR_CMAKE_HOST_SUNOS) message("Detected SunOS amd64") elseif(CLR_CMAKE_HOST_HAIKU) 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) @@ -509,6 +598,7 @@ elseif (CLR_CMAKE_TARGET_ARCH_WASM) set(ARCH_TARGET_NAME wasm) set(ARCH_SOURCES_DIR wasm) add_compile_definitions($<$>>:TARGET_WASM>) + add_compile_definitions($<$>>:TARGET_WASM32>) add_compile_definitions($<$>>:TARGET_32BIT>) elseif (CLR_CMAKE_TARGET_ARCH_MIPS64) set(ARCH_TARGET_NAME mips64) @@ -522,7 +612,7 @@ 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) @@ -547,19 +637,16 @@ if (CLR_CMAKE_HOST_UNIX) endif() if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) - # We cannot enable "stack-protector-strong" on OS X due to a bug in clang compiler (current version 7.0.2) - add_compile_options(-fstack-protector) - if(CLR_CMAKE_HOST_UNIX_ARM64) + if(CLR_CMAKE_HOST_ARCH_ARM64) # For OSX-Arm64, LSE instructions are enabled by default add_definitions(-DLSE_INSTRUCTIONS_ENABLED_BY_DEFAULT) add_compile_options(-mcpu=apple-m1) - endif(CLR_CMAKE_HOST_UNIX_ARM64) - elseif(NOT CLR_CMAKE_HOST_BROWSER AND NOT CLR_CMAKE_HOST_WASI) - check_c_compiler_flag(-fstack-protector-strong COMPILER_SUPPORTS_F_STACK_PROTECTOR_STRONG) - if (COMPILER_SUPPORTS_F_STACK_PROTECTOR_STRONG) - add_compile_options(-fstack-protector-strong) endif() - endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) + endif() + + if(NOT CLR_CMAKE_HOST_BROWSER AND NOT CLR_CMAKE_HOST_WASI) + add_compile_options(-fstack-protector-strong) + endif() # Suppress warnings-as-errors in release branches to reduce servicing churn if (PRERELEASE) @@ -629,6 +716,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) @@ -661,8 +751,15 @@ if (CLR_CMAKE_HOST_UNIX) # We mark the function which needs exporting with DLLEXPORT add_compile_options(-fvisibility=hidden) - # Separate functions so linker can remove them. + # Separate functions and data into their own sections so the linker can remove + # unreferenced ones. add_compile_options(-ffunction-sections) + add_compile_options(-fdata-sections) + if(LD_OSX) + add_linker_flag(-Wl,-dead_strip CHECKED RELEASE RELWITHDEBINFO) + elseif(NOT LD_SOLARIS) + add_linker_flag(-Wl,--gc-sections CHECKED RELEASE RELWITHDEBINFO) + endif() # Specify the minimum supported version of macOS # Mac Catalyst needs a special CFLAG, exclusive with mmacosx-version-min @@ -671,28 +768,42 @@ 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}) + # Keep the Catalyst version in the -target triples below in sync + # with MacCatalystVersionMin in SetOSTargetMinVersions in Directory.Build.props. 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-ios17.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-ios17.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") + set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0") if(CLR_CMAKE_HOST_ARCH_ARM64) add_compile_options(-arch arm64) elseif(CLR_CMAKE_HOST_ARCH_AMD64) @@ -702,7 +813,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>) @@ -721,15 +832,18 @@ if(CLR_CMAKE_TARGET_UNIX) add_compile_definitions($<$>>:TARGET_TVOS>) elseif(CLR_CMAKE_TARGET_FREEBSD) add_compile_definitions($<$>>:TARGET_FREEBSD>) - elseif(CLR_CMAKE_TARGET_ANDROID) - add_compile_definitions($<$>>:TARGET_ANDROID>) elseif(CLR_CMAKE_TARGET_LINUX) add_compile_definitions($<$>>:TARGET_LINUX>) if(CLR_CMAKE_TARGET_LINUX_MUSL) add_compile_definitions($<$>>:TARGET_LINUX_MUSL>) endif() + if(CLR_CMAKE_TARGET_ANDROID) + add_compile_definitions($<$>>:TARGET_ANDROID>) + endif() elseif(CLR_CMAKE_TARGET_NETBSD) add_compile_definitions($<$>>:TARGET_NETBSD>) + elseif(CLR_CMAKE_TARGET_OPENBSD) + add_compile_definitions($<$>>:TARGET_OPENBSD>) elseif(CLR_CMAKE_TARGET_SUNOS) add_compile_definitions($<$>>:TARGET_SUNOS>) if(CLR_CMAKE_TARGET_OS_ILLUMOS) @@ -747,6 +861,20 @@ else(CLR_CMAKE_TARGET_UNIX) add_compile_definitions($<$>>:TARGET_WINDOWS>) endif(CLR_CMAKE_TARGET_UNIX) +# OpenBSD only exposes its libunwind symbols through the LLVM C++ runtime +# (libc++/libc++abi), so default to those there. An explicit selection via +# CLR_CMAKE_CXX_STANDARD_LIBRARY/CLR_CMAKE_CXX_ABI_LIBRARY (applied by the cross +# toolchain file) still takes precedence. +if(CLR_CMAKE_TARGET_OPENBSD) + if(NOT CLR_CMAKE_CXX_STANDARD_LIBRARY) + add_compile_options($<$:--stdlib=libc++>) + add_link_options($<$:--stdlib=libc++>) + endif() + if(NOT CLR_CMAKE_CXX_ABI_LIBRARY) + add_link_options("LINKER:-lc++abi") + endif() +endif() + if(CLR_CMAKE_HOST_UNIX_ARM) if (NOT DEFINED CLR_ARM_FPU_TYPE) set(CLR_ARM_FPU_TYPE vfpv3) @@ -798,17 +926,15 @@ if (MSVC) set_property(GLOBAL PROPERTY MSVC_WARNING_LEVEL 4) add_compile_options($<$:/W$>) add_compile_options($<$:/WX>) # treat warnings as errors + add_compile_options($<$:/sdl>) # enable additional security checks (such as /GS) add_compile_options($<$:/Oi>) # enable intrinsics add_compile_options($<$:/Oy->) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls add_compile_options($<$:/Gm->) # disable minimal rebuild add_compile_options($<$:/Zp8>) # pack structs on 8-byte boundary add_compile_options($<$:/Gy>) # separate functions for linker - add_compile_options($<$:/GS>) # Explicitly enable the buffer security checks 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 @@ -859,28 +985,22 @@ if (MSVC) add_compile_options($<$:/we4640>) # 'instance' : construction of local static object is not thread-safe add_compile_options($<$:/we4806>) # Unsafe operation involving type 'bool'. - # SDL requires the below warnings to be treated as errors: - # More info: https://liquid.microsoft.com/Web/Object/Read/ms.security/Requirements/Microsoft.Security.SystemsADM.10086 + # Microsoft's SDL requires certain compiler warnings to be enabled as error. + # Full list: https://liquid.microsoft.com/Web/Object/Read/ms.security/Requirements/Microsoft.Security.SystemsADM.10086 # (Access to that URL restricted to Microsoft employees.) + # Some of these are implied by the /sdl switch set above (see https://learn.microsoft.com/cpp/build/reference/sdl-enable-additional-security-checks), + # so the list below is just the delta between Microsoft's own requirements and those implied by the /sdl switch. + add_compile_options($<$:/we4018>) # 'token' : signed/unsigned mismatch add_compile_options($<$:/we4055>) # 'conversion' : from data pointer 'type1' to function pointer 'type2' - add_compile_options($<$:/we4146>) # unary minus operator applied to unsigned type, result still unsigned add_compile_options($<$:/we4242>) # 'identifier' : conversion from 'type1' to 'type2', possible loss of data add_compile_options($<$:/we4244>) # 'conversion' conversion from 'type1' to 'type2', possible loss of data add_compile_options($<$:/we4267>) # 'var' : conversion from 'size_t' to 'type', possible loss of data add_compile_options($<$:/we4302>) # 'conversion' : truncation from 'type 1' to 'type 2' - add_compile_options($<$:/we4308>) # negative integral constant converted to unsigned type add_compile_options($<$:/we4509>) # nonstandard extension used: 'function' uses SEH and 'object' has destructor add_compile_options($<$:/we4510>) # 'class' : default constructor could not be generated - add_compile_options($<$:/we4532>) # 'continue' : jump out of __finally/finally block has undefined behavior during termination handling - add_compile_options($<$:/we4533>) # initialization of 'variable' is skipped by 'instruction' add_compile_options($<$:/we4610>) # object 'class' can never be instantiated - user-defined constructor required add_compile_options($<$:/we4611>) # interaction between 'function' and C++ object destruction is non-portable - add_compile_options($<$:/we4700>) # uninitialized local variable 'name' used add_compile_options($<$:/we4701>) # Potentially uninitialized local variable 'name' used - add_compile_options($<$:/we4703>) # Potentially uninitialized local pointer variable 'name' used - add_compile_options($<$:/we4789>) # destination of memory copy is too small - add_compile_options($<$:/we4995>) # 'function': name was marked as #pragma deprecated - add_compile_options($<$:/we4996>) # 'function': was declared deprecated # Set Warning Level 3: add_compile_options($<$:/w34092>) # Sizeof returns 'unsigned long'. @@ -895,7 +1015,9 @@ if (MSVC) # Set Warning Level 4: add_compile_options($<$:/w44177>) # Pragma data_seg s/b at global scope. - add_compile_options($<$:/Zi>) # enable debugging information + # enable debugging information. + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT ProgramDatabase) + add_compile_options($<$:/ZH:SHA_256>) # use SHA256 for generating hashes of compiler processed source files. add_compile_options($<$:/source-charset:utf-8>) # Force MSVC to compile source as UTF-8. @@ -989,30 +1111,20 @@ endif() # Ensure other tools are present if (CLR_CMAKE_HOST_WIN32) if(CLR_CMAKE_HOST_ARCH_ARM64) - # Explicitly specify the assembler to be used for Arm64 compile - if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") - file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}\\bin\\Hostarm64\\arm64\\armasm64.exe" CMAKE_ASM_COMPILER) - else() - file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}\\bin\\HostX64\\arm64\\armasm64.exe" CMAKE_ASM_COMPILER) + enable_language(ASM_MARMASM) + if (CMAKE_VERSION VERSION_LESS 3.29) + # CMake before 3.29 passes defines down to the Microsoft ARMASM compiler, which is not supported. + # We need to remove the defines from the command line. + set(CMAKE_ASM_MARMASM_COMPILE_OBJECT " -o ") endif() - - set(CMAKE_ASM_MASM_COMPILER ${CMAKE_ASM_COMPILER}) - message("CMAKE_ASM_MASM_COMPILER explicitly set to: ${CMAKE_ASM_MASM_COMPILER}") - - # Enable generic assembly compilation to avoid CMake generate VS proj files that explicitly - # use ml[64].exe as the assembler. - enable_language(ASM) - set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "") - set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "") - set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "") - set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "") - set(CMAKE_ASM_COMPILE_OBJECT " -g -o ") + # Add debug info options here as we can't specify separate debug info formats through the CMake abstraction + # and -g in MARMASM is technically Embedded mode (which we don't want for our C or C++ code) + add_compile_options($<$:-g>) else() enable_language(ASM_MASM) - set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "") - set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "") - set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "") - set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "") + # Add debug info options here as we can't specify separate debug info formats through the CMake abstraction + # and /Zi in MASM is technically Embedded mode (which we don't want for our C or C++ code) + add_compile_options($<$:/Zi>) endif() # Ensure that MC is present diff --git a/eng/native/configureoptimization.cmake b/eng/native/configureoptimization.cmake index f6b5da696f..f568203c72 100644 --- a/eng/native/configureoptimization.cmake +++ b/eng/native/configureoptimization.cmake @@ -1,12 +1,6 @@ if(CLR_CMAKE_HOST_WIN32) add_compile_options($<$,$>:/Od>) - if (CLR_CMAKE_HOST_ARCH_I386) - # The Windows x86 Checked CLR has some kind of problem with exception handling - # when compiled with /O2. Issue: https://github.com/dotnet/runtime/issues/59845. - add_compile_options($<$,$>:/O1>) - else() - add_compile_options($<$,$>:/O2>) - endif() + add_compile_options($<$,$>:/O2>) add_compile_options($<$,$>:/Ox>) add_compile_options($<$,$>:/O2>) elseif(CLR_CMAKE_HOST_UNIX) @@ -15,6 +9,9 @@ elseif(CLR_CMAKE_HOST_UNIX) if(CLR_CMAKE_TARGET_ANDROID) # -O2 optimization generates faster/smaller code on Android add_compile_options($<$:-O2>) + elseif (CLR_CMAKE_TARGET_BROWSER) + # -O2 prevents emscripten metadce from stripping user-requested global exports + add_link_options($<$:-O2>) else() add_compile_options($<$:-O3>) endif() diff --git a/eng/native/configurepaths.cmake b/eng/native/configurepaths.cmake index 0ffe4ebfa1..7f14513366 100644 --- a/eng/native/configurepaths.cmake +++ b/eng/native/configurepaths.cmake @@ -1,10 +1,10 @@ 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_ARTIFACTS_BIN_DIR "${CLR_REPO_ROOT_DIR}/artifacts/bin") 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..5626751cd9 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() @@ -41,7 +43,6 @@ if(CLR_CMAKE_HOST_OS STREQUAL linux) set(CLR_CMAKE_HOST_UNIX_AMD64 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv8l) set(CLR_CMAKE_HOST_UNIX_ARM 1) - set(CLR_CMAKE_HOST_UNIX_ARMV7L 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a) set(CLR_CMAKE_HOST_UNIX_ARM 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv6 OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv6l) @@ -71,21 +72,13 @@ if(CLR_CMAKE_HOST_OS STREQUAL linux) set(CLR_CMAKE_HOST_LINUX 1) # Detect Linux ID - set(LINUX_ID_FILE "/etc/os-release") - if(CMAKE_CROSSCOMPILING) - set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") - endif() - - if(EXISTS ${LINUX_ID_FILE}) - execute_process( - COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" - OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() + # In cross-building scenarios, + # cmake_host_system_information looks in the sysroot for the /etc/os-release file. + cmake_host_system_information(RESULT CLR_CMAKE_LINUX_ID QUERY DISTRIB_ID) if(DEFINED CLR_CMAKE_LINUX_ID) if(CLR_CMAKE_LINUX_ID STREQUAL tizen) - set(CLR_CMAKE_TARGET_TIZEN_LINUX 1) + set(CLR_CMAKE_HOST_TIZEN_LINUX 1) set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) elseif(CLR_CMAKE_LINUX_ID STREQUAL alpine) set(CLR_CMAKE_HOST_LINUX_MUSL 1) @@ -245,8 +238,8 @@ if(CLR_CMAKE_HOST_UNIX_ARM) set(CLR_CMAKE_HOST_ARCH_ARM 1) set(CLR_CMAKE_HOST_ARCH "arm") - if(CLR_CMAKE_HOST_UNIX_ARMV7L) - set(CLR_CMAKE_HOST_ARCH_ARMV7L 1) + if(CLR_CMAKE_HOST_TIZEN_LINUX) + set(CLR_CMAKE_HOST_ARCH "armel") endif() elseif(CLR_CMAKE_HOST_UNIX_ARMV6) set(CLR_CMAKE_HOST_ARCH_ARMV6 1) @@ -305,12 +298,6 @@ endif() # if target arch is not specified then host & target are same if(NOT DEFINED CLR_CMAKE_TARGET_ARCH OR CLR_CMAKE_TARGET_ARCH STREQUAL "" ) set(CLR_CMAKE_TARGET_ARCH ${CLR_CMAKE_HOST_ARCH}) - - # This is required for "arm" targets (CMAKE_SYSTEM_PROCESSOR "armv7l"), - # for which this flag otherwise won't be set up below - if (CLR_CMAKE_HOST_ARCH_ARMV7L) - set(CLR_CMAKE_TARGET_ARCH_ARMV7L 1) - endif() endif() # Set target architecture variables @@ -330,7 +317,6 @@ elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armv6) set(CLR_CMAKE_TARGET_ARCH_ARMV6 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel) set(CLR_CMAKE_TARGET_ARCH_ARM 1) - set(CLR_CMAKE_TARGET_ARCH_ARMV7L 1) set(ARM_SOFTFP 1) elseif(CLR_CMAKE_TARGET_ARCH STREQUAL s390x) set(CLR_CMAKE_TARGET_ARCH_S390X 1) @@ -368,10 +354,19 @@ 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) set(CLR_CMAKE_TARGET_ANDROID 1) + + if(CLR_CMAKE_TARGET_ARCH_ARM) + set(ARM_SOFTFP 1) + endif(CLR_CMAKE_TARGET_ARCH_ARM) endif(CLR_CMAKE_TARGET_OS STREQUAL android) if(CLR_CMAKE_TARGET_OS STREQUAL darwin) @@ -397,6 +392,14 @@ if(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulat set(CLR_CMAKE_TARGET_TVOS 1) endif(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulator) +# Umbrella variable for Apple mobile platforms (iOS, tvOS, MacCatalyst). +# These share the same runtime constraints: static linking, no fork(), +# no build tools, hybrid globalization, etc. Use per-platform variables +# only where they genuinely differ (compiler targets, gssapi, Swift). +if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + set(CLR_CMAKE_TARGET_APPLE_MOBILE 1) +endif() + if(CLR_CMAKE_TARGET_OS STREQUAL freebsd) set(CLR_CMAKE_TARGET_UNIX 1) set(CLR_CMAKE_TARGET_FREEBSD 1) @@ -427,10 +430,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 +474,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() @@ -487,14 +490,43 @@ if(NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) # The default linker on Solaris also does not support PIE. if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS AND NOT CLR_CMAKE_TARGET_APPLE AND NOT MSVC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") - add_compile_options($<$,EXECUTABLE>:-fPIE>) + if(CLR_CMAKE_TARGET_HAIKU) + add_compile_options($<$,EXECUTABLE>:-fPIC>) + else() + add_compile_options($<$,EXECUTABLE>:-fPIE>) + endif() add_compile_options($<$,SHARED_LIBRARY>:-fPIC>) endif() set(CMAKE_POSITION_INDEPENDENT_CODE ON) +else() + if(CLR_CMAKE_RUNTIME_CORECLR) + if(CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CROSS_COMPONENTS_BUILD) + add_link_options(-fwasm-exceptions) + add_link_options(-Wno-unused-command-line-argument) + add_link_options(-Wl,--error-limit=0) + + add_link_options(-nostdlib) + add_link_options(-lbulkmemory) + add_link_options(-lstubs) + add_link_options(-lc) + add_link_options(-lmalloc) + add_link_options(-lcompiler_rt) + add_link_options(-lc++) + add_link_options(-lc++abi) + add_link_options(-lunwind) + + add_compile_options(-fwasm-exceptions) + add_compile_options(-mbulk-memory) + add_compile_options(-msimd128) + endif() + if(CLR_CMAKE_TARGET_WASI) + add_compile_options(-fexceptions) + endif() + endif() 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,13 +536,20 @@ 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() -if (CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS OR CLR_CMAKE_HOST_ARCH_ARMV6) +if (CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_APPLE_MOBILE OR CLR_CMAKE_HOST_ARCH_ARMV6) # Some platforms are opted-out from using the in-tree zlib-ng by default: # - Android and iOS-like platforms: concerns about extra binary size # - 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_APPLE_MOBILE 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..1ffaa81e98 --- /dev/null +++ b/eng/native/entitlements.plist @@ -0,0 +1,14 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + com.apple.security.get-task-allow + + + diff --git a/eng/native/functions.cmake b/eng/native/functions.cmake index b1cb09d662..5064f51b10 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 @@ -198,7 +192,13 @@ function(find_unwind_libs UnwindLibs) find_library(UNWIND NAMES unwind) if(UNWIND STREQUAL UNWIND-NOTFOUND) - message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev or libunwind-devel.") + if(CLR_CMAKE_TARGET_OPENBSD) + # On OpenBSD the libunwind symbols are provided by the C++ ABI library + # (libc++abi), so a standalone libunwind is not expected. + set(UNWIND "") + else() + message(FATAL_ERROR "Cannot find libunwind. Try installing libunwind8-dev or libunwind-devel.") + endif() endif() set(${UnwindLibs} ${UNWIND_LIBS} ${UNWIND} PARENT_SCOPE) @@ -229,7 +229,7 @@ function(preprocess_file inputFilename outputFilename) if (MSVC) add_custom_command( OUTPUT ${outputFilename} - COMMAND ${CMAKE_CXX_COMPILER} ${PREPROCESS_INCLUDE_DIRECTORIES} /P /EP /TC ${PREPROCESS_DEFINITIONS} /Fi${outputFilename} ${inputFilename} /nologo + COMMAND "${CMAKE_CXX_COMPILER}" ${PREPROCESS_INCLUDE_DIRECTORIES} /P /EP /TC ${PREPROCESS_DEFINITIONS} /Fi${outputFilename} ${inputFilename} /nologo DEPENDS ${inputFilename} COMMENT "Preprocessing ${inputFilename}. Outputting to ${outputFilename}" ) @@ -239,7 +239,7 @@ function(preprocess_file inputFilename outputFilename) endif() add_custom_command( OUTPUT ${outputFilename} - COMMAND ${CMAKE_CXX_COMPILER} ${_LOCAL_CROSS_TARGET} -E -P ${PREPROCESS_DEFINITIONS} ${PREPROCESS_INCLUDE_DIRECTORIES} -o ${outputFilename} -x c ${inputFilename} + COMMAND "${CMAKE_CXX_COMPILER}" ${_LOCAL_CROSS_TARGET} -E -P ${PREPROCESS_DEFINITIONS} ${PREPROCESS_INCLUDE_DIRECTORIES} -o ${outputFilename} -x c ${inputFilename} DEPENDS ${inputFilename} COMMENT "Preprocessing ${inputFilename}. Outputting to ${outputFilename}" ) @@ -276,42 +276,6 @@ function(set_exports_linker_option exports_filename) endif() endfunction() -# compile_asm(TARGET target ASM_FILES file1 [file2 ...] OUTPUT_OBJECTS [variableName]) -# CMake does not support the ARM or ARM64 assemblers on Windows when using the -# MSBuild generator. When the MSBuild generator is in use, we manually compile the assembly files -# using this function. -function(compile_asm) - set(options "") - set(oneValueArgs TARGET OUTPUT_OBJECTS) - set(multiValueArgs ASM_FILES) - cmake_parse_arguments(COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}) - - get_include_directories_asm(ASM_INCLUDE_DIRECTORIES) - - set (ASSEMBLED_OBJECTS "") - - foreach(ASM_FILE ${COMPILE_ASM_ASM_FILES}) - get_filename_component(name ${ASM_FILE} NAME_WE) - # Produce object file where CMake would store .obj files for an OBJECT library. - # ex: artifacts\obj\coreclr\windows.arm64.Debug\src\vm\wks\cee_wks.dir\Debug\AsmHelpers.obj - set (OBJ_FILE "${CMAKE_CURRENT_BINARY_DIR}/${COMPILE_ASM_TARGET}.dir/${CMAKE_CFG_INTDIR}/${name}.obj") - - # Need to compile asm file using custom command as include directories are not provided to asm compiler - add_custom_command(OUTPUT ${OBJ_FILE} - COMMAND "${CMAKE_ASM_COMPILER}" -g ${ASM_INCLUDE_DIRECTORIES} -o ${OBJ_FILE} ${ASM_FILE} - DEPENDS ${ASM_FILE} - COMMENT "Assembling ${ASM_FILE} ---> \"${CMAKE_ASM_COMPILER}\" -g ${ASM_INCLUDE_DIRECTORIES} -o ${OBJ_FILE} ${ASM_FILE}") - - # mark obj as source that does not require compile - set_source_files_properties(${OBJ_FILE} PROPERTIES EXTERNAL_OBJECT TRUE) - - # Add the generated OBJ in the dependency list so that it gets consumed during linkage - list(APPEND ASSEMBLED_OBJECTS ${OBJ_FILE}) - endforeach() - - set(${COMPILE_ASM_OUTPUT_OBJECTS} ${ASSEMBLED_OBJECTS} PARENT_SCOPE) -endfunction() - # add_component(componentName [targetName] [EXCLUDE_FROM_ALL]) function(add_component componentName) if (${ARGC} GREATER 2 OR ${ARGC} EQUAL 2) @@ -319,7 +283,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 +302,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() @@ -414,7 +405,7 @@ function(strip_symbols targetName outputFilename) message(FATAL_ERROR "strip not found") endif() - set(strip_command ${STRIP} -no_code_signature_warning -S ${strip_source_file}) + set(strip_command "${STRIP}" -no_code_signature_warning -S ${strip_source_file}) if (CLR_CMAKE_TARGET_OSX) # codesign release build @@ -425,7 +416,7 @@ function(strip_symbols targetName outputFilename) endif () execute_process( - COMMAND ${DSYMUTIL} --help + COMMAND "${DSYMUTIL}" --help OUTPUT_VARIABLE DSYMUTIL_HELP_OUTPUT ) @@ -441,20 +432,32 @@ function(strip_symbols targetName outputFilename) POST_BUILD VERBATIM COMMAND sh -c "echo Stripping symbols from $(basename '${strip_source_file}') into $(basename '${strip_destination_file}')" - COMMAND ${DSYMUTIL} ${DSYMUTIL_OPTS} ${strip_source_file} + COMMAND "${DSYMUTIL}" ${DSYMUTIL_OPTS} "${strip_source_file}" 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 +492,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 +518,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 +557,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) @@ -586,7 +614,7 @@ function(disable_pax_mprotect targetName) # Disabling PAX hardening only makes sense in systems that use Elf image formats. Particularly, looking # for paxctl in macOS is problematic as it collides with popular software for that OS that performs completely # unrelated functionality. Only look for it when we'll generate Elf images. - if (CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS) + if (CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_OPENBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS) # Try to locate the paxctl tool. Failure to find it is not fatal, # but the generated executables won't work on a system where PAX is set # to prevent applications to create executable memory mappings. @@ -597,10 +625,10 @@ function(disable_pax_mprotect targetName) TARGET ${targetName} POST_BUILD VERBATIM - COMMAND ${PAXCTL} -c -m $ + COMMAND "${PAXCTL}" -c -m $ ) endif() - endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS) + endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_OPENBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS) endfunction() # add_linker_flag(Flag [Config1 Config2 ...]) @@ -637,7 +665,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 +705,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..be24e7f106 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.cmd" + ) else ( + set "EMSDK_QUIET=1" && call "%EMSDK_PATH%\emsdk_env.cmd" + ) +) + +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,26 @@ 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 + rem Use WASM-specific tryrun cache to speed up CMake configure + set __ExtraCmakeParams="-C %__repoRoot%/eng/native/tryrun.browser.cmake" !__ExtraCmakeParams! ) 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" ) ) else ( set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_SYSTEM_VERSION=10.0" @@ -82,7 +78,7 @@ if /i "%__Arch%" == "wasm" ( if /i "%__Os%" == "android" ( :: Keep in sync with $(AndroidApiLevelMin) in Directory.Build.props in the repository rooot - set __ANDROID_API_LEVEL=21 + set __ANDROID_API_LEVEL=24 if "%ANDROID_NDK_ROOT%" == "" ( echo Error: You need to set the ANDROID_NDK_ROOT environment variable pointing to the Android NDK root. exit /B 1 @@ -135,12 +131,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 +144,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..d9a2b6ccb9 100755 --- a/eng/native/gen-buildsys.sh +++ b/eng/native/gen-buildsys.sh @@ -39,7 +39,7 @@ code_coverage=OFF build_tests=OFF scan_build=OFF generator="Unix Makefiles" -__UnprocessedCMakeArgs="" +__UnprocessedCMakeArgs=() for i in "${@:6}"; do upperI="$(echo "$i" | tr "[:lower:]" "[:upper:]")" @@ -56,7 +56,7 @@ for i in "${@:6}"; do scan_build=ON ;; *) - __UnprocessedCMakeArgs="${__UnprocessedCMakeArgs}${__UnprocessedCMakeArgs:+ }$i" + __UnprocessedCMakeArgs+=("$i") esac done @@ -81,10 +81,6 @@ if [[ "$CROSSCOMPILE" == "1" ]]; then fi fi -if [[ "$host_arch" == "armel" ]]; then - cmake_extra_defines="$cmake_extra_defines -DARM_SOFTFP=1" -fi - if ! cmake_command=$(command -v cmake); then echo "CMake was not found in PATH." exit 1 @@ -97,9 +93,29 @@ 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" + # Use WASM-specific tryrun cache to speed up CMake configure + # The -C flag must be early in the command line to be effective + cmake_extra_defines="-C $scriptroot/tryrun.browser.cmake $cmake_extra_defines" 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") else echo "target_os was not specified" exit 1 @@ -112,7 +128,7 @@ $cmake_command \ "-DCMAKE_BUILD_TYPE=$buildtype" \ "-DCMAKE_INSTALL_PREFIX=$__CMakeBinDir" \ $cmake_extra_defines \ - $__UnprocessedCMakeArgs \ + "${__UnprocessedCMakeArgs[@]}" \ "${cmake_extra_defines_wasm[@]}" \ -S "$1" \ -B "$2" 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..26a1bb3e43 --- /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..1a06160a6a --- /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..9be38a1817 --- /dev/null +++ b/eng/native/signing/input.template.json @@ -0,0 +1,35 @@ +{ + "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..c42053f4a3 --- /dev/null +++ b/eng/native/signing/policy.json @@ -0,0 +1,3 @@ +{ + "Version": "1.0.0" +} diff --git a/eng/native/tryrun.browser.cmake b/eng/native/tryrun.browser.cmake new file mode 100644 index 0000000000..ed8ac60a55 --- /dev/null +++ b/eng/native/tryrun.browser.cmake @@ -0,0 +1,384 @@ +# CMake pre-configured cache for WebAssembly (browser-wasm) cross-compilation +# +# This file caches the results of CMake feature detection checks and TRY_RUN tests +# to significantly speed up the CMake configure phase for WebAssembly builds. +# +# IMPORTANT: This file is specific to the Emscripten version and WebAssembly target. +# +# Valid for: +# - Emscripten version: 3.1.56 +# - Target: wasm32-unknown-emscripten (browser-wasm) +# - Architecture: wasm32 +# - OS: browser/Emscripten +# +# PERFORMANCE IMPACT: +# - Reduces CMake configure checks from 103 to 14 (86% reduction) +# - Configure phase: ~2-3 minutes → ~10-20 seconds +# - Eliminates: TRY_RUN tests, header checks, function checks, compiler tests +# - Accelerates both main CoreCLR build and sub-projects (zlib-ng, zstd) +# +# HOW TO USE: +# Automatically applied when building for browser-wasm. No special flags needed: +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# +# OVERRIDES: +# We don't want to use all emulators which are available in Emscripten. +# - HAVE_SYS_SOCKET_H +# +# VERSION TRACKING: +# The TRYRUN_BROWSER_EMSCRIPTEN_VERSION variable at the top of this file tracks +# which Emscripten version this cache was generated for. The build system +# validates this against src/mono/browser/emscripten-version.txt and warns +# if there's a mismatch. +# +# WHEN TO REGENERATE: +# This file should be regenerated when: +# - Emscripten version changes (see src/mono/browser/emscripten-version.txt) +# - New CMake feature checks are added to the CoreCLR build system +# - WebAssembly platform capabilities change significantly +# +# HOW TO REGENERATE: +# 1. Temporarily disable this cache file: +# mv eng/native/tryrun.browser.cmake eng/native/tryrun.browser.cmake.bak +# +# 2. Clean and run a fresh configure: +# git clean -xdf artifacts/obj/coreclr/browser.wasm.Debug +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# (Let it run until CMake configure completes, can stop after that) +# +# 3. Extract all feature check results: +# grep -E "^(HAVE_|HAS_|ONE_|PTHREAD_|REALPATH_|SEM_|COMPILER_)" \ +# artifacts/obj/coreclr/browser.wasm.Debug/CMakeCache.txt | sort +# +# 4. Generate new cache entries (example script): +# while IFS= read -r line; do +# var=$(echo "$line" | cut -d: -f1) +# rest=$(echo "$line" | cut -d: -f2-) +# type=$(echo "$rest" | cut -d= -f1) +# value=$(echo "$rest" | cut -d= -f2-) +# [ -z "$value" ] && value='""' +# cache_type="INTERNAL" +# [ "$type" = "BOOL" ] && cache_type="BOOL" +# if [[ "$var" == *"_EXITCODE" ]]; then +# echo "set_cache_value($var $value)" +# else +# echo "set($var $value CACHE $cache_type \"\")" +# fi +# done < <(grep -E "^(HAVE_|HAS_|...)" CMakeCache.txt) +# +# 5. Update this file with: +# - New TRYRUN_BROWSER_EMSCRIPTEN_VERSION at the top of the file +# - New Emscripten version in header comment (line 9) +# - New cache entries (replacing old ones) +# - Verify no duplicate entries +# +# 6. Also update sub-project caches in: +# - src/native/external/zlib-ng.cmake (CLR_CMAKE_TARGET_BROWSER section) +# - src/native/external/zstd.cmake (CLR_CMAKE_TARGET_BROWSER section) +# +# 7. Test the regenerated cache: +# git clean -xdf artifacts/obj/coreclr/browser.wasm.Debug +# ./build.sh -subset clr.runtime -os browser -arch wasm -c Debug +# (Verify it loads and check count is minimal) +# +# 8. Restore if needed: +# mv eng/native/tryrun.browser.cmake.bak eng/native/tryrun.browser.cmake + +# Version tracking: This cache is valid for the following Emscripten version +set(TRYRUN_BROWSER_EMSCRIPTEN_VERSION "3.1.56" CACHE INTERNAL "Emscripten version this cache was generated for") + +# Macro to set cache values (same as eng/native/tryrun.cmake) +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() + +# NOTE: This file is only used for WebAssembly/Emscripten builds. +# No conditional check needed - the file is explicitly loaded via -C flag +# only for browser-wasm builds in eng/native/gen-buildsys.sh + +# ============================================================================ +# TRY_RUN Exit Codes +# ============================================================================ + +set(COMPILER_SUPPORTS_F_ALIGNED_NEW 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_IMPLICIT_FALLTHROUGH 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_PRE_C11_COMPAT 1 CACHE INTERNAL "") +set(COMPILER_SUPPORTS_W_RESERVED_IDENTIFIER 1 CACHE INTERNAL "") +set(HAS_PTHREAD_MUTEXES 1 CACHE INTERNAL "") +set(HAS_SYSV_SEMAPHORES "" CACHE INTERNAL "") +set(HAVE___GREGSET_T "" CACHE INTERNAL "") +set(HAVE__LWP_SELF "" CACHE INTERNAL "") +set(HAVE__SC_AVPHYS_PAGES 1 CACHE INTERNAL "") +set(HAVE__SC_PHYS_PAGES 1 CACHE INTERNAL "") +set(HAVE_ACCEPT4 1 CACHE INTERNAL "") +set(HAVE_ALIGNED_ALLOC FALSE CACHE BOOL "") +set(HAVE_ARC4RANDOM_BUF "" CACHE INTERNAL "") +set(HAVE_ARM_ACLE_H "" CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_ALIGNED 1 CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_VISIBILITY_HIDDEN 1 CACHE INTERNAL "") +set(HAVE_ATTRIBUTE_VISIBILITY_INTERNAL 1 CACHE INTERNAL "") +set(HAVE_AUXV_HWCAP_H "" CACHE INTERNAL "") +set(HAVE_BCRYPT_H "" CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_KEVENT_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_KEVENT "" CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_SELECT_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_BROKEN_FIFO_SELECT "" CACHE INTERNAL "") +set(HAVE_BSD_REGS_T FALSE CACHE INTERNAL "") +set(HAVE_BUILTIN_ASSUME_ALIGNED 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_CTZ 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_CTZLL 1 CACHE INTERNAL "") +set(HAVE_BUILTIN_MUL_OVERFLOW 1 CACHE INTERNAL "") +set(HAVE_CFMAKERAW 1 CACHE INTERNAL "") +set(HAVE_CFSETSPEED 1 CACHE INTERNAL "") +set(HAVE_CHMOD 1 CACHE INTERNAL "") +set(HAVE_CLOCK_GETTIME_NSEC_NP "" CACHE INTERNAL "") +set(HAVE_CLOCK_MONOTONIC_COARSE 1 CACHE INTERNAL "") +set(HAVE_CLOCK_THREAD_CPUTIME_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_CLOCK_THREAD_CPUTIME_EXITCODE 255) +set(HAVE_CLOCK_THREAD_CPUTIME "" CACHE INTERNAL "") +set(HAVE_CONNECTX "" CACHE INTERNAL "") +set(HAVE_CPUSET_T "" CACHE INTERNAL "") +set(HAVE_CRT_EXTERNS_H "" CACHE INTERNAL "") +set(HAVE_DIRECTIO "" CACHE INTERNAL "") +set(HAVE_DIRENT_D_TYPE 1 CACHE INTERNAL "") +set(HAVE_DIRENT_NAME_LEN "" CACHE INTERNAL "") +set(HAVE_DISCONNECTX "" CACHE INTERNAL "") +set(HAVE_DLFCN_H 1 CACHE INTERNAL "") +set(HAVE_EPOLL "" CACHE INTERNAL "") +set(HAVE_ERRNO_H 1 CACHE INTERNAL "") +set(HAVE_ETHTOOL_H "" CACHE INTERNAL "") +set(HAVE_F_DUPFD_CLOEXEC 1 CACHE INTERNAL "") +set(HAVE_F_DUPFD 1 CACHE INTERNAL "") +set(HAVE_F_FULLFSYNC "" CACHE INTERNAL "") +set(HAVE_FALLOCATE "" CACHE INTERNAL "") +set(HAVE_FCHMOD 1 CACHE INTERNAL "") +set(HAVE_FCOPYFILE "" CACHE INTERNAL "") +set(HAVE_FLOCK64 "" CACHE INTERNAL "") +set(HAVE_FORK 1 CACHE INTERNAL "") +set(HAVE_FPREGS_WITH_CW "" CACHE INTERNAL "") +set(HAVE_FPSTATE_GLIBC_RESERVED1 "" CACHE INTERNAL "") +set(HAVE_FSEEKO 1 CACHE INTERNAL "") +set(HAVE_FSYNC 1 CACHE INTERNAL "") +set(HAVE_FTRUNCATE64 "" CACHE INTERNAL "") +set(HAVE_FUTIMENS 1 CACHE INTERNAL "") +set(HAVE_FUTIMES "" CACHE INTERNAL "") +set(HAVE_GET_PROC_INFO_IN_RANGE "" CACHE INTERNAL "") +set(HAVE_GETAUXVAL "" CACHE INTERNAL "") +set(HAVE_GETDOMAINNAME_SIZET 1 CACHE INTERNAL "") +set(HAVE_GETDOMAINNAME 1 CACHE INTERNAL "") +set(HAVE_GETGRGID_R 1 CACHE INTERNAL "") +set(HAVE_GETGROUPLIST "" CACHE INTERNAL "") +set(HAVE_GETHOSTNAME 1 CACHE INTERNAL "") +set(HAVE_GETIFADDRS 1 CACHE INTERNAL "") +set(HAVE_GETNAMEINFO_SIGNED_FLAGS 1 CACHE INTERNAL "") +set(HAVE_GETNAMEINFO 1 CACHE INTERNAL "") +set(HAVE_GETPEEREID "" CACHE INTERNAL "") +set(HAVE_GETRLIMIT 1 CACHE INTERNAL "") +set(HAVE_GMTIME_R 1 CACHE INTERNAL "") +set(HAVE_GNU_LIBNAMES_H "" CACHE INTERNAL "") +set(HAVE_GNU_STRERROR_R "" CACHE INTERNAL "") +set(HAVE_GREGSET_T 1 CACHE INTERNAL "") +set(HAVE_GSS_SPNEGO_MECHANISM "" CACHE INTERNAL "") +set(HAVE_GSSFW_HEADERS "" CACHE INTERNAL "") +set(HAVE_HAVE_IF_MSGHDR2 FALSE CACHE INTERNAL "") +set(HAVE_HAVE_RT_MSGHDR FALSE CACHE INTERNAL "") +set(HAVE_HAVE_RT_MSGHDR2 FALSE CACHE INTERNAL "") +set(HAVE_HWPROBE_H "" CACHE INTERNAL "") +set(HAVE_IF_MSGHDR2 "" CACHE INTERNAL "") +set(HAVE_IN_EXCL_UNLINK "" CACHE INTERNAL "") +set(HAVE_IN_PKTINFO 1 CACHE INTERNAL "") +set(HAVE_INFTIM "" CACHE INTERNAL "") +set(HAVE_INOTIFY_ADD_WATCH "" CACHE INTERNAL "") +set(HAVE_INOTIFY_INIT "" CACHE INTERNAL "") +set(HAVE_INOTIFY_RM_WATCH "" CACHE INTERNAL "") +set(HAVE_IOCTL_WITH_INT_REQUEST 1 CACHE INTERNAL "") +set(HAVE_IOCTL 1 CACHE INTERNAL "") +set(HAVE_IOSS_H "" CACHE INTERNAL "") +set(HAVE_IP_MREQN 1 CACHE INTERNAL "") +set(HAVE_IP_MULTICAST_IFINDEX "" CACHE INTERNAL "") +set(HAVE_KQUEUE "" CACHE INTERNAL "") +set(HAVE_LCHFLAGS "" CACHE INTERNAL "") +set(HAVE_LIBPTHREAD 1 CACHE INTERNAL "") +set(HAVE_LINUX_AUXVEC_H "" CACHE INTERNAL "") +set(HAVE_LINUX_CAN_H "" CACHE INTERNAL "") +set(HAVE_LINUX_ERRQUEUE_H "" CACHE INTERNAL "") +set(HAVE_LINUX_IN_H "" CACHE INTERNAL "") +set(HAVE_LINUX_RTNETLINK_H "" CACHE INTERNAL "") +set(HAVE_LINUX_USER_EVENTS_H "" CACHE INTERNAL "") +set(HAVE_LSEEK64 "" CACHE INTERNAL "") +set(HAVE_LTTNG_TRACEPOINT_H "" CACHE INTERNAL "") +set(HAVE_LUTIMES "" CACHE INTERNAL "") +set(HAVE_LWP_H "" CACHE INTERNAL "") +set(HAVE_MACH_EXCEPTIONS "" CACHE INTERNAL "") +set(HAVE_MACH_THREADS "" CACHE INTERNAL "") +set(HAVE_MACH_VM_PARAM_H "" CACHE INTERNAL "") +set(HAVE_MACH_VM_TYPES_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_NPX_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_REG_H "" CACHE INTERNAL "") +set(HAVE_MACHINE_VMPARAM_H "" CACHE INTERNAL "") +set(HAVE_MAKEDEV_FILEH "" CACHE INTERNAL "") +set(HAVE_MAKEDEV_SYSMACROSH 1 CACHE INTERNAL "") +set(HAVE_MALLOC_SIZE "" CACHE INTERNAL "") +set(HAVE_MALLOC_USABLE_SIZE_NP "" CACHE INTERNAL "") +set(HAVE_MALLOC_USABLE_SIZE 1 CACHE INTERNAL "") +set(HAVE_MAP_HUGETLB 1 CACHE INTERNAL "") +set(HAVE_MKSTEMP 1 CACHE INTERNAL "") +set(HAVE_MKSTEMPS 1 CACHE INTERNAL "") +set(HAVE_MMAP64 "" CACHE INTERNAL "") +set(HAVE_MNTENT_H 1 CACHE INTERNAL "") +set(HAVE_MNTINFO "" CACHE INTERNAL "") +set(HAVE_NET_IF_ARP_H 1 CACHE INTERNAL "") +set(HAVE_NET_IF_H 1 CACHE INTERNAL "") +set(HAVE_NET_IFMEDIA_H "" CACHE INTERNAL "") +set(HAVE_NETINET_ICMP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_IP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_TCP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETINET_UDP_VAR_H "" CACHE INTERNAL "") +set(HAVE_NETPACKET_PACKET_H 1 CACHE INTERNAL "") +set(HAVE_NO_INTERPOSITION 1 CACHE INTERNAL "") +set(HAVE_NON_LEGACY_STATFS 1 CACHE INTERNAL "") +set(HAVE_O_CLOEXEC 1 CACHE INTERNAL "") +set(HAVE_OFF64_T TRUE CACHE INTERNAL "") +set(HAVE_PIPE 1 CACHE INTERNAL "") +set(HAVE_PIPE2 1 CACHE INTERNAL "") +set(HAVE_POLL 1 CACHE INTERNAL "") +set(HAVE_POSIX_ADVISE 1 CACHE INTERNAL "") +set(HAVE_POSIX_FADVISE64 "" CACHE INTERNAL "") +set(HAVE_POSIX_MADVISE 1 CACHE INTERNAL "") +set(HAVE_POSIX_MEMALIGN 1 CACHE INTERNAL "") +set(HAVE_PR_SET_PTRACER "" CACHE INTERNAL "") +set(HAVE_PRCTL_H "" CACHE INTERNAL "") +set(HAVE_PREADV 1 CACHE INTERNAL "") +set(HAVE_PROCFS_CTL_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) +set(HAVE_PROCFS_CTL "" CACHE INTERNAL "") +set(HAVE_PROCFS_H "" CACHE INTERNAL "") +set(HAVE_PROCFS_STAT_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) +set(HAVE_PROCFS_STAT "" CACHE INTERNAL "") +set(HAVE_PROCFS_STATM_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_PROCFS_STATM_EXITCODE 1) +set(HAVE_PROCFS_STATM "" CACHE INTERNAL "") +set(HAVE_PRWATCH_T FALSE CACHE INTERNAL "") +set(HAVE_PT_REGS FALSE CACHE INTERNAL "") +set(HAVE_PTHREAD_ATTR_GET_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_CONDATTR_SETCLOCK 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETAFFINITY_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_GETATTR_NP 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETCPUCLOCKID 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_GETTHREADID_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_H 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_IN_LIBC 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_MUTEX_CLOCKLOCK "" CACHE INTERNAL "") +set(HAVE_PTHREAD_NP_H "" CACHE INTERNAL "") +set(HAVE_PTHREAD_RWLOCK_T TRUE CACHE INTERNAL "") +set(HAVE_PTHREAD_SETAFFINITY_NP "" CACHE INTERNAL "") +set(HAVE_PTHREAD_SETCANCELSTATE 1 CACHE INTERNAL "") +set(HAVE_PTHREAD_THREADID_NP "" CACHE INTERNAL "") +set(HAVE_PTRDIFF_T 1 CACHE INTERNAL "") +set(HAVE_PUBLIC_XSTATE_STRUCT "" CACHE INTERNAL "") +set(HAVE_PWRITEV 1 CACHE INTERNAL "") +set(HAVE_RESOURCE_H 1 CACHE INTERNAL "") +set(HAVE_RT_MSGHDR "" CACHE INTERNAL "") +set(HAVE_RT_MSGHDR2 "" CACHE INTERNAL "") +set(HAVE_RUNETYPE_H "" CACHE INTERNAL "") +set(HAVE_SCHED_GET_PRIORITY_COMPILED FALSE CACHE INTERNAL "") +set(HAVE_SCHED_GET_PRIORITY "" CACHE INTERNAL "") +set(HAVE_SCHED_GETAFFINITY "" CACHE INTERNAL "") +set(HAVE_SCHED_GETCPU "" CACHE INTERNAL "") +set(HAVE_SCHED_SETAFFINITY "" CACHE INTERNAL "") +set(HAVE_SEMAPHORE_H 1 CACHE INTERNAL "") +set(HAVE_SENDFILE_4 "" CACHE INTERNAL "") +set(HAVE_SENDFILE_6 "" CACHE INTERNAL "") +set(HAVE_SENDFILE_7 "" CACHE INTERNAL "") +set(HAVE_SETRLIMIT 1 CACHE INTERNAL "") +set(HAVE_SIGALTSTACK 1 CACHE INTERNAL "") +set(HAVE_SIZEOF_OFF_T TRUE CACHE INTERNAL "") +set(HAVE_SOCKADDR_UN_SUN_PATH 1 CACHE INTERNAL "") +set(HAVE_STAT_BIRTHTIME "" CACHE INTERNAL "") +set(HAVE_STAT_FLAGS "" CACHE INTERNAL "") +set(HAVE_STAT_NSEC "" CACHE INTERNAL "") +set(HAVE_STAT_TIM 1 CACHE INTERNAL "") +set(HAVE_STAT_TIMESPEC "" CACHE INTERNAL "") +set(HAVE_STAT64 "" CACHE INTERNAL "") +set(HAVE_STATFS_FSTYPENAME "" CACHE INTERNAL "") +set(HAVE_STATFS_MOUNT "" CACHE INTERNAL "") +set(HAVE_STATFS_SIZE TRUE CACHE INTERNAL "") +set(HAVE_STATFS_VFS 1 CACHE INTERNAL "") +set(HAVE_STATFS 1 CACHE INTERNAL "") +set(HAVE_STATVFS_BASETYPE "" CACHE INTERNAL "") +set(HAVE_STATVFS_FSTYPENAME "" CACHE INTERNAL "") +set(HAVE_STATVFS 1 CACHE INTERNAL "") +set(HAVE_STDDEF_H 1 CACHE INTERNAL "") +set(HAVE_STDINT_H 1 CACHE INTERNAL "") +set(HAVE_STRCPY_S "" CACHE INTERNAL "") +set(HAVE_STRERROR 1 CACHE INTERNAL "") +set(HAVE_STRLCAT 1 CACHE INTERNAL "") +set(HAVE_SWAPCTL "" CACHE INTERNAL "") +set(HAVE_SYS_AUXV_H "" CACHE INTERNAL "") +set(HAVE_SYS_CDEFS_H "" CACHE INTERNAL "") +set(HAVE_SYS_FILIO_H "" CACHE INTERNAL "") +set(HAVE_SYS_INOTIFY_H "" CACHE INTERNAL "") +set(HAVE_SYS_IOCTL_H 1 CACHE INTERNAL "") +set(HAVE_SYS_LWP_H "" CACHE INTERNAL "") +set(HAVE_SYS_MEMBARRIER_H 1 CACHE INTERNAL "") +set(HAVE_SYS_MMAN_H 1 CACHE INTERNAL "") +set(HAVE_SYS_MNTENT_H "" CACHE INTERNAL "") +set(HAVE_SYS_MOUNT_H 1 CACHE INTERNAL "") +set(HAVE_SYS_POLL_H "" CACHE INTERNAL "") +set(HAVE_SYS_PROCINFO_H "" CACHE INTERNAL "") +set(HAVE_SYS_PTRACE_H "" CACHE INTERNAL "") +set(HAVE_SYS_SDT_H "" CACHE INTERNAL "") +set(HAVE_SYS_SOCKET_H "" CACHE INTERNAL "") +set(HAVE_SYS_SOCKIO_H "" CACHE INTERNAL "") +set(HAVE_SYS_STATFS_H 1 CACHE INTERNAL "") +set(HAVE_SYS_STATVFS_H 1 CACHE INTERNAL "") +set(HAVE_SYS_SYSCTL_H "" CACHE INTERNAL "") +set(HAVE_SYS_TIME_H 1 CACHE INTERNAL "") +set(HAVE_SYS_TYPES_H 1 CACHE INTERNAL "") +set(HAVE_SYS_UCONTEXT_H 1 CACHE INTERNAL "") +set(HAVE_SYS_UIO_H 1 CACHE INTERNAL "") +set(HAVE_SYS_VMPARAM_H "" CACHE INTERNAL "") +set(HAVE_SYSCONF 1 CACHE INTERNAL "") +set(HAVE_SYSCTL "" CACHE INTERNAL "") +set(HAVE_SYSCTLBYNAME "" CACHE INTERNAL "") +set(HAVE_SYSINFO_WITH_MEM_UNIT 1 CACHE INTERNAL "") +set(HAVE_SYSINFO "" CACHE INTERNAL "") +set(HAVE_SYSLOG_H 1 CACHE INTERNAL "") +set(HAVE_TCP_FSM_H "" CACHE INTERNAL "") +set(HAVE_TCP_H_TCP_KEEPALIVE "" CACHE INTERNAL "") +set(HAVE_TCP_H_TCPSTATE_ENUM 1 CACHE INTERNAL "") +set(HAVE_TERMIOS_H 1 CACHE INTERNAL "") +set(HAVE_TERMIOS2 "" CACHE INTERNAL "") +set(HAVE_THREAD_SELF "" CACHE INTERNAL "") +set(HAVE_TIOCGWINSZ 1 CACHE INTERNAL "") +set(HAVE_TTRACE "" CACHE INTERNAL "") +set(HAVE_UCONTEXT_H 1 CACHE INTERNAL "") +set(HAVE_UCONTEXT_T TRUE CACHE INTERNAL "") +set(HAVE_UNISTD_H 1 CACHE INTERNAL "") +set(HAVE_UNW_AARCH64_X19 1 CACHE INTERNAL "") +set(HAVE_UNW_GET_ACCESSORS "" CACHE INTERNAL "") +set(HAVE_UNW_GET_SAVE_LOC "" CACHE INTERNAL "") +set(HAVE_UTIMENSAT 1 CACHE INTERNAL "") +set(HAVE_UTSNAME_DOMAINNAME "" CACHE INTERNAL "") +set(HAVE_VFORK 1 CACHE INTERNAL "") +set(HAVE_VM_ALLOCATE "" CACHE INTERNAL "") +set(HAVE_VM_FLAGS_SUPERPAGE_SIZE_ANY "" CACHE INTERNAL "") +set(HAVE_VM_READ "" CACHE INTERNAL "") +set(HAVE_WORKING_CLOCK_GETTIME_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_WORKING_CLOCK_GETTIME_EXITCODE 0) +set(HAVE_WORKING_CLOCK_GETTIME 1 CACHE INTERNAL "") +set(HAVE_WORKING_GETTIMEOFDAY_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(HAVE_WORKING_GETTIMEOFDAY_EXITCODE 0) +set(HAVE_WORKING_GETTIMEOFDAY 1 CACHE INTERNAL "") +set(HAVE_XSW_USAGE "" CACHE INTERNAL "") +set(HAVE_XSWDEV "" CACHE INTERNAL "") +set(HAVE_YIELD_SYSCALL "" CACHE INTERNAL "") +set(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_EXITCODE 1) +set(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS "" CACHE INTERNAL "") +set(PTHREAD_RWLOCK_T 32 CACHE INTERNAL "") +set(REALPATH_SUPPORTS_NONEXISTENT_FILES_COMPILED TRUE CACHE INTERNAL "") +set_cache_value(REALPATH_SUPPORTS_NONEXISTENT_FILES_EXITCODE 1) +set(REALPATH_SUPPORTS_NONEXISTENT_FILES "" CACHE INTERNAL "") diff --git a/eng/native/tryrun.cmake b/eng/native/tryrun.cmake index 187037d79b..71b98ad306 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,45 +21,50 @@ 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) +file(GLOB OPENBSD_PROBE "${CROSS_ROOTFS}/etc/signify/openbsd-*.pub") - 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) +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(OPENBSD_PROBE) + set(OPENBSD 1) + set(CMAKE_SYSTEM_NAME OpenBSD) + set(CLR_CMAKE_TARGET_OS openbsd) + 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) set_cache_value(HAVE_BROKEN_FIFO_SELECT_EXITCODE 1) 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) @@ -68,18 +73,15 @@ if(DARWIN) set_cache_value(HAVE_WORKING_GETTIMEOFDAY_EXITCODE 0) set_cache_value(MMAP_ANON_IGNORES_PROTECTION_EXITCODE 1) set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_EXITCODE 1) - 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_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1) 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) - set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0) +else() 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) @@ -89,11 +91,7 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39 set_cache_value(HAVE_WORKING_CLOCK_GETTIME_EXITCODE 0) set_cache_value(HAVE_WORKING_GETTIMEOFDAY_EXITCODE 0) set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_EXITCODE 1) - 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) else() @@ -102,30 +100,26 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39 if (FREEBSD) set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP 1) - 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) + elseif(OPENBSD) + set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP 1) + set_cache_value(HAVE_CLOCK_REALTIME 1) + set_cache_value(HAVE_BROKEN_FIFO_KEVENT_EXITCODE 1) + set_cache_value(HAVE_PROCFS_STAT 0) + set_cache_value(HAVE_PROCFS_STATM 0) elseif(ILLUMOS) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 0) set_cache_value(COMPILER_SUPPORTS_W_CLASS_MEMACCESS 1) set_cache_value(HAVE_SET_MAX_VARIABLE 1) - set_cache_value(HAVE_FULLY_FEATURED_PTHREAD_MUTEXES 1) - set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0) elseif (TIZEN) - set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0) elseif(HAIKU) 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() - 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)$") - set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0) endif() diff --git a/eng/native/tryrun_ios_tvos.cmake b/eng/native/tryrun_ios_tvos.cmake index cb82c7af06..fa8af40203 100644 --- a/eng/native/tryrun_ios_tvos.cmake +++ b/eng/native/tryrun_ios_tvos.cmake @@ -5,17 +5,15 @@ endmacro() set_cache_value(HAVE_SCHED_GETCPU_EXITCODE 1) set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 1) -set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0) # TODO: these are taken from macOS, check these whether they're correct for iOS # some of them are probably not used by what we use from NativeAOT so could be reduced -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) set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1) set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1) @@ -25,7 +23,5 @@ set_cache_value(HAVE_WORKING_CLOCK_GETTIME_EXITCODE 0) set_cache_value(HAVE_WORKING_GETTIMEOFDAY_EXITCODE 0) set_cache_value(MMAP_ANON_IGNORES_PROTECTION_EXITCODE 1) set_cache_value(ONE_SHARED_MAPPING_PER_FILEREGION_PER_PROCESS_EXITCODE 1) -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_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1) diff --git a/eng/native/version/_version.c b/eng/native/version/_version.c index 4fa64bb1a2..48db7a434a 100644 --- a/eng/native/version/_version.c +++ b/eng/native/version/_version.c @@ -1,11 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#if defined(__GNUC__) && !defined(__clang__) && defined(TARGET_SUNOS) -#define RETAIN __attribute__((used)) +#if defined(__GNUC__) && !defined(__clang__) && defined(TARGET_SUNOS) && defined(TARGET_AMD64) +char sccsid[] __attribute__((used, weak)) = "@(#)No version information produced"; __asm__(".pushsection .init_array; .reloc ., R_X86_64_NONE, sccsid; .popsection"); #else -#define RETAIN __attribute__((used, retain)) +static char sccsid[] __attribute__((used, retain)) = "@(#)No version information produced"; #endif - -static char sccsid[] RETAIN = "@(#)No version information produced"; diff --git a/eng/native/version/copy_version_files.ps1 b/eng/native/version/copy_version_files.ps1 new file mode 100644 index 0000000000..e0af8170b0 --- /dev/null +++ b/eng/native/version/copy_version_files.ps1 @@ -0,0 +1,29 @@ +$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" } + $weak_substitute = "char sccsid[] __attribute__((used, weak)) = `"@(#)Version N/A @Commit: $commit`";" + $retain_substitute = "static char sccsid[] __attribute__((used, retain)) = `"@(#)Version N/A @Commit: $commit`";" + $version_file_contents = Get-Content -Path $path | ForEach-Object { $_ -replace "^char sccsid\[\].*", $weak_substitute -replace "^static char sccsid\[\].*", $retain_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 + $is_placeholder_file = $current_contents -match "@\(#\)Version N/A @Commit:" + } else { + $is_placeholder_file = $true + } + # Only overwrite if the file is a placeholder (or missing) and the content has changed (non empty comparison -> true). + if ($is_placeholder_file -and (Compare-Object $version_file_contents $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\\" + } +} diff --git a/eng/native/version/copy_version_files.sh b/eng/native/version/copy_version_files.sh index 4acf86a995..5cfdf10f3c 100755 --- a/eng/native/version/copy_version_files.sh +++ b/eng/native/version/copy_version_files.sh @@ -11,8 +11,9 @@ for path in "${__VersionFolder}/"*{.h,.c}; do # update commit commit="$(git rev-parse HEAD 2>/dev/null)" commit="${commit:-N/A}" - substitute="$(printf 'static char sccsid[] RETAIN = "@(#)Version N/A @Commit: %s";\n' "$commit")" - version_file_contents="$(cat "$path" | sed "s|^static.*|$substitute|")" + weak_substitute="$(printf 'char sccsid[] __attribute__((used, weak)) = "@(#)Version N/A @Commit: %s";\n' "$commit")" + retain_substitute="$(printf 'static char sccsid[] __attribute__((used, retain)) = "@(#)Version N/A @Commit: %s";\n' "$commit")" + version_file_contents="$(cat "$path" | sed -e "s|^char sccsid\[\].*|$weak_substitute|" -e "s|^static char sccsid\[\].*|$retain_substitute|")" version_file_destination="$__RepoRoot/artifacts/obj/_version.c" current_contents= is_placeholder_file= 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