Sync eng/native from dotnet/runtime (#4178)
authorAdeel Mujahid <3840695+am11@users.noreply.github.com>
Thu, 24 Aug 2023 19:32:29 +0000 (22:32 +0300)
committerGitHub <noreply@github.com>
Thu, 24 Aug 2023 19:32:29 +0000 (12:32 -0700)
* Sync eng/native with runtime
* Includes changes from https://github.com/dotnet/runtime/pull/90952
* Since diagnostics is using newest arcade, reacted to
https://github.com/dotnet/arcade/pull/13961 in second commit

29 files changed:
diagnostics.yml
eng/build.sh
eng/native/build-commons.sh
eng/native/configurecompiler.cmake
eng/native/configureplatform.cmake
eng/native/configuretools.cmake
eng/native/functions.cmake
eng/native/gen-buildsys.cmd
eng/native/gen-buildsys.sh
eng/native/genmoduleindex.sh
eng/native/ijw/IJW.cmake
eng/native/ijw/SetIJWProperties.props [new file with mode: 0644]
eng/native/ijw/getRefPackFolderFromArtifacts.ps1
eng/native/init-distro-rid.sh [deleted file]
eng/native/init-os-and-arch.sh
eng/native/init-vs-env.cmd
eng/native/sanitizer-ignorelist.txt [new file with mode: 0644]
eng/native/sanitizerblacklist.txt [deleted file]
eng/native/tryrun.cmake
eng/native/tryrun_ios_tvos.cmake [new file with mode: 0644]
eng/native/version/copy_version_files.cmd
eng/pipelines/build.yml
src/Microsoft.Diagnostics.TestHelpers/TestConfiguration.cs
src/SOS/SOS.UnitTests/ConfigFiles/Unix/Debugger.Tests.Config.txt
src/shared/pal/src/config.h.in
src/shared/pal/src/configure.cmake
src/tests/DbgShim.UnitTests/ConfigFiles/Unix/Debugger.Tests.Config.txt
src/tests/Microsoft.Diagnostics.DebugServices.UnitTests/ConfigFiles/Unix/Debugger.Tests.Config.txt
src/tests/Microsoft.Diagnostics.DebugServices.UnitTests/RunTests.cs

index bd0e5e5a6d0cafca1fd4288358b675b0ac36001b..a1ea54344996a69e93ecc8a059fe048f5a6fc109 100644 (file)
@@ -134,12 +134,12 @@ extends:
                 Build_Release:
                   _BuildConfig: Release
                   _BuildArch: x64
-                  _PublishArtifacts: bin/Linux.x64.Release
+                  _PublishArtifacts: bin/linux.x64.Release
                 ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
                   Build_Debug:
                     _BuildConfig: Debug
                     _BuildArch: x64
-                    _PublishArtifacts: bin/Linux.x64.Debug
+                    _PublishArtifacts: bin/linux.x64.Debug
 
         - template: /eng/pipelines/build.yml
           parameters:
@@ -153,14 +153,14 @@ extends:
                 Build_Release:
                   _BuildConfig: Release
                   _BuildArch: x64
-                  _PublishArtifacts: bin/Linux.x64.Release
-                  _ArtifactsTargetPath: bin/Linux-musl.x64.Release
+                  _PublishArtifacts: bin/linux.x64.Release
+                  _ArtifactsTargetPath: bin/linux-musl.x64.Release
                 ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
                   Build_Debug:
                     _BuildConfig: Debug
                     _BuildArch: x64
-                    _PublishArtifacts: bin/Linux.x64.Debug
-                    _ArtifactsTargetPath: bin/Linux-musl.x64.Debug
+                    _PublishArtifacts: bin/linux.x64.Debug
+                    _ArtifactsTargetPath: bin/linux-musl.x64.Debug
 
         - template: /eng/pipelines/build.yml
           parameters:
@@ -171,7 +171,7 @@ extends:
                 Build_Release:
                   _BuildConfig: Release
                   _BuildArch: x64
-                  _PublishArtifacts: bin/OSX.x64.Release
+                  _PublishArtifacts: bin/osx.x64.Release
                 ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
                   Build_Debug:
                     _BuildConfig: Debug
@@ -188,7 +188,7 @@ extends:
                 Build_Release:
                   _BuildConfig: Release
                   _BuildArch: arm64
-                  _PublishArtifacts: bin/OSX.arm64.Release
+                  _PublishArtifacts: bin/osx.arm64.Release
                 ${{ if in(variables['Build.Reason'], 'PullRequest') }}:
                   Build_Debug:
                     _BuildConfig: Debug
@@ -207,7 +207,7 @@ extends:
                   Build_Release:
                     _BuildConfig: Release
                     _BuildArch: arm
-                    _PublishArtifacts: bin/Linux.arm.Release
+                    _PublishArtifacts: bin/linux.arm.Release
 
           - template: /eng/pipelines/build.yml
             parameters:
@@ -221,7 +221,7 @@ extends:
                   Build_Release:
                     _BuildConfig: Release
                     _BuildArch: arm64
-                    _PublishArtifacts: bin/Linux.arm64.Release
+                    _PublishArtifacts: bin/linux.arm64.Release
 
           - template: /eng/pipelines/build.yml
             parameters:
@@ -236,8 +236,8 @@ extends:
                   Build_Release:
                     _BuildConfig: Release
                     _BuildArch: arm
-                    _PublishArtifacts: bin/Linux.arm.Release
-                    _ArtifactsTargetPath: bin/Linux-musl.arm.Release
+                    _PublishArtifacts: bin/linux.arm.Release
+                    _ArtifactsTargetPath: bin/linux-musl.arm.Release
 
           - template: /eng/pipelines/build.yml
             parameters:
@@ -252,8 +252,8 @@ extends:
                   Build_Release:
                     _BuildConfig: Release
                     _BuildArch: arm64
-                    _PublishArtifacts: bin/Linux.arm64.Release
-                    _ArtifactsTargetPath: bin/Linux-musl.arm64.Release
+                    _PublishArtifacts: bin/linux.arm64.Release
+                    _ArtifactsTargetPath: bin/linux-musl.arm64.Release
 
         ############################
         #                          #
index ae11013d07d50d3d3c029d1f4f76b41803bde256..db449d4ac0d4d14f677e5ff6f411a08f1afe49e1 100755 (executable)
@@ -5,7 +5,6 @@
 # Obtain the location of the bash script to figure out where the root of the repo is.
 __RepoRootDir="$(cd "$(dirname "$0")"/..; pwd -P)"
 
-__BuildArch=x64
 __BuildType=Debug
 __CMakeArgs=
 __CommonMSBuildArgs=
@@ -16,8 +15,6 @@ __CrossBuild=0
 __DotnetRuntimeDownloadVersion="default"
 __DotnetRuntimeVersion="default"
 __ExtraCmakeArgs=
-__HostArch=x64
-__HostOS=Linux
 __IsMSBuildOnNETCoreSupported=0
 __ManagedBuild=1
 __ManagedBuildArgs=
@@ -30,7 +27,6 @@ __RuntimeSourceFeed=
 __RuntimeSourceFeedKey=
 __SkipConfigure=0
 __SkipGenerateVersion=0
-__TargetOS=Linux
 __Test=0
 __UnprocessedBuildArgs=
 
@@ -44,7 +40,7 @@ handle_arguments() {
     lowerI="$(echo "${1/--/-}" | tr "[:upper:]" "[:lower:]")"
     case "$lowerI" in
         architecture|-architecture|-a)
-            __BuildArch="$(echo "$2" | tr "[:upper:]" "[:lower:]")"
+            __TargetArch="$(echo "$2" | tr "[:upper:]" "[:lower:]")"
             __ShiftArgs=1
             ;;
 
@@ -113,7 +109,7 @@ handle_arguments() {
 source "$__RepoRootDir"/eng/native/build-commons.sh
 
 __LogsDir="$__RootBinDir/log/$__BuildType"
-__ConfigTriplet="$__TargetOS.$__BuildArch.$__BuildType"
+__ConfigTriplet="$__TargetOS.$__TargetArch.$__BuildType"
 __BinDir="$__RootBinDir/bin/$__ConfigTriplet"
 __ArtifactsIntermediatesDir="$__RootBinDir/obj"
 __IntermediatesDir="$__ArtifactsIntermediatesDir/$__ConfigTriplet"
@@ -134,7 +130,7 @@ __ExtraCmakeArgs="$__CMakeArgs $__ExtraCmakeArgs -DCLR_MANAGED_BINARY_DIR=$__Roo
 export __CMakeBinDir="$__BinDir"
 
 
-if [[ "$__BuildArch" == "armel" ]]; then
+if [[ "$__TargetArch" == "armel" ]]; then
     # Armel cross build is Tizen specific and does not support Portable RID build
     __PortableBuild=0
 fi
@@ -163,7 +159,7 @@ if [[ "$__ManagedBuild" == 1 ]]; then
         /p:GenerateVersionSourceFile=true \
         /p:NativeVersionSourceFile="$__ArtifactsIntermediatesDir/_version.c" \
         /p:Configuration="$__BuildType" \
-        /p:Platform="$__BuildArch" \
+        /p:Platform="$__TargetArch" \
         $__UnprocessedBuildArgs
 
     if [ $? != 0 ]; then
@@ -172,19 +168,11 @@ if [[ "$__ManagedBuild" == 1 ]]; then
     fi
 fi
 
-#
-# Initialize the target distro name
-#
-
-initTargetDistroRid
-
-echo "RID: $__DistroRid"
-
 #
 # Setup LLDB paths for native build
 #
 
-if [ "$__HostOS" == "OSX" ]; then
+if [ "$__HostOS" == "osx" ]; then
     export LLDB_H="$__RepoRootDir"/src/SOS/lldbplugin/swift-4.0
     export LLDB_LIB=$(xcode-select -p)/../SharedFrameworks/LLDB.framework/LLDB
     export LLDB_PATH=$(xcode-select -p)/usr/bin/lldb
@@ -201,12 +189,12 @@ if [ "$__HostOS" == "OSX" ]; then
     which python
     python --version
 
-    if [[ "$__BuildArch" == x64 ]]; then
+    if [[ "$__TargetArch" == x64 ]]; then
         __ExtraCmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $__ExtraCmakeArgs"
-    elif [[ "$__BuildArch" == arm64 ]]; then
+    elif [[ "$__TargetArch" == arm64 ]]; then
         __ExtraCmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $__ExtraCmakeArgs"
     else
-        echo "Error: Unknown OSX architecture $__BuildArch."
+        echo "Error: Unknown OSX architecture $__TargetArch."
         exit 1
     fi
 fi
@@ -215,7 +203,7 @@ fi
 # Build native components
 #
 if [[ "$__NativeBuild" == 1 ]]; then
-    build_native "$__TargetOS" "$__BuildArch" "$__RepoRootDir" "$__IntermediatesDir" "install" "$__ExtraCmakeArgs" "diagnostic component" | tee "$__LogsDir"/make.log
+    build_native "$__TargetOS" "$__TargetArch" "$__RepoRootDir" "$__IntermediatesDir" "install" "$__ExtraCmakeArgs" "diagnostic component" | tee "$__LogsDir"/make.log
 
     if [ "$?" != 0 ]; then
         echo "Native build FAILED"
@@ -229,8 +217,8 @@ fi
 
 if [[ "$__NativeBuild" == 1 || "$__Test" == 1 ]]; then
     __targetRid=net6.0
-    __dotnet_sos=$__RootBinDir/bin/dotnet-sos/$__BuildType/$__targetRid/publish/$__DistroRid
-    __dotnet_dump=$__RootBinDir/bin/dotnet-dump/$__BuildType/$__targetRid/publish/$__DistroRid
+    __dotnet_sos=$__RootBinDir/bin/dotnet-sos/$__BuildType/$__targetRid/publish/$__OutputRid
+    __dotnet_dump=$__RootBinDir/bin/dotnet-dump/$__BuildType/$__targetRid/publish/$__OutputRid
 
     mkdir -p "$__dotnet_sos"
     mkdir -p "$__dotnet_dump"
@@ -290,7 +278,7 @@ if [[ "$__Test" == 1 ]]; then
         --test \
         --configuration "$__BuildType" \
         /bl:"$__LogsDir"/Test.binlog \
-        /p:BuildArch="$__BuildArch" \
+        /p:BuildArch="$__TargetArch" \
         /p:PrivateBuildPath="$__PrivateBuildPath" \
         /p:DotnetRuntimeVersion="$__DotnetRuntimeVersion" \
         /p:DotnetRuntimeDownloadVersion="$__DotnetRuntimeDownloadVersion" \
index c9160b1e4b59a13f037a5e5907ed3a841dbbae35..ba561ed6e79bfe78be4719ef40d431f7c455a0ca 100755 (executable)
@@ -2,16 +2,16 @@
 
 initTargetDistroRid()
 {
-    source "$__RepoRootDir/eng/native/init-distro-rid.sh"
+    source "$__RepoRootDir/eng/common/native/init-distro-rid.sh"
 
     local passedRootfsDir=""
 
     # Only pass ROOTFS_DIR if cross is specified and the target platform is not Darwin that doesn't use rootfs
-    if [[ "$__CrossBuild" == 1 && "$platform" != "Darwin" ]]; then
+    if [[ "$__CrossBuild" == 1 && "$platform" != "darwin" ]]; then
         passedRootfsDir="$ROOTFS_DIR"
     fi
 
-    initDistroRidGlobal "$__TargetOS" "$__TargetArch" "$__PortableBuild" "$passedRootfsDir"
+    initDistroRidGlobal "$__TargetOS" "$__TargetArch" "$passedRootfsDir"
 }
 
 setup_dirs()
@@ -28,7 +28,7 @@ check_prereqs()
 {
     echo "Checking prerequisites..."
 
-    if [[ "$__HostOS" == "OSX" ]]; then
+    if [[ "$__HostOS" == "osx" ]]; then
         # Check presence of pkg-config on the path
         command -v pkg-config 2>/dev/null || { echo >&2 "Please install pkg-config before running this script, see https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/macos-requirements.md"; exit 1; }
 
@@ -63,7 +63,7 @@ build_native()
     # All set to commence the build
     echo "Commencing build of \"$target\" target in \"$message\" for $__TargetOS.$__TargetArch.$__BuildType in $intermediatesDir"
 
-    if [[ "$targetOS" == OSX || "$targetOS" == MacCatalyst ]]; then
+    if [[ "$targetOS" == osx || "$targetOS" == maccatalyst ]]; then
         if [[ "$hostArch" == x64 ]]; then
             cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs"
         elif [[ "$hostArch" == arm64 ]]; then
@@ -74,17 +74,19 @@ build_native()
         fi
     fi
 
-    if [[ "$targetOS" == MacCatalyst ]]; then
-        cmakeArgs="-DCMAKE_SYSTEM_VARIANT=MacCatalyst $cmakeArgs"
+    if [[ "$targetOS" == maccatalyst ]]; then
+        cmakeArgs="-DCMAKE_SYSTEM_VARIANT=maccatalyst $cmakeArgs"
     fi
 
-    if [[ ( "$targetOS" == Android || "$targetOS" == linux-bionic ) && -z "$ROOTFS_DIR" ]]; then
+    if [[ "$targetOS" == android || "$targetOS" == linux-bionic ]]; then
         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
 
-        # keep ANDROID_PLATFORM in sync with src/mono/Directory.Build.props
+        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"
 
         # Don't try to set CC/CXX in init-compiler.sh - it's handled in android.toolchain.cmake already
@@ -102,6 +104,58 @@ build_native()
             echo "Error: Unknown Android architecture $hostArch."
             exit 1
         fi
+    elif [[ "$targetOS" == iossimulator ]]; then
+        cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs"
+
+        # 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=11.0 $cmakeArgs"
+        if [[ "$__TargetArch" == x64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs"
+        elif [[ "$__TargetArch" == arm64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs"
+        else
+            echo "Error: Unknown iOS Simulator architecture $__TargetArch."
+            exit 1
+        fi
+    elif [[ "$targetOS" == ios ]]; then
+        cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs"
+
+        # 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=11.0 $cmakeArgs"
+        if [[ "$__TargetArch" == arm64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs"
+        else
+            echo "Error: Unknown iOS architecture $__TargetArch."
+            exit 1
+        fi
+    elif [[ "$targetOS" == tvossimulator ]]; then
+        cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs"
+
+        # 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=11.0 $cmakeArgs"
+        if [[ "$__TargetArch" == x64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" $cmakeArgs"
+        elif [[ "$__TargetArch" == arm64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs"
+        else
+            echo "Error: Unknown tvOS Simulator architecture $__TargetArch."
+            exit 1
+        fi
+    elif [[ "$targetOS" == tvos ]]; then
+        cmakeArgs="-C $__RepoRootDir/eng/native/tryrun_ios_tvos.cmake $cmakeArgs"
+
+        # 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=11.0 $cmakeArgs"
+        if [[ "$__TargetArch" == arm64 ]]; then
+            cmakeArgs="-DCMAKE_OSX_ARCHITECTURES=\"arm64\" $cmakeArgs"
+        else
+            echo "Error: Unknown tvOS architecture $__TargetArch."
+            exit 1
+        fi
     fi
 
     if [[ "$__UseNinja" == 1 ]]; then
@@ -163,7 +217,7 @@ build_native()
         popd
     else
         cmake_command=cmake
-        if [[ "$build_arch" == "wasm" && "$__TargetOS" == "Browser" ]]; then
+        if [[ "$build_arch" == "wasm" && "$__TargetOS" == "browser" ]]; then
             cmake_command="emcmake cmake"
             echo "Executing $cmake_command --build \"$intermediatesDir\" --target $target -- -j $__NumProc"
             $cmake_command --build "$intermediatesDir" --target $target -- -j "$__NumProc"
@@ -216,6 +270,7 @@ usage()
     echo "-portablebuild: pass -portablebuild=false to force a non-portable build."
     echo "-skipconfigure: skip build configuration."
     echo "-keepnativesymbols: keep native/unmanaged debug symbols."
+    echo "-fsanitize: Enable native sanitizers"
     echo "-verbose: optional argument to enable verbose build output."
     echo ""
     echo "Additional Options:"
@@ -231,17 +286,15 @@ source "$__RepoRootDir/eng/native/init-os-and-arch.sh"
 
 __TargetArch=$arch
 __TargetOS=$os
-__HostOS=$os
-__BuildOS=$os
 __OutputRid=''
 
 # Get the number of processors available to the scheduler
-platform="$(uname)"
-if [[ "$platform" == "FreeBSD" ]]; then
+platform="$(uname -s | tr '[:upper:]' '[:lower:]')"
+if [[ "$platform" == "freebsd" ]]; then
   __NumProc="$(($(sysctl -n hw.ncpu)+1))"
-elif [[ "$platform" == "NetBSD" || "$platform" == "SunOS" ]]; then
+elif [[ "$platform" == "netbsd" || "$platform" == "sunos" ]]; then
   __NumProc="$(($(getconf NPROCESSORS_ONLN)+1))"
-elif [[ "$platform" == "Darwin" ]]; then
+elif [[ "$platform" == "darwin" ]]; then
   __NumProc="$(($(getconf _NPROCESSORS_ONLN)+1))"
 elif command -v nproc > /dev/null 2>&1; then
   __NumProc="$(nproc)"
@@ -340,6 +393,17 @@ while :; do
             __CMakeArgs="$__CMakeArgs -DCLR_CMAKE_KEEP_NATIVE_SYMBOLS=true"
             ;;
 
+        -fsanitize)
+            __CMakeArgs="$__CMakeArgs -DCLR_CMAKE_ENABLE_SANITIZERS=$2"
+            EnableNativeSanitizers=$2
+            shift
+            ;;
+        -fsanitize=*)
+            sanitizers="${lowerI/#-fsanitize=/}" # -fsanitize=address => address
+            __CMakeArgs="$__CMakeArgs -DCLR_CMAKE_ENABLE_SANITIZERS=$sanitizers"
+            EnableNativeSanitizers=$sanitizers
+            ;;
+
         ninja|-ninja)
             __UseNinja=1
             ;;
@@ -410,7 +474,7 @@ while :; do
 
         os|-os)
             if [[ -n "$2" ]]; then
-                __TargetOS="$2"
+                __TargetOS=$(echo "$2" | tr '[:upper:]' '[:lower:]')
                 shift
             else
                 echo "ERROR: 'os' requires a non-empty option argument"
@@ -421,6 +485,7 @@ while :; do
         hostarch|-hostarch)
             if [[ -n "$2" ]]; then
                 __HostArch="$2"
+                __ExplicitHostArch=1
                 shift
             else
                 echo "ERROR: 'hostarch' requires a non-empty option argument"
@@ -428,6 +493,16 @@ while :; do
             fi
             ;;
 
+        hostos|-hostos)
+            if [[ -n "$2" ]]; then
+                __HostOS="$2"
+                shift
+            else
+                echo "ERROR: 'hostos' requires a non-empty option argument"
+                exit 1
+            fi
+            ;;
+
         *)
             handle_arguments "$1" "$2"
             if [[ "$__ShiftArgs" == 1 ]]; then
@@ -444,6 +519,10 @@ if [[ -z "$__HostArch" ]]; then
     __HostArch=$__TargetArch
 fi
 
+if [[ -z "$__HostOS" ]]; then
+    __HostOS=$__TargetOS
+fi
+
 __CommonMSBuildArgs="/p:TargetArchitecture=$__TargetArch /p:Configuration=$__BuildType /p:TargetOS=$__TargetOS /nodeReuse:false $__OfficialBuildIdArg $__SignTypeArg $__SkipRestoreArg"
 
 # Configure environment if we are doing a verbose build
@@ -460,13 +539,13 @@ fi
 if [[ "$__TargetArch" == wasm ]]; then
     # nothing to do here
     true
-elif [[ "$__TargetOS" == iOS || "$__TargetOS" == iOSSimulator ]]; then
+elif [[ "$__TargetOS" == ios || "$__TargetOS" == iossimulator ]]; then
     # nothing to do here
     true
-elif [[ "$__TargetOS" == tvOS || "$__TargetOS" == tvOSSimulator ]]; then
+elif [[ "$__TargetOS" == tvos || "$__TargetOS" == tvossimulator ]]; then
     # nothing to do here
     true
-elif [[ "$__TargetOS" == Android ]]; then
+elif [[ "$__TargetOS" == android ]]; then
     # nothing to do here
     true
 else
@@ -478,15 +557,23 @@ if [[ "$__CrossBuild" == 1 ]]; then
     CROSSCOMPILE=1
     export CROSSCOMPILE
     # Darwin that doesn't use rootfs
-    if [[ -z "$ROOTFS_DIR" && "$platform" != "Darwin" ]]; then
+    if [[ -z "$ROOTFS_DIR" && "$platform" != "darwin" ]]; then
         ROOTFS_DIR="$__RepoRootDir/.tools/rootfs/$__TargetArch"
         export ROOTFS_DIR
     fi
 fi
 
-# init the target distro name
+# init the target distro name (__DistroRid) and target portable os (__PortableTargetOS).
 initTargetDistroRid
-
 if [ -z "$__OutputRid" ]; then
-    __OutputRid="$(echo $__DistroRid | tr '[:upper:]' '[:lower:]')"
+    if [[ "$__PortableBuild" == 0 ]]; then
+        __OutputRid="$__DistroRid"
+    else
+        __OutputRid="$__PortableTargetOS-$__TargetArch"
+    fi
 fi
+export __OutputRid
+echo "__OutputRid: ${__OutputRid}"
+
+# When the host runs on an unknown rid, it falls back to the output rid
+__HostFallbackOS="${__OutputRid%-*}" # Strip architecture
index d9443ce6ddfc46d4747958c3a672c92a78f050a7..0be4937c7f8d467a5ebdf487c924105163d4de33 100644 (file)
@@ -1,3 +1,7 @@
+# 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
@@ -19,12 +23,13 @@ include(${CMAKE_CURRENT_LIST_DIR}/configureoptimization.cmake)
 #-----------------------------------------------------
 
 if (CLR_CMAKE_HOST_UNIX)
-    add_compile_options(-g)
     add_compile_options(-Wall)
     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
         add_compile_options(-Wno-null-conversion)
+        add_compile_options(-glldb)
     else()
         add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Werror=conversion-null>)
+        add_compile_options(-g)
     endif()
 endif()
 
@@ -69,20 +74,39 @@ if (MSVC)
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS")
 
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
+  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUGTYPE:CV,FIXUP")
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221")
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}")
 
   set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221")
 
   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUGTYPE:CV,FIXUP")
   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /PDBCOMPRESS")
-  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864")
+  # For sanitized builds, we bump up the stack size to 8MB to match behavior on Unix platforms.
+  # Sanitized builds can use significantly more stack space than non-sanitized builds due to instrumentation.
+  # We don't want to change the default stack size for all builds, as that will likely cause confusion and will
+  # increase memory usage.
+  if (CLR_CMAKE_ENABLE_SANITIZERS)
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:0x800000")
+  else()
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:0x180000")
+  endif()
 
   if(EXISTS ${CLR_SOURCELINK_FILE_PATH})
     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /sourcelink:${CLR_SOURCELINK_FILE_PATH}")
     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /sourcelink:${CLR_SOURCELINK_FILE_PATH}")
   endif(EXISTS ${CLR_SOURCELINK_FILE_PATH})
 
+  if (CMAKE_GENERATOR MATCHES "^Visual Studio.*$")
+    # Debug build specific flags
+    # The Ninja generator doesn't appear to have the default `/INCREMENTAL:ON` that
+    # the Visual Studio generator has. Therefore we will override the default for Visual Studio only.
+    add_linker_flag(/INCREMENTAL:NO DEBUG)
+    add_linker_flag(/OPT:REF DEBUG)
+    add_linker_flag(/OPT:NOICF DEBUG)
+  endif (CMAKE_GENERATOR MATCHES "^Visual Studio.*$")
+
   # Checked build specific flags
   add_linker_flag(/INCREMENTAL:NO CHECKED) # prevent "warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:REF' specification"
   add_linker_flag(/OPT:REF CHECKED)
@@ -101,10 +125,6 @@ if (MSVC)
   add_linker_flag(/OPT:ICF RELWITHDEBINFO)
   set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
 
-  # Force uCRT to be dynamically linked for Release build
-  add_linker_flag(/NODEFAULTLIB:libucrt.lib RELEASE)
-  add_linker_flag(/DEFAULTLIB:ucrt.lib RELEASE)
-
 elseif (CLR_CMAKE_HOST_UNIX)
   # Set the values to display when interactively configuring CMAKE_BUILD_TYPE
   set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "DEBUG;CHECKED;RELEASE;RELWITHDEBINFO")
@@ -112,63 +132,7 @@ elseif (CLR_CMAKE_HOST_UNIX)
   # Use uppercase CMAKE_BUILD_TYPE for the string comparisons below
   string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_CMAKE_BUILD_TYPE)
 
-  set(CLR_SANITIZE_CXX_OPTIONS "")
-  set(CLR_SANITIZE_LINK_OPTIONS "")
-
-  # set the CLANG sanitizer flags for debug build
-  if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
-    # obtain settings from running enablesanitizers.sh
-    string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS)
-    string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_POS)
-    if ((${__ASAN_POS} GREATER -1) OR (${__UBSAN_POS} GREATER -1))
-      list(APPEND CLR_SANITIZE_CXX_OPTIONS -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/sanitizerblacklist.txt)
-      set (CLR_CXX_SANITIZERS "")
-      set (CLR_LINK_SANITIZERS "")
-      if (${__ASAN_POS} GREATER -1)
-        list(APPEND CLR_CXX_SANITIZERS address)
-        list(APPEND CLR_LINK_SANITIZERS address)
-        set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS}address,")
-        set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}address,")
-        add_definitions(-DHAS_ASAN)
-        message("Address Sanitizer (asan) enabled")
-      endif ()
-      if (${__UBSAN_POS} GREATER -1)
-        # all sanitizer flags are enabled except alignment (due to heavy use of __unaligned modifier)
-        list(APPEND CLR_CXX_SANITIZERS
-          "bool"
-          bounds
-          enum
-          float-cast-overflow
-          float-divide-by-zero
-          "function"
-          integer
-          nonnull-attribute
-          null
-          object-size
-          "return"
-          returns-nonnull-attribute
-          shift
-          unreachable
-          vla-bound
-          vptr)
-        list(APPEND CLR_LINK_SANITIZERS
-          undefined)
-        message("Undefined Behavior Sanitizer (ubsan) enabled")
-      endif ()
-      list(JOIN CLR_CXX_SANITIZERS "," CLR_CXX_SANITIZERS_OPTIONS)
-      list(APPEND CLR_SANITIZE_CXX_OPTIONS "-fsanitize=${CLR_CXX_SANITIZERS_OPTIONS}")
-      list(JOIN CLR_LINK_SANITIZERS "," CLR_LINK_SANITIZERS_OPTIONS)
-      list(APPEND CLR_SANITIZE_LINK_OPTIONS "-fsanitize=${CLR_LINK_SANITIZERS_OPTIONS}")
-
-      # -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint"
-      add_compile_options("$<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:${CLR_SANITIZE_CXX_OPTIONS};-fdata-sections;-O1>")
-      add_linker_flag("${CLR_SANITIZE_LINK_OPTIONS}" DEBUG CHECKED)
-      # -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking)
-      add_linker_flag("-Wl,--gc-sections" DEBUG CHECKED)
-    endif ()
-  endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
-
-  if(CLR_CMAKE_HOST_BROWSER)
+  if(CLR_CMAKE_HOST_BROWSER OR CLR_CMAKE_HOST_WASI)
     # The emscripten build has additional warnings so -Werror breaks
     add_compile_options(-Wno-unused-parameter)
     add_compile_options(-Wno-alloca)
@@ -176,6 +140,129 @@ elseif (CLR_CMAKE_HOST_UNIX)
   endif()
 endif(MSVC)
 
+if (CLR_CMAKE_ENABLE_SANITIZERS)
+  set (CLR_CMAKE_BUILD_SANITIZERS "")
+  set (CLR_CMAKE_SANITIZER_RUNTIMES "")
+  string(FIND "${CLR_CMAKE_ENABLE_SANITIZERS}" "address" __ASAN_POS)
+  if(${__ASAN_POS} GREATER -1)
+    # Set up build flags for AddressSanitizer
+    set (CLR_CMAKE_ENABLE_ASAN ON)
+    if (MSVC)
+      # /RTC1 is added by default by CMake and incompatible with ASAN, so remove it.
+      string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+      string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
+      string(REPLACE "/RTC1" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
+      string(REPLACE "/RTC1" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
+    endif()
+    # For Mac and Windows platforms, we install the ASAN runtime next to the rest of our outputs to ensure that it's present when we execute our tests on Helix machines
+    # The rest of our platforms use statically-linked ASAN so this isn't a concern for those platforms.
+    if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST)
+      function(getSanitizerRuntimeDirectory output)
+        enable_language(C)
+        execute_process(
+          COMMAND ${CMAKE_C_COMPILER} -print-resource-dir
+          OUTPUT_VARIABLE compilerResourceDir
+          OUTPUT_STRIP_TRAILING_WHITESPACE)
+        set(${output} "${compilerResourceDir}/lib/darwin/" PARENT_SCOPE)
+      endfunction()
+      getSanitizerRuntimeDirectory(sanitizerRuntimeDirectory)
+      find_library(ASAN_RUNTIME clang_rt.asan_osx_dynamic PATHS ${sanitizerRuntimeDirectory})
+      add_compile_definitions(SANITIZER_SHARED_RUNTIME)
+    elseif (CLR_CMAKE_TARGET_WIN32)
+      function(getSanitizerRuntimeDirectory output archSuffixOutput)
+        get_filename_component(compiler_directory "${CMAKE_C_COMPILER}" DIRECTORY)
+        set(${output} "${compiler_directory}" PARENT_SCOPE)
+        if (CLR_CMAKE_TARGET_ARCH_I386)
+          set(${archSuffixOutput} "i386" PARENT_SCOPE)
+        elseif (CLR_CMAKE_TARGET_ARCH_AMD64)
+          set(${archSuffixOutput} "x86_64" PARENT_SCOPE)
+        elseif (CLR_CMAKE_TARGET_ARCH_ARM)
+          set(${archSuffixOutput} "armhf" PARENT_SCOPE)
+        elseif (CLR_CMAKE_TARGET_ARCH_ARM64)
+          set(${archSuffixOutput} "aarch64" PARENT_SCOPE)
+        endif()
+      endfunction()
+      getSanitizerRuntimeDirectory(sanitizerRuntimeDirectory archSuffix)
+      set(ASAN_RUNTIME "${sanitizerRuntimeDirectory}/clang_rt.asan_dynamic-${archSuffix}.dll")
+      add_compile_definitions(SANITIZER_SHARED_RUNTIME)
+    endif()
+    if (CLR_CMAKE_ENABLE_ASAN)
+      message("-- Address Sanitizer (asan) enabled")
+      list(APPEND CLR_CMAKE_BUILD_SANITIZERS
+        address)
+      list(APPEND CLR_CMAKE_SANITIZER_RUNTIMES
+        address)
+      # We can't use preprocessor defines to determine if we're building with ASAN in assembly, so we'll
+      # define the preprocessor define ourselves.
+      add_compile_definitions($<$<COMPILE_LANGUAGE:ASM,ASM_MASM>:HAS_ADDRESS_SANITIZER>)
+
+      # Disable the use-after-return check for ASAN on Clang. This is because we have a lot of code that
+      # depends on the fact that our locals are not saved in a parallel stack, so we can't enable this today.
+      # If we ever have a way to detect a parallel stack and track its bounds, we can re-enable this check.
+      add_compile_options($<$<COMPILE_LANG_AND_ID:C,Clang>:-fsanitize-address-use-after-return=never>)
+      add_compile_options($<$<COMPILE_LANG_AND_ID:CXX,Clang>:-fsanitize-address-use-after-return=never>)
+    endif()
+  endif()
+
+  # Set up build flags for UBSanitizer
+  if (CLR_CMAKE_HOST_UNIX)
+
+    set (CLR_CMAKE_ENABLE_UBSAN OFF)
+    # COMPAT: Allow enabling UBSAN in Debug/Checked builds via an environment variable.
+    if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
+      # obtain settings from running enablesanitizers.sh
+      string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_ENV_POS)
+      if (${__UBSAN_ENV_POS} GREATER -1)
+        set(CLR_CMAKE_ENABLE_UBSAN ON)
+      endif()
+    endif()
+    string(FIND "${CLR_CMAKE_ENABLE_SANITIZERS}" "undefined" __UBSAN_POS)
+    if (${__UBSAN_POS} GREATER -1)
+      set(CLR_CMAKE_ENABLE_UBSAN ON)
+    endif()
+
+    # set the CLANG sanitizer flags for debug build
+    if(CLR_CMAKE_ENABLE_UBSAN)
+      list(APPEND CLR_CMAKE_BUILD_SANITIZE_OPTIONS -fsanitize-ignorelist=${CMAKE_CURRENT_SOURCE_DIR}/sanitizer-ignorelist.txt)
+      # all sanitizer flags are enabled except alignment (due to heavy use of __unaligned modifier)
+      list(APPEND CLR_CMAKE_BUILD_SANITIZERS
+        "bool"
+        bounds
+        enum
+        float-cast-overflow
+        float-divide-by-zero
+        "function"
+        integer
+        nonnull-attribute
+        null
+        object-size
+        "return"
+        returns-nonnull-attribute
+        shift
+        unreachable
+        vla-bound
+        vptr)
+      list(APPEND CLR_CMAKE_SANITIZER_RUNTIMES
+        undefined)
+      message("-- Undefined Behavior Sanitizer (ubsan) enabled")
+    endif ()
+  endif()
+  list(JOIN CLR_CMAKE_BUILD_SANITIZERS "," CLR_CMAKE_BUILD_SANITIZERS)
+  list(JOIN CLR_CMAKE_SANITIZER_RUNTIMES "," CLR_LINK_SANITIZERS_OPTIONS)
+  if (CLR_CMAKE_BUILD_SANITIZERS)
+    list(APPEND CLR_CMAKE_BUILD_SANITIZE_OPTIONS "-fsanitize=${CLR_CMAKE_BUILD_SANITIZERS}")
+  endif()
+  if (CLR_CMAKE_SANITIZER_RUNTIMES)
+    list(APPEND CLR_CMAKE_LINK_SANITIZE_OPTIONS "-fsanitize=${CLR_CMAKE_SANITIZER_RUNTIMES}")
+  endif()
+  if (MSVC)
+    add_compile_options("$<$<COMPILE_LANGUAGE:C,CXX>:${CLR_CMAKE_BUILD_SANITIZE_OPTIONS}>")
+  else()
+    add_compile_options("$<$<COMPILE_LANGUAGE:C,CXX>:${CLR_CMAKE_BUILD_SANITIZE_OPTIONS}>")
+    add_linker_flag("${CLR_CMAKE_LINK_SANITIZE_OPTIONS}")
+  endif()
+endif()
+
 # CLR_ADDITIONAL_LINKER_FLAGS - used for passing additional arguments to linker
 # CLR_ADDITIONAL_COMPILER_OPTIONS - used for passing additional arguments to compiler
 #
@@ -200,9 +287,12 @@ elseif(CLR_CMAKE_HOST_SUNOS)
   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_IOS AND NOT CLR_CMAKE_HOST_TVOS)
+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_XOPEN_SOURCE)
   add_linker_flag("-Wl,-bind_at_load")
+elseif(CLR_CMAKE_HOST_HAIKU)
+  add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
+  add_linker_flag("-Wl,--no-undefined")
 endif()
 
 #------------------------------------
@@ -276,7 +366,12 @@ if (CLR_CMAKE_HOST_UNIX)
   add_definitions(-DHOST_UNIX)
 
   if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST)
-    add_definitions(-DHOST_OSX)
+    add_definitions(-DHOST_APPLE)
+    if(CLR_CMAKE_HOST_MACCATALYST)
+      add_definitions(-DHOST_MACCATALYST)
+    else()
+      add_definitions(-DHOST_OSX)
+    endif()
     if(CLR_CMAKE_HOST_UNIX_AMD64)
       message("Detected OSX x86_64")
     elseif(CLR_CMAKE_HOST_UNIX_ARM64)
@@ -284,12 +379,40 @@ if (CLR_CMAKE_HOST_UNIX)
     else()
       clr_unknown_arch()
     endif()
+  elseif (CLR_CMAKE_HOST_IOS)
+    add_definitions(-DHOST_APPLE)
+    add_definitions(-DHOST_IOS)
+    if(CLR_CMAKE_HOST_UNIX_AMD64)
+      message("Detected iOS x86_64")
+    elseif(CLR_CMAKE_HOST_UNIX_ARM64)
+      message("Detected iOS ARM64")
+    else()
+      clr_unknown_arch()
+    endif()
+  elseif (CLR_CMAKE_HOST_TVOS)
+    add_definitions(-DHOST_APPLE)
+    add_definitions(-DHOST_TVOS)
+    if(CLR_CMAKE_HOST_UNIX_AMD64)
+      message("Detected tvOS x86_64")
+    elseif(CLR_CMAKE_HOST_UNIX_ARM64)
+      message("Detected tvOS ARM64")
+    else()
+      clr_unknown_arch()
+    endif()
   elseif(CLR_CMAKE_HOST_FREEBSD)
-    message("Detected FreeBSD amd64")
+    if(CLR_CMAKE_HOST_UNIX_ARM64)
+      message("Detected FreeBSD aarch64")
+    elseif(CLR_CMAKE_HOST_UNIX_AMD64)
+      message("Detected FreeBSD amd64")
+    else()
+      message(FATAL_ERROR "Unsupported FreeBSD architecture")
+    endif()
   elseif(CLR_CMAKE_HOST_NETBSD)
     message("Detected NetBSD amd64")
   elseif(CLR_CMAKE_HOST_SUNOS)
     message("Detected SunOS amd64")
+  elseif(CLR_CMAKE_HOST_HAIKU)
+    message("Detected Haiku x86_64")
   endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST)
 endif(CLR_CMAKE_HOST_UNIX)
 
@@ -382,6 +505,17 @@ if (CLR_CMAKE_HOST_UNIX)
   # using twos-complement representation (this is normally undefined according to the C++ spec).
   add_compile_options(-fwrapv)
 
+  if(CLR_CMAKE_HOST_APPLE)
+    # Clang will by default emit objc_msgSend stubs in Xcode 14, which ld from earlier Xcodes doesn't understand.
+    # We disable this by passing -fno-objc-msgsend-selector-stubs to clang.
+    # We can probably remove this flag once we require developers to use Xcode 14.
+    # Ref: https://github.com/xamarin/xamarin-macios/issues/16223
+    check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
+    if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
+      set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
+    endif()
+  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)
@@ -390,7 +524,7 @@ if (CLR_CMAKE_HOST_UNIX)
       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)
+  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)
@@ -424,6 +558,8 @@ if (CLR_CMAKE_HOST_UNIX)
   # optimization in the IEEE 754 specification and is therefore considered unsafe.
   add_compile_options(-ffp-contract=off)
 
+  add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
+
   if (CMAKE_C_COMPILER_ID MATCHES "Clang")
     add_compile_options(-Wno-unknown-warning-option)
 
@@ -447,6 +583,14 @@ if (CLR_CMAKE_HOST_UNIX)
     add_compile_options(-Wno-incompatible-ms-struct)
 
     add_compile_options(-Wno-reserved-identifier)
+
+    # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734
+    # which we are not conforming to yet.
+    add_compile_options(-Wno-unsafe-buffer-usage)
+
+    # other clang 16.0 suppressions
+    add_compile_options(-Wno-single-bit-bitfield-constant-conversion)
+    add_compile_options(-Wno-cast-function-type-strict)
   else()
     add_compile_options(-Wno-uninitialized)
     add_compile_options(-Wno-strict-aliasing)
@@ -454,15 +598,14 @@ if (CLR_CMAKE_HOST_UNIX)
     add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-misleading-indentation>)
     add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-stringop-overflow>)
     add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-restrict>)
-    add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-stringop-truncation>)
+    add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-stringop-truncation>)
+    add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-class-memaccess>)
 
     if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0)
       # this warning is only reported by g++ 11 in debug mode when building
       # src/coreclr/vm/stackingallocator.h. It is a false-positive, fixed in g++ 12.
       # see: https://github.com/dotnet/runtime/pull/69188#issuecomment-1136764770
       add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-placement-new>)
-
-      add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-class-memaccess>)
     endif()
 
     if (CMAKE_CXX_COMPILER_ID)
@@ -479,7 +622,7 @@ 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.
   add_compile_options(-ffunction-sections)
 
@@ -508,6 +651,8 @@ if (CLR_CMAKE_HOST_UNIX)
     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}")
   elseif(CLR_CMAKE_HOST_OSX)
     if(CLR_CMAKE_HOST_ARCH_ARM64)
       set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0")
@@ -526,14 +671,26 @@ if(CLR_CMAKE_TARGET_UNIX)
   add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_UNIX>)
   # Contracts are disabled on UNIX.
   add_definitions(-DDISABLE_CONTRACTS)
-  if(CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS)
+  if(CLR_CMAKE_TARGET_APPLE)
+    add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_APPLE>)
+  endif()
+  if(CLR_CMAKE_TARGET_OSX)
     add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_OSX>)
+  elseif(CLR_CMAKE_TARGET_MACCATALYST)
+    add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_MACCATALYST>)
+  elseif(CLR_CMAKE_TARGET_IOS)
+    add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_IOS>)
+  elseif(CLR_CMAKE_TARGET_TVOS)
+    add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_TVOS>)
   elseif(CLR_CMAKE_TARGET_FREEBSD)
     add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_FREEBSD>)
   elseif(CLR_CMAKE_TARGET_ANDROID)
     add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_ANDROID>)
   elseif(CLR_CMAKE_TARGET_LINUX)
     add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_LINUX>)
+    if(CLR_CMAKE_TARGET_BROWSER)
+      add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_BROWSER>)
+    endif()
     if(CLR_CMAKE_TARGET_LINUX_MUSL)
         add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_LINUX_MUSL>)
     endif()
@@ -544,11 +701,11 @@ if(CLR_CMAKE_TARGET_UNIX)
     if(CLR_CMAKE_TARGET_OS_ILLUMOS)
       add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_ILLUMOS>)
     endif()
+  elseif(CLR_CMAKE_TARGET_HAIKU)
+    add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_HAIKU>)
   endif()
 elseif(CLR_CMAKE_TARGET_WASI)
   add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_WASI>)
-elseif(CLR_CMAKE_TARGET_BROWSER)
-  add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_BROWSER>)
 else(CLR_CMAKE_TARGET_UNIX)
   add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:IGNORE_DEFAULT_TARGET_OS>>>:TARGET_WINDOWS>)
 endif(CLR_CMAKE_TARGET_UNIX)
@@ -676,7 +833,7 @@ if (MSVC)
   # Set Warning Level 4:
   add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/w44177>) # Pragma data_seg s/b at global scope.
 
-  add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/Zi>) # enable debugging information
+  add_compile_options($<$<COMPILE_LANGUAGE:C,CXX,ASM_MASM>:/Zi>) # enable debugging information
   add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/ZH:SHA_256>) # use SHA256 for generating hashes of compiler processed source files.
   add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/source-charset:utf-8>) # Force MSVC to compile source as UTF-8.
 
@@ -714,6 +871,15 @@ if (MSVC)
   # production-time scenarios.
   set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<AND:$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>,$<NOT:$<BOOL:$<TARGET_PROPERTY:DAC_COMPONENT>>>>:Debug>)
 
+  if (NOT CLR_CMAKE_ENABLE_SANITIZERS)
+    # Force uCRT to be dynamically linked for Release build
+    # We won't do this for sanitized builds as the dynamic CRT is not compatible with the static sanitizer runtime and
+    # the dynamic sanitizer runtime is not redistributable. Sanitized runtime builds are not production-time scenarios
+    # so we don't get the benefits of a dynamic CRT for sanitized runtime builds.
+    add_linker_flag(/NODEFAULTLIB:libucrt.lib RELEASE)
+    add_linker_flag(/DEFAULTLIB:ucrt.lib RELEASE)
+  endif()
+
   add_compile_options($<$<COMPILE_LANGUAGE:ASM_MASM>:/ZH:SHA_256>)
 
   if (CLR_CMAKE_TARGET_ARCH_ARM OR CLR_CMAKE_TARGET_ARCH_ARM64)
@@ -725,6 +891,15 @@ if (MSVC)
   add_compile_options($<$<COMPILE_LANGUAGE:RC>:/nologo>)
 endif (MSVC)
 
+# Configure non-MSVC compiler flags that apply to all platforms (unix-like or otherwise)
+if (NOT MSVC)
+  # Check for sometimes suppressed warnings
+  check_c_compiler_flag(-Wreserved-identifier COMPILER_SUPPORTS_W_RESERVED_IDENTIFIER)
+  if(COMPILER_SUPPORTS_W_RESERVED_IDENTIFIER)
+    add_compile_definitions(COMPILER_SUPPORTS_W_RESERVED_IDENTIFIER)
+  endif()
+endif()
+
 if(CLR_CMAKE_ENABLE_CODE_COVERAGE)
 
   if(CLR_CMAKE_HOST_UNIX)
@@ -795,7 +970,7 @@ if (CLR_CMAKE_HOST_WIN32)
         message(FATAL_ERROR "MC not found")
     endif()
 
-elseif (NOT CLR_CMAKE_HOST_BROWSER)
+elseif (NOT CLR_CMAKE_HOST_BROWSER AND NOT CLR_CMAKE_HOST_WASI)
     # This is a workaround for upstream issue: https://gitlab.kitware.com/cmake/cmake/-/issues/22995.
     #
     # In Clang.cmake, the decision to use single or double hyphen for target and gcc-toolchain
index c849c592174af334de5fbfc0894e7816908de3d2..2f6ca03db863fba2a005644dfa46dc5b64a803b6 100644 (file)
@@ -10,7 +10,8 @@ set(PRERELEASE 1)
 #     - for windows we use the passed in parameter to CMAKE to determine build arch
 #----------------------------------------
 set(CLR_CMAKE_HOST_OS ${CMAKE_SYSTEM_NAME})
-if(CLR_CMAKE_HOST_OS STREQUAL Linux)
+string(TOLOWER ${CLR_CMAKE_HOST_OS} CLR_CMAKE_HOST_OS)
+if(CLR_CMAKE_HOST_OS STREQUAL linux)
     set(CLR_CMAKE_HOST_UNIX 1)
     if(CLR_CROSS_COMPONENTS_BUILD)
         # CMAKE_HOST_SYSTEM_PROCESSOR returns the value of `uname -p` on host.
@@ -74,11 +75,6 @@ if(CLR_CMAKE_HOST_OS STREQUAL Linux)
             COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID"
             OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID
             OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-        execute_process(
-            COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi"
-            OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL
-            OUTPUT_STRIP_TRAILING_WHITESPACE)
     endif()
 
     if(DEFINED CLR_CMAKE_LINUX_ID)
@@ -86,24 +82,21 @@ if(CLR_CMAKE_HOST_OS STREQUAL Linux)
             set(CLR_CMAKE_TARGET_TIZEN_LINUX 1)
             set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID})
         elseif(CLR_CMAKE_LINUX_ID STREQUAL alpine)
-            set(CLR_CMAKE_HOST_ALPINE_LINUX 1)
-            set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID})
-        endif()
-
-        if(CLR_CMAKE_LINUX_MUSL STREQUAL musl)
             set(CLR_CMAKE_HOST_LINUX_MUSL 1)
+            set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID})
         endif()
     endif(DEFINED CLR_CMAKE_LINUX_ID)
-endif(CLR_CMAKE_HOST_OS STREQUAL Linux)
+endif(CLR_CMAKE_HOST_OS STREQUAL linux)
 
-if(CLR_CMAKE_HOST_OS STREQUAL Darwin)
+if(CLR_CMAKE_HOST_OS STREQUAL darwin)
     set(CLR_CMAKE_HOST_UNIX 1)
+    set(CLR_CMAKE_HOST_APPLE 1)
 
-    if(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst)
+    if(CMAKE_SYSTEM_VARIANT STREQUAL maccatalyst)
       set(CLR_CMAKE_HOST_MACCATALYST 1)
     else()
       set(CLR_CMAKE_HOST_OSX 1)
-    endif(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst)
+    endif(CMAKE_SYSTEM_VARIANT STREQUAL maccatalyst)
 
     if(CMAKE_OSX_ARCHITECTURES STREQUAL x86_64)
         set(CLR_CMAKE_HOST_UNIX_AMD64 1)
@@ -113,10 +106,11 @@ if(CLR_CMAKE_HOST_OS STREQUAL Darwin)
         clr_unknown_arch()
     endif()
     set(CMAKE_ASM_COMPILE_OBJECT "${CMAKE_C_COMPILER} <FLAGS> <DEFINES> <INCLUDES> -o <OBJECT> -c <SOURCE>")
-endif(CLR_CMAKE_HOST_OS STREQUAL Darwin)
+endif(CLR_CMAKE_HOST_OS STREQUAL darwin)
 
-if(CLR_CMAKE_HOST_OS STREQUAL iOS OR CLR_CMAKE_HOST_OS STREQUAL iOSSimulator)
+if(CLR_CMAKE_HOST_OS STREQUAL ios OR CLR_CMAKE_HOST_OS STREQUAL iossimulator)
     set(CLR_CMAKE_HOST_UNIX 1)
+    set(CLR_CMAKE_HOST_APPLE 1)
     set(CLR_CMAKE_HOST_IOS 1)
     if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
         set(CLR_CMAKE_HOST_UNIX_AMD64 1)
@@ -129,10 +123,11 @@ if(CLR_CMAKE_HOST_OS STREQUAL iOS OR CLR_CMAKE_HOST_OS STREQUAL iOSSimulator)
     else()
         clr_unknown_arch()
     endif()
-endif(CLR_CMAKE_HOST_OS STREQUAL iOS OR CLR_CMAKE_HOST_OS STREQUAL iOSSimulator)
+endif(CLR_CMAKE_HOST_OS STREQUAL ios OR CLR_CMAKE_HOST_OS STREQUAL iossimulator)
 
-if(CLR_CMAKE_HOST_OS STREQUAL tvOS OR CLR_CMAKE_HOST_OS STREQUAL tvOSSimulator)
+if(CLR_CMAKE_HOST_OS STREQUAL tvos OR CLR_CMAKE_HOST_OS STREQUAL tvossimulator)
     set(CLR_CMAKE_HOST_UNIX 1)
+    set(CLR_CMAKE_HOST_APPLE 1)
     set(CLR_CMAKE_HOST_TVOS 1)
     if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
         set(CLR_CMAKE_HOST_UNIX_AMD64 1)
@@ -141,9 +136,9 @@ if(CLR_CMAKE_HOST_OS STREQUAL tvOS OR CLR_CMAKE_HOST_OS STREQUAL tvOSSimulator)
     else()
         clr_unknown_arch()
     endif()
-endif(CLR_CMAKE_HOST_OS STREQUAL tvOS OR CLR_CMAKE_HOST_OS STREQUAL tvOSSimulator)
+endif(CLR_CMAKE_HOST_OS STREQUAL tvos OR CLR_CMAKE_HOST_OS STREQUAL tvossimulator)
 
-if(CLR_CMAKE_HOST_OS STREQUAL Android)
+if(CLR_CMAKE_HOST_OS STREQUAL android)
     set(CLR_CMAKE_HOST_UNIX 1)
     set(CLR_CMAKE_HOST_LINUX 1)
     set(CLR_CMAKE_HOST_ANDROID 1)
@@ -158,27 +153,33 @@ if(CLR_CMAKE_HOST_OS STREQUAL Android)
     else()
         clr_unknown_arch()
     endif()
-endif(CLR_CMAKE_HOST_OS STREQUAL Android)
+endif(CLR_CMAKE_HOST_OS STREQUAL android)
 
-if(CLR_CMAKE_HOST_OS STREQUAL FreeBSD)
+if(CLR_CMAKE_HOST_OS STREQUAL freebsd)
     set(CLR_CMAKE_HOST_UNIX 1)
-    set(CLR_CMAKE_HOST_UNIX_AMD64 1)
+    if (CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
+        set(CLR_CMAKE_HOST_UNIX_AMD64 1)
+    elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
+        set(CLR_CMAKE_HOST_UNIX_ARM64 1)
+    else()
+        clr_unknown_arch()
+    endif()
     set(CLR_CMAKE_HOST_FREEBSD 1)
-endif(CLR_CMAKE_HOST_OS STREQUAL FreeBSD)
+endif(CLR_CMAKE_HOST_OS STREQUAL freebsd)
 
-if(CLR_CMAKE_HOST_OS STREQUAL OpenBSD)
+if(CLR_CMAKE_HOST_OS STREQUAL openbsd)
     set(CLR_CMAKE_HOST_UNIX 1)
     set(CLR_CMAKE_HOST_UNIX_AMD64 1)
     set(CLR_CMAKE_HOST_OPENBSD 1)
-endif(CLR_CMAKE_HOST_OS STREQUAL OpenBSD)
+endif(CLR_CMAKE_HOST_OS STREQUAL openbsd)
 
-if(CLR_CMAKE_HOST_OS STREQUAL NetBSD)
+if(CLR_CMAKE_HOST_OS STREQUAL netbsd)
     set(CLR_CMAKE_HOST_UNIX 1)
     set(CLR_CMAKE_HOST_UNIX_AMD64 1)
     set(CLR_CMAKE_HOST_NETBSD 1)
-endif(CLR_CMAKE_HOST_OS STREQUAL NetBSD)
+endif(CLR_CMAKE_HOST_OS STREQUAL netbsd)
 
-if(CLR_CMAKE_HOST_OS STREQUAL SunOS)
+if(CLR_CMAKE_HOST_OS STREQUAL sunos)
     set(CLR_CMAKE_HOST_UNIX 1)
     EXECUTE_PROCESS(
         COMMAND isainfo -n
@@ -202,21 +203,26 @@ if(CLR_CMAKE_HOST_OS STREQUAL SunOS)
     else(SUNOS_KERNEL_KIND STREQUAL illumos OR CMAKE_CROSSCOMPILING)
         set(CLR_CMAKE_HOST_OS_SOLARIS 1)
     endif(SUNOS_KERNEL_KIND STREQUAL illumos OR CMAKE_CROSSCOMPILING)
-endif(CLR_CMAKE_HOST_OS STREQUAL SunOS)
+endif(CLR_CMAKE_HOST_OS STREQUAL sunos)
 
-if(CLR_CMAKE_HOST_OS STREQUAL Windows)
-    set(CLR_CMAKE_HOST_OS windows)
+if(CLR_CMAKE_HOST_OS STREQUAL haiku)
+    set(CLR_CMAKE_HOST_UNIX 1)
+    set(CLR_CMAKE_HOST_UNIX_AMD64 1)
+    set(CLR_CMAKE_HOST_HAIKU 1)
+endif(CLR_CMAKE_HOST_OS STREQUAL haiku)
+
+if(CLR_CMAKE_HOST_OS STREQUAL windows)
     set(CLR_CMAKE_HOST_WIN32 1)
-endif(CLR_CMAKE_HOST_OS STREQUAL Windows)
+endif(CLR_CMAKE_HOST_OS STREQUAL windows)
 
-if(CLR_CMAKE_HOST_OS STREQUAL Emscripten)
+if(CLR_CMAKE_HOST_OS STREQUAL emscripten)
     set(CLR_CMAKE_HOST_UNIX 1)
     set(CLR_CMAKE_HOST_BROWSER 1)
-endif(CLR_CMAKE_HOST_OS STREQUAL Emscripten)
+endif(CLR_CMAKE_HOST_OS STREQUAL emscripten)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Wasi)
+if(CLR_CMAKE_TARGET_OS STREQUAL wasi)
     set(CLR_CMAKE_HOST_WASI 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Wasi)
+endif(CLR_CMAKE_TARGET_OS STREQUAL wasi)
 
 #--------------------------------------------
 # This repo builds two set of binaries
@@ -339,14 +345,10 @@ if (NOT DEFINED CLR_CMAKE_TARGET_OS OR CLR_CMAKE_TARGET_OS STREQUAL "" )
   set(CLR_CMAKE_TARGET_OS ${CLR_CMAKE_HOST_OS})
 endif()
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Linux)
+if(CLR_CMAKE_TARGET_OS STREQUAL linux)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_LINUX 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Linux)
-
-if(CLR_CMAKE_HOST_LINUX_MUSL)
-    set(CLR_CMAKE_TARGET_LINUX_MUSL 1)
-endif(CLR_CMAKE_HOST_LINUX_MUSL)
+endif(CLR_CMAKE_TARGET_OS STREQUAL linux)
 
 if(CLR_CMAKE_TARGET_OS STREQUAL tizen)
     set(CLR_CMAKE_TARGET_UNIX 1)
@@ -354,54 +356,57 @@ if(CLR_CMAKE_TARGET_OS STREQUAL tizen)
     set(CLR_CMAKE_TARGET_TIZEN_LINUX 1)
 endif(CLR_CMAKE_TARGET_OS STREQUAL tizen)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL alpine)
+if(CLR_CMAKE_HOST_LINUX_MUSL OR CLR_CMAKE_TARGET_OS STREQUAL alpine)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_LINUX 1)
-    set(CLR_CMAKE_TARGET_ALPINE_LINUX 1)
-endif(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)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Android)
+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)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Android)
+endif(CLR_CMAKE_TARGET_OS STREQUAL android)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Darwin)
+if(CLR_CMAKE_TARGET_OS STREQUAL darwin)
     set(CLR_CMAKE_TARGET_UNIX 1)
+    set(CLR_CMAKE_TARGET_APPLE 1)
 
-    if(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst)
+    if(CMAKE_SYSTEM_VARIANT STREQUAL maccatalyst)
         set(CLR_CMAKE_TARGET_MACCATALYST 1)
     else()
         set(CLR_CMAKE_TARGET_OSX 1)
-    endif(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Darwin)
+    endif(CMAKE_SYSTEM_VARIANT STREQUAL maccatalyst)
+endif(CLR_CMAKE_TARGET_OS STREQUAL darwin)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL iOS OR CLR_CMAKE_TARGET_OS STREQUAL iOSSimulator)
+if(CLR_CMAKE_TARGET_OS STREQUAL ios OR CLR_CMAKE_TARGET_OS STREQUAL iossimulator)
     set(CLR_CMAKE_TARGET_UNIX 1)
+    set(CLR_CMAKE_TARGET_APPLE 1)
     set(CLR_CMAKE_TARGET_IOS 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL iOS OR CLR_CMAKE_TARGET_OS STREQUAL iOSSimulator)
+endif(CLR_CMAKE_TARGET_OS STREQUAL ios OR CLR_CMAKE_TARGET_OS STREQUAL iossimulator)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL tvOS OR CLR_CMAKE_TARGET_OS STREQUAL tvOSSimulator)
+if(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulator)
     set(CLR_CMAKE_TARGET_UNIX 1)
+    set(CLR_CMAKE_TARGET_APPLE 1)
     set(CLR_CMAKE_TARGET_TVOS 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL tvOS OR CLR_CMAKE_TARGET_OS STREQUAL tvOSSimulator)
+endif(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulator)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL FreeBSD)
+if(CLR_CMAKE_TARGET_OS STREQUAL freebsd)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_FREEBSD 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL FreeBSD)
+endif(CLR_CMAKE_TARGET_OS STREQUAL freebsd)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL OpenBSD)
+if(CLR_CMAKE_TARGET_OS STREQUAL openbsd)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_OPENBSD 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL OpenBSD)
+endif(CLR_CMAKE_TARGET_OS STREQUAL openbsd)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL NetBSD)
+if(CLR_CMAKE_TARGET_OS STREQUAL netbsd)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_NETBSD 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL NetBSD)
+endif(CLR_CMAKE_TARGET_OS STREQUAL netbsd)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL SunOS)
+if(CLR_CMAKE_TARGET_OS STREQUAL sunos)
     set(CLR_CMAKE_TARGET_UNIX 1)
     if(CLR_CMAKE_HOST_OS_ILLUMOS)
         set(CLR_CMAKE_TARGET_OS_ILLUMOS 1)
@@ -409,17 +414,22 @@ if(CLR_CMAKE_TARGET_OS STREQUAL SunOS)
         set(CLR_CMAKE_TARGET_OS_SOLARIS 1)
     endif(CLR_CMAKE_HOST_OS_ILLUMOS)
     set(CLR_CMAKE_TARGET_SUNOS 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL SunOS)
+endif(CLR_CMAKE_TARGET_OS STREQUAL sunos)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Emscripten)
+if(CLR_CMAKE_TARGET_OS STREQUAL haiku)
+    set(CLR_CMAKE_TARGET_UNIX 1)
+    set(CLR_CMAKE_TARGET_HAIKU 1)
+endif(CLR_CMAKE_TARGET_OS STREQUAL haiku)
+
+if(CLR_CMAKE_TARGET_OS STREQUAL emscripten)
     set(CLR_CMAKE_TARGET_UNIX 1)
     set(CLR_CMAKE_TARGET_LINUX 1)
     set(CLR_CMAKE_TARGET_BROWSER 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Emscripten)
+endif(CLR_CMAKE_TARGET_OS STREQUAL emscripten)
 
-if(CLR_CMAKE_TARGET_OS STREQUAL Wasi)
+if(CLR_CMAKE_TARGET_OS STREQUAL wasi)
     set(CLR_CMAKE_TARGET_WASI 1)
-endif(CLR_CMAKE_TARGET_OS STREQUAL Wasi)
+endif(CLR_CMAKE_TARGET_OS STREQUAL wasi)
 
 if(CLR_CMAKE_TARGET_UNIX)
     if(CLR_CMAKE_TARGET_ARCH STREQUAL x64)
@@ -449,16 +459,18 @@ if(CLR_CMAKE_TARGET_UNIX)
     else()
         clr_unknown_arch()
     endif()
-else()
-    set(CLR_CMAKE_TARGET_WIN32 1)
 endif(CLR_CMAKE_TARGET_UNIX)
 
+if(CLR_CMAKE_TARGET_OS STREQUAL windows)
+    set(CLR_CMAKE_TARGET_WIN32 1)
+endif()
+
 # check if host & target os/arch combination are valid
-if (NOT (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS))
+if (NOT (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS) AND NOT CLR_CMAKE_TARGET_WASI)
     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()
-    if(NOT (CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_ALPINE_LINUX))
+    if(NOT (CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_LINUX_MUSL))
         message(FATAL_ERROR "Invalid host and target os/arch combination. Target OS: ${CLR_CMAKE_TARGET_OS}")
     endif()
     if(NOT ((CLR_CMAKE_HOST_ARCH_AMD64 AND (CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64)) OR (CLR_CMAKE_HOST_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM)))
@@ -466,9 +478,9 @@ if (NOT (CLR_CMAKE_TARGET_OS STREQUAL CLR_CMAKE_HOST_OS))
     endif()
 endif()
 
-if(NOT CLR_CMAKE_TARGET_BROWSER)
+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_OSX AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_HOST_TVOS AND NOT CLR_CMAKE_HOST_IOS AND NOT MSVC)
+    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($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:-fPIE>)
         add_compile_options($<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:-fPIC>)
index 07a3bbfafe4dd910272a9a93ececefb7422e56d1..6b23f2bb1e2c48aa102252d29a74aecb5d4cf5f0 100644 (file)
@@ -6,7 +6,7 @@ if (CMAKE_C_COMPILER MATCHES "-?[0-9]+(\.[0-9]+)?$")
   set(CLR_CMAKE_COMPILER_FILE_NAME_VERSION "${CMAKE_MATCH_0}")
 endif()
 
-if(NOT WIN32 AND NOT CLR_CMAKE_TARGET_BROWSER)
+if(NOT WIN32 AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI)
   if(CMAKE_C_COMPILER_ID MATCHES "Clang")
     if(APPLE)
       set(TOOLSET_PREFIX "")
@@ -46,13 +46,15 @@ if(NOT WIN32 AND NOT CLR_CMAKE_TARGET_BROWSER)
   locate_toolchain_exec(ar CMAKE_AR YES)
   locate_toolchain_exec(nm CMAKE_NM YES)
   locate_toolchain_exec(ranlib CMAKE_RANLIB YES)
+  locate_toolchain_exec(strings CMAKE_STRINGS YES)
 
   if(CMAKE_C_COMPILER_ID MATCHES "Clang")
     locate_toolchain_exec(link CMAKE_LINKER YES)
   endif()
 
-  if(NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND (NOT CLR_CMAKE_TARGET_ANDROID OR CROSS_ROOTFS))
+  if(NOT CLR_CMAKE_TARGET_APPLE AND (NOT CLR_CMAKE_TARGET_ANDROID OR CROSS_ROOTFS))
     locate_toolchain_exec(objdump CMAKE_OBJDUMP YES)
+    locate_toolchain_exec(readelf CMAKE_READELF YES)
 
     unset(CMAKE_OBJCOPY CACHE)
     locate_toolchain_exec(objcopy CMAKE_OBJCOPY NO)
@@ -90,3 +92,18 @@ if (NOT CLR_CMAKE_HOST_WIN32)
     set(LD_OSX 1)
   endif()
 endif()
+
+# This introspection depends on CMAKE_STRINGS, which is why it's in this file instead of configureplatform
+if (CLR_CMAKE_HOST_LINUX)
+  execute_process(
+    COMMAND bash -c "if ${CMAKE_STRINGS} \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi"
+    OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  if(CLR_CMAKE_LINUX_MUSL STREQUAL musl)
+    set(CLR_CMAKE_HOST_LINUX_MUSL 1)
+    set(CLR_CMAKE_TARGET_UNIX 1)
+    set(CLR_CMAKE_TARGET_LINUX 1)
+    set(CLR_CMAKE_TARGET_LINUX_MUSL 1)
+  endif()
+endif()
index efb36de6e48b2d82aa4ed459ac56af1f4912ae00..d5ef9ed625996ab225e1679a27b35992cda6b0c3 100644 (file)
@@ -89,9 +89,11 @@ function(get_compile_definitions DefinitionName)
     set(LastGeneratorExpression "")
     foreach(DEFINITION IN LISTS COMPILE_DEFINITIONS_LIST)
       # If there is a definition that uses the $<TARGET_PROPERTY:prop> generator expression
+      # or the $<COMPILE_LANGUAGE:lang> generator expression,
       # we need to remove it since that generator expression is only valid on binary targets.
       # Assume that the value is 0.
       string(REGEX REPLACE "\\$<TARGET_PROPERTY:[^,>]+>" "0" DEFINITION "${DEFINITION}")
+      string(REGEX REPLACE "\\$<COMPILE_LANGUAGE:[^>]+(,[^>]+)*>" "0" DEFINITION "${DEFINITION}")
 
       if (${DEFINITION} MATCHES "^\\$<(.+):([^>]+)(>?)$")
         if("${CMAKE_MATCH_3}" STREQUAL "")
@@ -327,7 +329,7 @@ function(generate_exports_file)
   list(GET INPUT_LIST -1 outputFilename)
   list(REMOVE_AT INPUT_LIST -1)
 
-  if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+  if(CLR_CMAKE_TARGET_APPLE)
     set(SCRIPT_NAME generateexportedsymbols.sh)
   else()
     set(SCRIPT_NAME generateversionscript.sh)
@@ -366,18 +368,18 @@ endfunction()
 
 function (get_symbol_file_name targetName outputSymbolFilename)
   if (CLR_CMAKE_HOST_UNIX)
-    if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+    if (CLR_CMAKE_TARGET_APPLE)
       set(strip_destination_file $<TARGET_FILE:${targetName}>.dwarf)
     else ()
       set(strip_destination_file $<TARGET_FILE:${targetName}>.dbg)
     endif ()
 
     set(${outputSymbolFilename} ${strip_destination_file} PARENT_SCOPE)
-  else(CLR_CMAKE_HOST_UNIX)
+  elseif(CLR_CMAKE_HOST_WIN32)
     # We can't use the $<TARGET_PDB_FILE> generator expression here since
     # the generator expression isn't supported on resource DLLs.
     set(${outputSymbolFilename} $<TARGET_FILE_DIR:${targetName}>/$<TARGET_FILE_PREFIX:${targetName}>$<TARGET_FILE_BASE_NAME:${targetName}>.pdb PARENT_SCOPE)
-  endif(CLR_CMAKE_HOST_UNIX)
+  endif()
 endfunction()
 
 function(strip_symbols targetName outputFilename)
@@ -386,7 +388,7 @@ function(strip_symbols targetName outputFilename)
   if (CLR_CMAKE_HOST_UNIX)
     set(strip_source_file $<TARGET_FILE:${targetName}>)
 
-    if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+    if (CLR_CMAKE_TARGET_APPLE)
 
       # Ensure that dsymutil and strip are present
       find_program(DSYMUTIL dsymutil)
@@ -401,10 +403,12 @@ function(strip_symbols targetName outputFilename)
 
       set(strip_command ${STRIP} -no_code_signature_warning -S ${strip_source_file})
 
-      # codesign release build
-      string(TOLOWER "${CMAKE_BUILD_TYPE}" LOWERCASE_CMAKE_BUILD_TYPE)
-      if (LOWERCASE_CMAKE_BUILD_TYPE STREQUAL release)
-        set(strip_command ${strip_command} && codesign -f -s - ${strip_source_file})
+      if (CLR_CMAKE_TARGET_OSX)
+        # codesign release build
+        string(TOLOWER "${CMAKE_BUILD_TYPE}" LOWERCASE_CMAKE_BUILD_TYPE)
+        if (LOWERCASE_CMAKE_BUILD_TYPE STREQUAL release)
+          set(strip_command ${strip_command} && codesign -f -s - ${strip_source_file})
+        endif ()
       endif ()
 
       execute_process(
@@ -421,44 +425,51 @@ function(strip_symbols targetName outputFilename)
         TARGET ${targetName}
         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 ${strip_command}
-        COMMENT "Stripping symbols from ${strip_source_file} into file ${strip_destination_file}"
         )
-    else (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+    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}
-        COMMENT "Stripping symbols from ${strip_source_file} into file ${strip_destination_file}"
         )
-    endif (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+    endif (CLR_CMAKE_TARGET_APPLE)
   endif(CLR_CMAKE_HOST_UNIX)
 endfunction()
 
 function(install_with_stripped_symbols targetName kind destination)
+    get_property(target_is_framework TARGET ${targetName} PROPERTY "FRAMEWORK")
     if(NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
       strip_symbols(${targetName} symbol_file)
-      install_symbol_file(${symbol_file} ${destination} ${ARGN})
-    endif()
-
-    if ((CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) AND ("${kind}" STREQUAL "TARGETS"))
-      # We want to avoid the kind=TARGET install behaviors which corrupt code signatures on osx-arm64
-      set(kind PROGRAMS)
+      if (NOT "${symbol_file}" STREQUAL "" AND NOT target_is_framework)
+        install_symbol_file(${symbol_file} ${destination} ${ARGN})
+      endif()
     endif()
 
-    if ("${kind}" STREQUAL "TARGETS")
-      set(install_source ${targetName})
-    elseif("${kind}" STREQUAL "PROGRAMS")
-      set(install_source $<TARGET_FILE:${targetName}>)
+    if (target_is_framework)
+      install(TARGETS ${targetName} FRAMEWORK DESTINATION ${destination} ${ARGN})
     else()
-      message(FATAL_ERROR "The `kind` argument has to be either TARGETS or PROGRAMS, ${kind} was provided instead")
+      if (CLR_CMAKE_TARGET_APPLE AND ("${kind}" STREQUAL "TARGETS"))
+        # We want to avoid the kind=TARGET install behaviors which corrupt code signatures on osx-arm64
+        set(kind PROGRAMS)
+      endif()
+
+      if ("${kind}" STREQUAL "TARGETS")
+        set(install_source ${targetName})
+      elseif("${kind}" STREQUAL "PROGRAMS")
+        set(install_source $<TARGET_FILE:${targetName}>)
+      else()
+        message(FATAL_ERROR "The `kind` argument has to be either TARGETS or PROGRAMS, ${kind} was provided instead")
+      endif()
+      install(${kind} ${install_source} DESTINATION ${destination} ${ARGN})
     endif()
-    install(${kind} ${install_source} DESTINATION ${destination} ${ARGN})
 endfunction()
 
 function(install_symbol_file symbol_file destination_path)
@@ -615,7 +626,6 @@ function(link_natvis_sources_for_target targetName linkKind)
         endif()
         get_filename_component(extension "${source}" EXT)
         if ("${extension}" STREQUAL ".natvis")
-            message("Embedding natvis ${source}")
             # Since natvis embedding is only supported on Windows
             # we can use target_link_options since our minimum version is high enough
             target_link_options(${targetName} "${linkKind}" "-NATVIS:${source}")
@@ -623,25 +633,34 @@ function(link_natvis_sources_for_target targetName linkKind)
     endforeach()
 endfunction()
 
+# Add sanitizer runtime support code to the target.
+function(add_sanitizer_runtime_support targetName)
+  # Add sanitizer support functions.
+  if (CLR_CMAKE_ENABLE_ASAN)
+    target_sources(${targetName} PRIVATE "$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CLR_SRC_NATIVE_DIR}/minipal/asansupport.cpp>")
+  endif()
+endfunction()
+
 function(add_executable_clr targetName)
-    if(NOT WIN32)
-      add_executable(${ARGV} ${VERSION_FILE_PATH})
-      disable_pax_mprotect(${ARGV})
-    else()
-      add_executable(${ARGV})
-    endif(NOT WIN32)
-    if(NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
-      strip_symbols(${ARGV0} symbolFile)
-    endif()
+  if(NOT WIN32)
+    add_executable(${ARGV} ${VERSION_FILE_PATH})
+    disable_pax_mprotect(${ARGV})
+  else()
+    add_executable(${ARGV})
+  endif(NOT WIN32)
+  add_sanitizer_runtime_support(${targetName})
+  if(NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
+    strip_symbols(${ARGV0} symbolFile)
+  endif()
 endfunction()
 
 function(add_library_clr targetName kind)
-    if(NOT WIN32 AND "${kind}" STREQUAL "SHARED")
-      add_library(${ARGV} ${VERSION_FILE_PATH})
-    else()
-      add_library(${ARGV})
-    endif()
-    if("${kind}" STREQUAL "SHARED" AND NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
-      strip_symbols(${ARGV0} symbolFile)
-    endif()
+  if(NOT WIN32 AND "${kind}" STREQUAL "SHARED")
+    add_library(${ARGV} ${VERSION_FILE_PATH})
+  else()
+    add_library(${ARGV})
+  endif()
+  if("${kind}" STREQUAL "SHARED" AND NOT CLR_CMAKE_KEEP_NATIVE_SYMBOLS)
+    strip_symbols(${ARGV0} symbolFile)
+  endif()
 endfunction()
index b97b8125e0f8c0fc645c5e0b39819fdfb98d046e..78bf2b4e9a027c9f2c38884278428fe0be3e74eb 100644 (file)
@@ -11,12 +11,9 @@ if %argC% lss 4 GOTO :USAGE
 if %1=="/?" GOTO :USAGE
 
 setlocal enabledelayedexpansion
-set basePath=%~dp0
-set __repoRoot=%~dp0..\..\
-:: remove quotes
-set "basePath=%basePath:"=%"
-:: remove trailing slash
-if %basePath:~-1%==\ set "basePath=%basePath:~0,-1%"
+set "__repoRoot=%~dp0..\.."
+:: normalize
+for %%i in ("%__repoRoot%") do set "__repoRoot=%%~fi"
 
 set __SourceDir=%1
 set __IntermediatesDir=%2
@@ -46,23 +43,36 @@ if /i "%__Arch%" == "wasm" (
         echo Error: Please add target OS parameter
         exit /B 1
     )
-    if /i "%__Os%" == "Browser" (
+    if /i "%__Os%" == "browser" (
         if "%EMSDK_PATH%" == "" (
-            if not exist "%__repoRoot%src\mono\wasm\emsdk" (
+            if not exist "%__repoRoot%\src\mono\wasm\emsdk" (
                 echo Error: Should set EMSDK_PATH environment variable pointing to emsdk root.
                 exit /B 1
             )
 
-            set EMSDK_PATH=%__repoRoot%src\mono\wasm\emsdk
-            set EMSDK_PATH=!EMSDK_PATH:\=/!
+            set "EMSDK_PATH=%__repoRoot%\src\mono\wasm\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!/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
         set __UseEmcmake=1
     )
     if /i "%__Os%" == "wasi" (
-        echo Error: WASI build not implemented on Windows yet
-        exit /B 1
+        if "%WASI_SDK_PATH%" == "" (
+            if not exist "%__repoRoot%\src\mono\wasi\wasi-sdk" (
+                echo Error: Should set WASI_SDK_PATH environment variable pointing to emsdk root.
+                exit /B 1
+            )
+
+            set "WASI_SDK_PATH=%__repoRoot%\src\mono\wasi\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.cmake" "-DCMAKE_SYSROOT=!WASI_SDK_PATH!/share/wasi-sysroot"
     )
 ) else (
     set __ExtraCmakeParams=%__ExtraCmakeParams%  "-DCMAKE_SYSTEM_VERSION=10.0"
index 72f90cdf15fcbfc34b7be83ecb16f65406d76244..b39448626fb3a0f1311e9f6ec72bf574f2cb9d48 100755 (executable)
@@ -61,9 +61,9 @@ done
 
 cmake_extra_defines=
 if [[ "$CROSSCOMPILE" == "1" ]]; then
-    platform="$(uname)"
+    platform="$(uname -s | tr '[:upper:]' '[:lower:]')"
     # OSX doesn't use rootfs
-    if ! [[ -n "$ROOTFS_DIR" || "$platform" == "Darwin" ]]; then
+    if ! [[ -n "$ROOTFS_DIR" || "$platform" == "darwin" ]]; then
         echo "ROOTFS_DIR not set for crosscompile"
         exit 1
     fi
@@ -73,7 +73,7 @@ if [[ "$CROSSCOMPILE" == "1" ]]; then
 
     cmake_extra_defines="$cmake_extra_defines -C $scriptroot/tryrun.cmake"
 
-    if [[ "$platform" == "Darwin" ]]; then
+    if [[ "$platform" == "darwin" ]]; then
         cmake_extra_defines="$cmake_extra_defines -DCMAKE_SYSTEM_NAME=Darwin"
     else
         cmake_extra_defines="$cmake_extra_defines -DCMAKE_TOOLCHAIN_FILE=$scriptroot/../common/cross/toolchain.cmake"
@@ -94,7 +94,7 @@ if [[ "$scan_build" == "ON" && -n "$SCAN_BUILD_COMMAND" ]]; then
 fi
 
 if [[ "$host_arch" == "wasm" ]]; then
-    if [[ "$target_os" == "Browser" ]]; then
+    if [[ "$target_os" == "browser" ]]; then
         cmake_command="emcmake $cmake_command"
     elif [[ "$target_os" == "wasi" ]]; then
         true
index 399a972d71d9a2f00458f4d74216910281e218d1..d2cb9bc6aa2d413bad9f5919d822cbffe80e4286 100755 (executable)
@@ -5,7 +5,7 @@
 set -euo pipefail
 
 if [[ "$#" -lt 2 ]]; then
-  echo "Usage: genmoduleindex.sh ModuleBinaryFile IndexHeaderFile"
+  echo "Usage: genmoduleindex.sh ModuleBinaryFile IndexHeaderFile readelfBinaryPath"
   exit 1
 fi
 
@@ -25,16 +25,18 @@ function printIdAsBinary() {
 
 case "$(uname -s)" in
 Darwin)
-  cmd="dwarfdump -u $1"
+  cmd="dwarfdump"
+  arg="-u"
   pattern='^UUID: ([0-9A-Fa-f\-]+)';;
 *)
-  cmd="readelf -n $1"
+  cmd="$3"
+  arg="-n"
   pattern='^[[:space:]]*Build ID: ([0-9A-Fa-f\-]+)';;
 esac
 
-while read -r line; do
+"$cmd" "$arg" "$1" | while read -r line; do
   if [[ "$line" =~ $pattern ]]; then
     printIdAsBinary "${BASH_REMATCH[1]//-/}"
     break
   fi
-done < <(eval "$cmd") > "$2"
+done > "$2"
index 9a38a18dc0759b2d565f6c3af8dac82098398b76..9ef90525dda8ba55a07802b3bacedfad5c1973c2 100644 (file)
@@ -1,8 +1,7 @@
 if (CLR_CMAKE_HOST_WIN32)
 
   function(remove_ijw_incompatible_options options updatedOptions)
-
-    # IJW isn't compatible with Ehsc, which CMake enables by default,
+    # IJW isn't compatible with Ehsc, which CMake enables by default
     if(options MATCHES "/EHsc")
         string(REPLACE "/EHsc" "" options "${options}")
     endif()
@@ -22,6 +21,12 @@ if (CLR_CMAKE_HOST_WIN32)
         string(REPLACE "/GR-" "" options "${options}")
     endif()
 
+    # Disable native sanitizers for IJW since we don't want to have to locate
+    # and copy the sanitizer runtimes and IJW must be built with a dynamic CRT.
+    if (options MATCHES "-fsanitize=")
+        string(REGEX REPLACE "-fsanitize=[a-zA-z,]+" "" options "${options}")
+    endif()
+
     SET(${updatedOptions} "${options}" PARENT_SCOPE)
   endfunction()
 
@@ -31,6 +36,19 @@ if (CLR_CMAKE_HOST_WIN32)
     set_target_properties(${targetName} PROPERTIES COMPILE_OPTIONS "${compileOptions}")
   endfunction()
 
+  function(add_ijw_msbuild_project_properties targetName ijwhost_target)
+    # When we're building with MSBuild, we need to set some project properties
+    # in case CMake has decided to use the SDK support.
+    # We're dogfooding things, so we need to set settings in ways that the product doesn't quite support.
+    # We don't actually need an installed/available target framework version here
+    # since we are disabling implicit framework references. We just need a valid value, and net8.0 is valid.
+    set_target_properties(${targetName} PROPERTIES
+      DOTNET_TARGET_FRAMEWORK net8.0
+      VS_GLOBAL_DisableImplicitFrameworkReferences true
+      VS_GLOBAL_GenerateRuntimeConfigurationFiles false
+      VS_PROJECT_IMPORT "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/SetIJWProperties.props")
+  endfunction()
+
   # 4365 - signed/unsigned mismatch
   # 4679 - Could not import member. This is an issue with IJW and static abstract methods in interfaces.
   add_compile_options(/wd4365 /wd4679)
@@ -48,6 +66,10 @@ if (CLR_CMAKE_HOST_WIN32)
 
   remove_ijw_incompatible_options("${CMAKE_CXX_FLAGS}" CMAKE_CXX_FLAGS)
 
+  get_directory_property(dirCompileOptions COMPILE_OPTIONS)
+  remove_ijw_incompatible_options("${dirCompileOptions}" dirCompileOptions)
+  set_directory_properties(PROPERTIES COMPILE_OPTIONS "${dirCompileOptions}")
+
   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/ijw/SetIJWProperties.props b/eng/native/ijw/SetIJWProperties.props
new file mode 100644 (file)
index 0000000..d18ba7f
--- /dev/null
@@ -0,0 +1,6 @@
+<Project>
+  <PropertyGroup>
+    <!-- The C++/CLI targets don't let us set this in the project file where CMake lets us set project properties, so we set it in an imported project file where it will work. -->
+    <UseIJWHost>false</UseIJWHost>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
index f9b53286c2b916c44728ddb544b5e4edffc57d30..a4eadb8151dcecb7ee7832f07c8b4443976781c2 100644 (file)
@@ -14,7 +14,7 @@ $refPackPath = "$repoRoot/artifacts/bin/ref/net$majorVersion.$minorVersion"
 
 if (-not (Test-Path $refPackPath))
 {
-    Write-Error "Reference assemblies not found in the artifacts folder at '$refPackPath'. Did you invoke 'build.cmd libs.sfx+libs.oob /p:RefOnly=true' to make sure that refs are built? Did the repo layout change?"
+    Write-Error "Reference assemblies not found in the artifacts folder at '$refPackPath'. Did you invoke 'build.cmd libs' to make sure that refs are built? Did the repo layout change?"
     exit 1
 }
 
diff --git a/eng/native/init-distro-rid.sh b/eng/native/init-distro-rid.sh
deleted file mode 100644 (file)
index 309f697..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env bash
-
-# initNonPortableDistroRid
-#
-# Input:
-#   targetOs: (str)
-#   buildArch: (str)
-#   isPortable: (int)
-#   rootfsDir: (str)
-#
-# Return:
-#   None
-#
-# Notes:
-#
-# initNonPortableDistroRid will attempt to initialize a non portable rid. These
-# rids are specific to distros need to build the product/package and consume
-# them on the same platform.
-#
-# If -portablebuild=false is passed a non-portable rid will be created for any
-# distro.
-#
-# It is important to note that the function does not return anything, but it
-# exports __DistroRid, if there is a non-portable distro rid to be used.
-#
-initNonPortableDistroRid()
-{
-    # Make sure out parameter is cleared.
-    __DistroRid=
-
-    local targetOs="$1"
-    local buildArch="$2"
-    local isPortable="$3"
-    local rootfsDir="$4"
-    local nonPortableBuildID=""
-
-    if [ "$targetOs" = "Linux" ]; then
-        if [ -e "${rootfsDir}/etc/os-release" ]; then
-            source "${rootfsDir}/etc/os-release"
-
-            # We have forced __PortableBuild=0. This is because -portablebuld
-            # has been passed as false.
-            if (( isPortable == 0 )); then
-                if [[ "${ID}" == "rhel" || "${ID}" == "rocky" || "${ID}" == "alpine" ]]; then
-                    # remove the last version digit
-                    VERSION_ID="${VERSION_ID%.*}"
-                fi
-
-                if [ -z "${VERSION_ID+x}" ]; then
-                        # Rolling release distros do not set VERSION_ID, so omit
-                        # it here to be consistent with everything else.
-                        nonPortableBuildID="${ID}-${buildArch}"
-                else
-                        nonPortableBuildID="${ID}.${VERSION_ID}-${buildArch}"
-                fi
-            fi
-
-        elif [ -e "${rootfsDir}/android_platform" ]; then
-            source "$rootfsDir"/android_platform
-            nonPortableBuildID="$RID"
-        fi
-    fi
-
-    if [ "$targetOs" = "FreeBSD" ]; then
-        if (( isPortable == 0 )); then
-            # $rootfsDir can be empty. freebsd-version is shell script and it should always work.
-            __freebsd_major_version=$($rootfsDir/bin/freebsd-version | { read v; echo "${v%%.*}"; })
-            nonPortableBuildID="freebsd.$__freebsd_major_version-${buildArch}"
-        fi
-    elif command -v getprop && getprop ro.product.system.model 2>&1 | grep -qi android; then
-        __android_sdk_version=$(getprop ro.build.version.sdk)
-        nonPortableBuildID="android.$__android_sdk_version-${buildArch}"
-    elif [ "$targetOs" = "illumos" ]; then
-        __uname_version=$(uname -v)
-        case "$__uname_version" in
-            omnios-*)
-                __omnios_major_version=$(echo "${__uname_version:8:2}")
-                nonPortableBuildID=omnios."$__omnios_major_version"-"$buildArch"
-            ;;
-            joyent_*)
-                __smartos_major_version=$(echo "${__uname_version:7:4}")
-                nonPortableBuildID=smartos."$__smartos_major_version"-"$buildArch"
-            ;;
-            illumos_*)
-                nonPortableBuildID=openindiana-"$buildArch"
-            ;;
-        esac
-    elif [ "$targetOs" = "Solaris" ]; then
-        __uname_version=$(uname -v)
-        __solaris_major_version=$(echo "${__uname_version%.*}")
-        nonPortableBuildID=solaris."$__solaris_major_version"-"$buildArch"
-    fi
-
-    if [ -n "${nonPortableBuildID}" ]; then
-        __DistroRid="${nonPortableBuildID}"
-
-        # We are using a non-portable build rid. Force __PortableBuild to false.
-        __PortableBuild=0
-
-        export __DistroRid __PortableBuild
-    fi
-}
-
-# initDistroRidGlobal
-#
-# Input:
-#   os: (str)
-#   arch: (str)
-#   isPortable: (int)
-#   rootfsDir?: (nullable:string)
-#
-# Return:
-#   None
-#
-# Notes:
-#
-# It is important to note that the function does not return anything, but it
-# exports the following variables on success:
-#
-#   __DistroRid
-#   __PortableBuild
-#
-initDistroRidGlobal()
-{
-    # __DistroRid must be set at the end of the function.
-    # Previously we would create a variable __HostDistroRid and/or __DistroRid.
-    #
-    # __HostDistroRid was used in the case of a non-portable build, it has been
-    # deprecated. Now only __DistroRid is supported. It will be used for both
-    # portable and non-portable rids and will be used in build-packages.sh
-
-    local targetOs="$1"
-    local buildArch="$2"
-    local isPortable="$3"
-    local rootfsDir=""
-    if [ "$#" -ge 4 ]; then
-        rootfsDir="$4"
-    fi
-
-    if [ -n "${rootfsDir}" ]; then
-        # We may have a cross build. Check for the existence of the rootfsDir
-        if [ ! -e "${rootfsDir}" ]; then
-            echo "Error rootfsDir has been passed, but the location is not valid."
-            exit 1
-        fi
-    fi
-
-    initNonPortableDistroRid "${targetOs}" "${buildArch}" "${isPortable}" "${rootfsDir}"
-
-    if [ "$buildArch" = "wasm" ]; then
-        if [ "$targetOs" = "Browser" ]; then
-            __DistroRid=browser-wasm
-            export __DistroRid
-        elif [ "$targetOs" = "wasi" ]; then
-            __DistroRid=wasi-wasm
-            export __DistroRid
-        fi
-    fi
-
-    if [ -z "${__DistroRid}" ]; then
-        # The non-portable build rid was not set. Set the portable rid.
-
-        __PortableBuild=1
-        export __PortableBuild
-        local distroRid=""
-
-        # Check for musl-based distros (e.g Alpine Linux, Void Linux).
-        if "${rootfsDir}/usr/bin/ldd" --version 2>&1 | grep -q musl ||
-                strings "${rootfsDir}/usr/bin/ldd" 2>&1 | grep -q musl; then
-            distroRid="linux-musl-${buildArch}"
-        fi
-
-        if [ -z "${distroRid}" ]; then
-            if [ "$targetOs" = "Linux" ]; then
-                distroRid="linux-$buildArch"
-            elif [ "$targetOs" = "linux-bionic" ]; then
-                distroRid="linux-bionic-$buildArch"
-            elif [ "$targetOs" = "OSX" ]; then
-                distroRid="osx-$buildArch"
-            elif [ "$targetOs" = "MacCatalyst" ]; then
-                distroRid="maccatalyst-$buildArch"
-            elif [ "$targetOs" = "tvOS" ]; then
-                distroRid="tvos-$buildArch"
-            elif [ "$targetOs" = "tvOSSimulator" ]; then
-                distroRid="tvossimulator-$buildArch"
-            elif [ "$targetOs" = "iOS" ]; then
-                distroRid="ios-$buildArch"
-            elif [ "$targetOs" = "iOSSimulator" ]; then
-                distroRid="iossimulator-$buildArch"
-            elif [ "$targetOs" = "Android" ]; then
-                distroRid="android-$buildArch"
-            elif [ "$targetOs" = "Browser" ]; then
-                distroRid="browser-$buildArch"
-            elif [ "$targetOs" = "wasi" ]; then
-                distroRid="wasi-$buildArch"
-            elif [ "$targetOs" = "FreeBSD" ]; then
-                distroRid="freebsd-$buildArch"
-            elif [ "$targetOs" = "illumos" ]; then
-                distroRid="illumos-$buildArch"
-            elif [ "$targetOs" = "Solaris" ]; then
-                distroRid="solaris-$buildArch"
-            fi
-        fi
-
-        __DistroRid="${distroRid}"
-        export __DistroRid
-    fi
-
-    if [ -z "$__DistroRid" ]; then
-        echo "DistroRid is not set. This is almost certainly an error"
-        exit 1
-    fi
-
-    echo "__DistroRid: ${__DistroRid}"
-}
index 9f8b78984db0f9d6431069ab642c693d15353de5..e693617a6c2b6be3f72e80c9aa8e7677ff0661d7 100644 (file)
@@ -1,17 +1,17 @@
 #!/usr/bin/env bash
 
 # Use uname to determine what the OS is.
-OSName=$(uname -s)
+OSName=$(uname -s | tr '[:upper:]' '[:lower:]')
 
 if command -v getprop && getprop ro.product.system.model 2>&1 | grep -qi android; then
-    OSName="Android"
+    OSName="android"
 fi
 
 case "$OSName" in
-FreeBSD|Linux|NetBSD|OpenBSD|SunOS|Android)
+freebsd|linux|netbsd|openbsd|sunos|android|haiku)
     os="$OSName" ;;
-Darwin)
-    os=OSX ;;
+darwin)
+    os=osx ;;
 *)
     echo "Unsupported OS $OSName detected!"
     exit 1 ;;
@@ -20,11 +20,11 @@ esac
 # On Solaris, `uname -m` is discouraged, see https://docs.oracle.com/cd/E36784_01/html/E36870/uname-1.html
 # and `uname -p` returns processor type (e.g. i386 on amd64).
 # The appropriate tool to determine CPU is isainfo(1) https://docs.oracle.com/cd/E36784_01/html/E36870/isainfo-1.html.
-if [ "$os" = "SunOS" ]; then
+if [ "$os" = "sunos" ]; then
     if uname -o 2>&1 | grep -q illumos; then
         os="illumos"
     else
-        os="Solaris"
+        os="solaris"
     fi
     CPUName=$(isainfo -n)
 else
index 403f355eca4811744858114f606dd89dbd7ba0c8..273f49b3392c2d85664fe8d177dde231b7dcfa8a 100644 (file)
@@ -8,7 +8,7 @@ if /i "%~1" == "x86"   (set __VCBuildArch=x86)
 if /i "%~1" == "x64"   (set __VCBuildArch=x86_amd64)
 if /i "%~1" == "arm"   (set __VCBuildArch=x86_arm)
 if /i "%~1" == "arm64" (set __VCBuildArch=x86_arm64)
-if /i "%~1" == "wasm"  (set __VCBuildArch=x86_amd64)
+if /i "%~1" == "wasm" (if /i "%PROCESSOR_ARCHITECTURE%" == "ARM64" (set __VCBuildArch=x86_arm64) else (set __VCBuildArch=x86_amd64))
 
 :: Default to highest Visual Studio version available that has Visual C++ tools.
 ::
@@ -61,8 +61,13 @@ exit /b 1
 if "%__VCBuildArch%"=="" exit /b 0
 
 :: Set the environment for the native build
-call "%VCINSTALLDIR%Auxiliary\Build\vcvarsall.bat" %__VCBuildArch%
-if not "%ErrorLevel%"=="0" exit /b 1
+:: We can set SkipVCEnvInit to skip setting up the MSVC environment from VS and instead assume that the current environment is set up correctly.
+:: This is very useful for testing with new MSVC versions that aren't in a VS build yet.
+if not defined SkipVCEnvInit (
+  if not exist "%VCINSTALLDIR%Auxiliary\Build\vcvarsall.bat" goto :VSMissing
+  call "%VCINSTALLDIR%Auxiliary\Build\vcvarsall.bat" %__VCBuildArch%
+  if not "%ErrorLevel%"=="0" exit /b 1
+)
 
 set "__VCBuildArch="
 
diff --git a/eng/native/sanitizer-ignorelist.txt b/eng/native/sanitizer-ignorelist.txt
new file mode 100644 (file)
index 0000000..ecc8bef
--- /dev/null
@@ -0,0 +1,14 @@
+# This file has exclusions to the Clang address sanitizer to suppress error reports
+# When Clang 3.8 is available, convert these to suppression list instead as that is preferred for internal code
+
+# CMiniMdBase::UsesAllocatedMemory - suppress stack-buffer-underflow (code backs up pointer by -1 to check allocation ownership)
+fun:_ZN11CMiniMdBase19UsesAllocatedMemoryEP11CMiniColDef
+
+# JIT_InitPInvokeFrame - suppress unknown sanitizer issue causing SEGV on unknown address 0x000000000000
+# 0 0x4e8a0c in __ubsan::checkDynamicType(void*, void*, unsigned long)
+# 1 0x4e807f in HandleDynamicTypeCacheMiss(__ubsan::DynamicTypeCacheMissData*, unsigned long, unsigned long, __ubsan::ReportOptions)
+# 2 0x4e8051 in __ubsan_handle_dynamic_type_cache_miss
+# 3 0x7f02ce676cd8 in JIT_InitPInvokeFrame(InlinedCallFrame*, void*) /home/steveharter/git/dotnet_coreclr/vm/jithelpers.cpp:6491:9
+# 4 0x7f0252bbceb2  (<unknown module>)
+fun:_Z20JIT_InitPInvokeFrameP16InlinedCallFramePv
+
diff --git a/eng/native/sanitizerblacklist.txt b/eng/native/sanitizerblacklist.txt
deleted file mode 100644 (file)
index ecc8bef..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file has exclusions to the Clang address sanitizer to suppress error reports
-# When Clang 3.8 is available, convert these to suppression list instead as that is preferred for internal code
-
-# CMiniMdBase::UsesAllocatedMemory - suppress stack-buffer-underflow (code backs up pointer by -1 to check allocation ownership)
-fun:_ZN11CMiniMdBase19UsesAllocatedMemoryEP11CMiniColDef
-
-# JIT_InitPInvokeFrame - suppress unknown sanitizer issue causing SEGV on unknown address 0x000000000000
-# 0 0x4e8a0c in __ubsan::checkDynamicType(void*, void*, unsigned long)
-# 1 0x4e807f in HandleDynamicTypeCacheMiss(__ubsan::DynamicTypeCacheMissData*, unsigned long, unsigned long, __ubsan::ReportOptions)
-# 2 0x4e8051 in __ubsan_handle_dynamic_type_cache_miss
-# 3 0x7f02ce676cd8 in JIT_InitPInvokeFrame(InlinedCallFrame*, void*) /home/steveharter/git/dotnet_coreclr/vm/jithelpers.cpp:6491:9
-# 4 0x7f0252bbceb2  (<unknown module>)
-fun:_Z20JIT_InitPInvokeFrameP16InlinedCallFramePv
-
index dc7bffb741a883f36fe3ad85fa220cc9030e18fe..fa38d245994543f74bda6f56f3f41896f071c468 100644 (file)
@@ -1,6 +1,21 @@
 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(ANDROID_ABI STREQUAL "arm64-v8a")
+    set(TARGET_ARCH_NAME "arm64")
+  elseif(ANDROID_ABI STREQUAL "x86_64")
+    set(TARGET_ARCH_NAME "x64")
+  elseif(ANDROID_ABI STREQUAL "armeabi-v7a")
+    set(TARGET_ARCH_NAME "arm")
+  elseif(ANDROID_ABI STREQUAL "x86")
+    set(TARGET_ARCH_NAME "x86")
+  else()
+    message(FATAL_ERROR "ANDROID_ABI ${ANDROID_ABI} not recognized!")
+  endif()
+endif()
+
 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)
@@ -8,26 +23,33 @@ 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)
+   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)
+  set(CLR_CMAKE_TARGET_OS freebsd)
 elseif(EXISTS ${CROSS_ROOTFS}/usr/platform/i86pc)
   set(ILLUMOS 1)
-  set(CLR_CMAKE_TARGET_OS SunOS)
+  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()
 
 if(DARWIN)
   if(TARGET_ARCH_NAME MATCHES "^(arm64|x64)$")
     set_cache_value(FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL_EXITCODE 1)
-    set_cache_value(GETPWUID_R_SETS_ERRNO_EXITCODE 1)
     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)
@@ -63,16 +85,15 @@ if(DARWIN)
     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(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 1)
     set_cache_value(SSCANF_SUPPORT_ll_EXITCODE 0)
     set_cache_value(UNGETC_NOT_RETURN_EOF_EXITCODE 1)
     set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1)
+    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_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)$" OR FREEBSD OR ILLUMOS OR TIZEN)
+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(FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL_EXITCODE 1)
-  set_cache_value(GETPWUID_R_SETS_ERRNO_EXITCODE 0)
   set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0)
   set_cache_value(HAVE_CLOCK_MONOTONIC_COARSE_EXITCODE 0)
   set_cache_value(HAVE_CLOCK_MONOTONIC_EXITCODE 0)
@@ -89,8 +110,6 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39
   set_cache_value(HAVE_LARGE_SNPRINTF_SUPPORT_EXITCODE 0)
   set_cache_value(HAVE_MMAP_DEV_ZERO_EXITCODE 0)
   set_cache_value(HAVE_PROCFS_CTL_EXITCODE 1)
-  set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 0)
-  set_cache_value(HAVE_PROCFS_STATUS_EXITCODE 0)
   set_cache_value(HAVE_PROCFS_STAT_EXITCODE 0)
   set_cache_value(HAVE_SCHED_GETCPU_EXITCODE 0)
   set_cache_value(HAVE_SCHED_GET_PRIORITY_EXITCODE 0)
@@ -102,18 +121,21 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39
   set_cache_value(PTHREAD_CREATE_MODIFIES_ERRNO_EXITCODE 1)
   set_cache_value(REALPATH_SUPPORTS_NONEXISTENT_FILES_EXITCODE 1)
   set_cache_value(SEM_INIT_MODIFIES_ERRNO_EXITCODE 1)
-
+  set_cache_value(HAVE_TERMIOS2_EXITCODE 0)
+  set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 0)
+  set_cache_value(HAVE_PROCFS_MAPS_EXITCODE 0)
+  set_cache_value(HAVE_PROCFS_STATUS_EXITCODE 0)
 
   if(ALPINE_LINUX)
     set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1)
-    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 0)
     set_cache_value(SSCANF_SUPPORT_ll_EXITCODE 1)
     set_cache_value(UNGETC_NOT_RETURN_EOF_EXITCODE 1)
+    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 0)
   else()
     set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 0)
-    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 1)
     set_cache_value(SSCANF_SUPPORT_ll_EXITCODE 0)
     set_cache_value(UNGETC_NOT_RETURN_EOF_EXITCODE 0)
+    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 1)
   endif()
 
   if (FREEBSD)
@@ -124,12 +146,11 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39
     set_cache_value(HAVE_PROCFS_MAPS 0)
     set_cache_value(HAVE_PROCFS_STAT 0)
     set_cache_value(HAVE_PROCFS_STATUS_EXITCODE 1)
-    set_cache_value(GETPWUID_R_SETS_ERRNO 0)
     set_cache_value(UNGETC_NOT_RETURN_EOF 0)
     set_cache_value(HAVE_COMPATIBLE_ILOGBNAN 1)
     set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
+    set_cache_value(HAVE_TERMIOS2_EXITCODE 1)
   elseif(ILLUMOS)
-    set_cache_value(GETPWUID_R_SETS_ERRNO_EXITCODE 1)
     set_cache_value(HAVE_COMPATIBLE_ACOS_EXITCODE 1)
     set_cache_value(HAVE_COMPATIBLE_ASIN_EXITCODE 1)
     set_cache_value(HAVE_COMPATIBLE_ATAN2_EXITCODE 1)
@@ -139,20 +160,28 @@ elseif(TARGET_ARCH_NAME MATCHES "^(armel|arm|armv6|arm64|loongarch64|riscv64|s39
     set_cache_value(HAVE_COMPATIBLE_LOG_EXITCODE 1)
     set_cache_value(HAVE_LARGE_SNPRINTF_SUPPORT_EXITCODE 1)
     set_cache_value(HAVE_PROCFS_CTL_EXITCODE 0)
-    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 1)
     set_cache_value(SSCANF_SUPPORT_ll_EXITCODE 1)
     set_cache_value(UNGETC_NOT_RETURN_EOF_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)
+    set_cache_value(HAVE_TERMIOS2_EXITCODE 1)
+    set_cache_value(SSCANF_CANNOT_HANDLE_MISSING_EXPONENT_EXITCODE 1)
   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_COMPATIBLE_EXP_EXITCODE 0)
+    set_cache_value(HAVE_COMPATIBLE_ILOGBNAN_EXITCODE 0)
+    set_cache_value(HAVE_PROCFS_STAT_EXITCODE 1)
   endif()
 else()
-  message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, armv6, arm64, loongarch64, s390x, ppc64le and x86 are supported!")
+  message(FATAL_ERROR "Unsupported platform. OS: ${CMAKE_SYSTEM_NAME}, arch: ${TARGET_ARCH_NAME}")
 endif()
 
-if(TARGET_ARCH_NAME MATCHES "^(x86|s390x|armv6|loongarch64|riscv64|ppc64le)$")
+if(TARGET_ARCH_NAME MATCHES "^(x86|x64|s390x|armv6|loongarch64|ppc64le)$")
   set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
+elseif (TARGET_ARCH_NAME STREQUAL "riscv64")
+  set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1)
 endif()
diff --git a/eng/native/tryrun_ios_tvos.cmake b/eng/native/tryrun_ios_tvos.cmake
new file mode 100644 (file)
index 0000000..378af96
--- /dev/null
@@ -0,0 +1,46 @@
+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()
+
+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(FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL_EXITCODE 1)
+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_COMPATIBLE_ACOS_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_ASIN_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_ATAN2_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_EXP_EXITCODE 1)
+set_cache_value(HAVE_COMPATIBLE_ILOGB0_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_ILOGBNAN_EXITCODE 1)
+set_cache_value(HAVE_COMPATIBLE_LOG10_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_LOG_EXITCODE 0)
+set_cache_value(HAVE_COMPATIBLE_POW_EXITCODE 0)
+set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 1)
+set_cache_value(HAVE_LARGE_SNPRINTF_SUPPORT_EXITCODE 0)
+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)
+set_cache_value(HAVE_SCHED_GET_PRIORITY_EXITCODE 0)
+set_cache_value(HAVE_VALID_NEGATIVE_INF_POW_EXITCODE 0)
+set_cache_value(HAVE_VALID_POSITIVE_INF_POW_EXITCODE 0)
+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(SSCANF_SUPPORT_ll_EXITCODE 0)
+set_cache_value(UNGETC_NOT_RETURN_EOF_EXITCODE 1)
+set_cache_value(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP_EXITCODE 1)
index ef5f31e24c3de641d26766c1bd6c1de430a307da..5fa9300597fd66d35e789ed0d54191a6717487c5 100644 (file)
@@ -1,9 +1,11 @@
 @if not defined _echo @echo off
 setlocal EnableDelayedExpansion EnableExtensions
 
-set __VersionFolder=%~dp0
-set __RepoRoot=%~dp0..\..\..
-set __artifactsObjDir=%__RepoRoot%\artifacts\obj
+set "__VersionFolder=%~dp0"
+set "__RepoRoot=%~dp0..\..\.."
+:: normalize
+for %%i in ("%__RepoRoot%") do set "__RepoRoot=%%~fi"
+set "__artifactsObjDir=%__RepoRoot%\artifacts\obj"
 
 for /r "%__VersionFolder%" %%a in (*.h *.rc) do (
     if not exist "%__artifactsObjDir%\%%~nxa" (
index 03c9700f321c2277e9ae70bb53589288beafb6a9..e9756625f39928d8477cb4acb76327dafd9a12e1 100644 (file)
@@ -149,13 +149,13 @@ jobs:
             downloadPath: '$(Build.ArtifactStagingDirectory)/__download__'
             downloadType: specific
             itemPattern: |
-              Build_$(_BuildConfig)/bin/Linux${{ parameters.osSuffix }}.$(_BuildArch).$(_BuildConfig)/**
+              Build_$(_BuildConfig)/bin/linux${{ parameters.osSuffix }}.$(_BuildArch).$(_BuildConfig)/**
             checkDownloadedFiles: true
         - task: CopyFiles@2
           displayName: 'Binplace Product'
           inputs:
-            sourceFolder: $(Build.ArtifactStagingDirectory)/__download__/Build_$(_BuildConfig)/bin/Linux${{ parameters.osSuffix }}.$(_BuildArch).$(_BuildConfig)
-            targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/Linux.$(_BuildArch).$(_BuildConfig)'
+            sourceFolder: $(Build.ArtifactStagingDirectory)/__download__/Build_$(_BuildConfig)/bin/linux${{ parameters.osSuffix }}.$(_BuildArch).$(_BuildConfig)
+            targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/linux.$(_BuildArch).$(_BuildConfig)'
 
     - ${{ if eq(parameters.isCodeQLRun, 'true') }}:
       - task: CodeQL3000Init@0
index d98841efe92f1c35df3c5f00f099300062b0e4d6..49a54bf27445bdcb58916f7c5f3bba099abb6929 100644 (file)
@@ -75,7 +75,7 @@ namespace Microsoft.Diagnostics.TestHelpers
                 ["Timestamp"] = GetTimeStampText(),
                 ["TempPath"] = Path.GetTempPath(),
                 ["WorkingDir"] = GetInitialWorkingDir(),
-                ["OS"] = OS.Kind.ToString(),
+                ["OS"] = OS.Kind.ToString().ToLowerInvariant(),
                 ["IsAlpine"] = OS.IsAlpine.ToString().ToLowerInvariant(),
                 ["TargetRid"] = GetRid(),
                 ["TargetArchitecture"] = OS.TargetArchitecture.ToString().ToLowerInvariant(),
index dbe012fada84b188ef3c9a04829ecfcc8f447345..5b869886b20df698c09714877d5140e12d767f9a 100644 (file)
   <HostArgs Condition="'$(SetFxVersion)' == 'true'">--fx-version $(FrameworkVersion)</HostArgs>
 
   <Options>
-    <Option Condition="$(OS) == Linux">
+    <Option Condition="'$(OS)' == 'linux'">
       <SOSPath>$(InstallDir)/libsosplugin.so</SOSPath>
     </Option>
-    <Option Condition="$(OS) == OSX">
+    <Option Condition="'$(OS)' == 'osx'">
       <SOSPath>$(InstallDir)/libsosplugin.dylib</SOSPath>
     </Option>
   </Options>
index c68421302e11532655df64cf92004f4eb0882858..2cace986ec44197dfb246e2d36fae1e87e1b3aa5 100644 (file)
 #cmakedefine01 HAVE_COMPATIBLE_LOG10
 #cmakedefine01 UNGETC_NOT_RETURN_EOF
 #cmakedefine01 HAS_POSIX_SEMAPHORES
-#cmakedefine01 GETPWUID_R_SETS_ERRNO
 #cmakedefine01 FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL
 
 #define PAL_THREAD_PRIORITY_MIN 0
index ee4a3241196eaae9b284b5d88b480f12231e0e65..62ae793797d297c9cb4ff9302496f5dadcedcc9a 100644 (file)
@@ -962,34 +962,7 @@ int main() {
   exit(0);
 }" HAS_POSIX_SEMAPHORES)
 set(CMAKE_REQUIRED_LIBRARIES)
-check_cxx_source_runs("
-#include <sys/types.h>
-#include <pwd.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-int main(void)
-{
-  struct passwd sPasswd;
-  struct passwd *pPasswd;
-  char buf[1];
-  int bufLen = sizeof(buf)/sizeof(buf[0]);
-  int euid = geteuid();
-  int ret = 0;
-
-  errno = 0; // clear errno
-  ret = getpwuid_r(euid, &sPasswd, buf, bufLen, &pPasswd);
-  if (0 != ret)
-  {
-    if (ERANGE == errno)
-    {
-      return 0;
-    }
-  }
 
-  return 1; // assume errno is NOT set for all other cases
-}" GETPWUID_R_SETS_ERRNO)
 check_cxx_source_runs("
 #include <stdio.h>
 #include <stdlib.h>
index bc520c2583f3e1b5fa56ba7a335f543c9f12ada8..1c0211fca1350b4b45f32589f667f7859be4c0af 100644 (file)
 
   <!-- Run OpenVirtualProcess tests on Linux -->
   <RunTestsLinux_x64>false</RunTestsLinux_x64>
-  <RunTestsLinux_x64 Condition="'$(OS)' == 'Linux'">true</RunTestsLinux_x64>
+  <RunTestsLinux_x64 Condition="'$(OS)' == 'linux'">true</RunTestsLinux_x64>
   <RunTestsLinux_x64 Condition="'$(TargetArchitecture)' != 'x64'">false</RunTestsLinux_x64>
   
   <RunTestsLinux_arm64>false</RunTestsLinux_arm64>
-  <RunTestsLinux_arm64 Condition="'$(OS)' == 'Linux'">true</RunTestsLinux_arm64>
+  <RunTestsLinux_arm64 Condition="'$(OS)' == 'linux'">true</RunTestsLinux_arm64>
   <RunTestsLinux_arm64 Condition="'$(TargetArchitecture)' != 'arm64'">false</RunTestsLinux_arm64>
 
   <Options>
   <RuntimeModuleDir>$(DotNetRoot)/shared/Microsoft.NETCore.App/$(RuntimeFrameworkVersion)</RuntimeModuleDir>
 
   <Options>
-    <Option Condition="'$(OS)' == 'Linux'">
+    <Option Condition="'$(OS)' == 'linux'">
       <DbgShimPath>$(InstallDir)/libdbgshim.so</DbgShimPath>
       <RuntimeModulePath Condition="'$(RuntimeModuleDir)' != ''">$(RuntimeModuleDir)/libcoreclr.so</RuntimeModulePath>
       <DbiModulePath Condition="'$(RuntimeModuleDir)' != ''">$(RuntimeModuleDir)/libmscordbi.so</DbiModulePath>
       <DacModulePath Condition="'$(RuntimeModuleDir)' != ''">$(RuntimeModuleDir)/libmscordaccore.so</DacModulePath>
     </Option>
-    <Option Condition="'$(OS)' == 'OSX'">
+    <Option Condition="'$(OS)' == 'osx'">
       <DbgShimPath>$(InstallDir)/libdbgshim.dylib</DbgShimPath>
       <RuntimeModulePath Condition="'$(RuntimeModuleDir)' != ''">$(RuntimeModuleDir)/libcoreclr.dylib</RuntimeModulePath>
       <DbiModulePath Condition="'$(RuntimeModuleDir)' != ''">$(RuntimeModuleDir)/libmscordbi.dylib</DbiModulePath>
index 6302b9a60211b72c67c50dd4d49e90b20c5db4f5..6cca7703519cb8bffce1ad2a6537516a23946882 100644 (file)
@@ -5,21 +5,21 @@
   <InstallDir>$(RootBinDir)/bin/$(OS).$(TargetArchitecture).$(TargetConfiguration)</InstallDir>
 
   <Options>
-    <Option Condition="'$(OS)' == 'Linux'">
+    <Option Condition="'$(OS)' == 'linux'">
       <SOSPath>$(InstallDir)/libsosplugin.so</SOSPath>
     </Option>
-    <Option Condition="'$(OS)' == 'OSX'">
+    <Option Condition="'$(OS)' == 'osx'">
       <SOSPath>$(InstallDir)/libsosplugin.dylib</SOSPath>
     </Option>
   </Options>
 
   <!-- Run tests on Linux -->
   <RunTestsLinux_x64>false</RunTestsLinux_x64>
-  <RunTestsLinux_x64 Condition="'$(OS)' == 'Linux'">$(RunTests)</RunTestsLinux_x64>
+  <RunTestsLinux_x64 Condition="'$(OS)' == 'linux'">$(RunTests)</RunTestsLinux_x64>
   <RunTestsLinux_x64 Condition="'$(TargetArchitecture)' != 'x64'">false</RunTestsLinux_x64>
   
   <RunTestsLinux_arm64>false</RunTestsLinux_arm64>
-  <RunTestsLinux_arm64 Condition="'$(OS)' == 'Linux'">$(RunTests)</RunTestsLinux_arm64>
+  <RunTestsLinux_arm64 Condition="'$(OS)' == 'linux'">$(RunTests)</RunTestsLinux_arm64>
   <RunTestsLinux_arm64 Condition="'$(TargetArchitecture)' != 'arm64'">false</RunTestsLinux_arm64>
   
   <!-- Linux x64 testing -->
@@ -80,7 +80,7 @@
   
   <!-- Run tests on OSX x64 -->
   <RunTestsOSX>false</RunTestsOSX>
-  <RunTestsOSX Condition="'$(OS)' == 'OSX'">true</RunTestsOSX>
+  <RunTestsOSX Condition="'$(OS)' == 'osx'">true</RunTestsOSX>
   <RunTestsOSX Condition="'$(TargetArchitecture)' == 'arm'">false</RunTestsOSX>
   <RunTestsOSX Condition="'$(TargetArchitecture)' == 'arm64'">false</RunTestsOSX>
   
index 66ecccff10f82418ea4d555f09795c41d1750ac9..99fe878914dc9cab6200b6c130c7b81dd8b79b15 100644 (file)
@@ -28,7 +28,7 @@ namespace Microsoft.Diagnostics.DebugServices.UnitTests
             {
                 Dictionary<string, string> initialConfig = new()
                 {
-                    ["OS"] = OS.Kind.ToString(),
+                    ["OS"] = OS.Kind.ToString().ToLowerInvariant(),
                     ["TargetArchitecture"] = OS.TargetArchitecture.ToString().ToLowerInvariant(),
                     ["TestDataFile"] = TestDataPath,
                 };