From 30a8a645312b0f832726ee27f394fb86cc437e6b Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 14 Feb 2025 18:28:04 -0500 Subject: [PATCH 1/4] Fix win-arm64 crossdac build https://github.com/dotnet/runtime/pull/112256 added the ability to cross compile android on windows. This regressed the win-arm64 crossdac build because it stopped passing CMAKE_TARGET_ARCH and CMAKE_TARGET_OS for cross component builds where the host and target os's match. This change makes sure the cmake variables are passed in all cases except when the hostos isn't passed in or is windows (host == target). --- src/coreclr/build-runtime.cmd | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index 5f6964b34a84b7..36b7da593bd2fe 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -74,6 +74,7 @@ set __Ninja=1 set __RequestedBuildComponents= set __OutputRid= set __SubDir= +set __ShouldEmitCmakeTarget=0 :Arg_Loop if "%1" == "" goto ArgsDone @@ -392,12 +393,19 @@ if %__BuildNative% EQU 1 ( set __ExtraCmakeArgs="-DCMAKE_BUILD_TYPE=!__BuildType!" ) + :: We want to specify CMAKE_TARGET_* when __HostOS isn't passed in or is windows (host == target) if /i not "%__HostOS%" == "%__TargetOS%" ( if /i "%__HostOS%" == "" ( - set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" + set __ShouldEmitCmakeTarget=1 ) + ) else ( + set __ShouldEmitCmakeTarget=1 ) + if %__ShouldEmitCmakeTarget% EQU 1 ( + set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" + ) + set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" if /i "%__TargetOS%" == "android" ( From 1104e491431a0419a27985d943b0605a65cbf02c Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 14 Feb 2025 20:26:11 -0500 Subject: [PATCH 2/4] Delay expand variable --- src/coreclr/build-runtime.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index 36b7da593bd2fe..df82558a55c88e 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -402,7 +402,7 @@ if %__BuildNative% EQU 1 ( set __ShouldEmitCmakeTarget=1 ) - if %__ShouldEmitCmakeTarget% EQU 1 ( + if !__ShouldEmitCmakeTarget! EQU 1 ( set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" ) From 1db7ce49c8564fb5112d5011b6f0f69b09bd4a0d Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Wed, 19 Feb 2025 19:32:05 -0500 Subject: [PATCH 3/4] Feedback and fixes --- eng/native/configureplatform.cmake | 2 +- src/coreclr/build-runtime.cmd | 17 +++++++++++++---- src/coreclr/jit/CMakeLists.txt | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index fc207977125c3e..e2715c8ee1080a 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -499,7 +499,7 @@ if(NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() -if (CLR_CMAKE_TARGET_ANDROID) +if (CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CROSS_COMPONENTS_BUILD) # Google requires all the native libraries to be aligned to 16 bytes (for 16k memory page size) # This applies only to 64-bit binaries if(CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index ac894412b6179a..cebe4b7cc9f5e2 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -74,7 +74,6 @@ set __Ninja=1 set __RequestedBuildComponents= set __OutputRid= set __SubDir= -set __ShouldEmitCmakeTarget=0 :Arg_Loop if "%1" == "" goto ArgsDone @@ -393,9 +392,19 @@ if %__BuildNative% EQU 1 ( set __ExtraCmakeArgs="-DCMAKE_BUILD_TYPE=!__BuildType!" ) - set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" %__CMakeArgs% - echo Calling "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% %__TargetOS% !__ExtraCmakeArgs! - call "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% %__TargetOS% !__ExtraCmakeArgs! + set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" + set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" + + if /i "%__TargetOS%" == "android" ( + if not "%__HostOS%" == "" ( + set "__TargetOS=!__HostOS!" + ) + ) + + set __ExtraCmakeArgs=!__ExtraCmakeArgs! %__CMakeArgs% + + echo Calling "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__TargetOS! !__ExtraCmakeArgs! + call "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__TargetOS! !__ExtraCmakeArgs! if not !errorlevel! == 0 ( echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate native component build project! goto ExitWithError diff --git a/src/coreclr/jit/CMakeLists.txt b/src/coreclr/jit/CMakeLists.txt index 6f9a360ec2daa8..764cdef4ae4122 100644 --- a/src/coreclr/jit/CMakeLists.txt +++ b/src/coreclr/jit/CMakeLists.txt @@ -504,7 +504,7 @@ endif() set(JIT_DLL_MAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/dllmain.cpp) -if(CLR_CMAKE_TARGET_WIN32) +if(CLR_CMAKE_HOST_WIN32) set(CLRJIT_EXPORTS ${CMAKE_CURRENT_LIST_DIR}/ClrJit.exports) set(JIT_EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/ClrJit.exports.def) preprocess_file (${CLRJIT_EXPORTS} ${JIT_EXPORTS_FILE}) From 42c880674a1afab3b82082c1adfeb16d0ea07e27 Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Wed, 19 Feb 2025 21:56:15 -0500 Subject: [PATCH 4/4] More feedback --- eng/native/configureplatform.cmake | 2 +- src/coreclr/build-runtime.cmd | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index e2715c8ee1080a..7a845a5bf7be4a 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -499,7 +499,7 @@ if(NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() -if (CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CROSS_COMPONENTS_BUILD) +if (CLR_CMAKE_HOST_ANDROID) # Google requires all the native libraries to be aligned to 16 bytes (for 16k memory page size) # This applies only to 64-bit binaries if(CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64) diff --git a/src/coreclr/build-runtime.cmd b/src/coreclr/build-runtime.cmd index cebe4b7cc9f5e2..7b09a4380b510a 100644 --- a/src/coreclr/build-runtime.cmd +++ b/src/coreclr/build-runtime.cmd @@ -395,16 +395,14 @@ if %__BuildNative% EQU 1 ( set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLR_CMAKE_TARGET_ARCH=%__TargetArch%" "-DCLR_CMAKE_TARGET_OS=%__TargetOS%" set __ExtraCmakeArgs=!__ExtraCmakeArgs! "-DCLI_CMAKE_FALLBACK_OS=%__HostFallbackOS%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_PATH=%__PgoOptDataPath%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" - if /i "%__TargetOS%" == "android" ( - if not "%__HostOS%" == "" ( - set "__TargetOS=!__HostOS!" - ) + if "%__HostOS%" == "" ( + set "__HostOS=!__TargetOS!" ) set __ExtraCmakeArgs=!__ExtraCmakeArgs! %__CMakeArgs% - echo Calling "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__TargetOS! !__ExtraCmakeArgs! - call "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__TargetOS! !__ExtraCmakeArgs! + echo Calling "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__HostOS! !__ExtraCmakeArgs! + call "%__RepoRootDir%\eng\native\gen-buildsys.cmd" "%__ProjectDir%" "%__IntermediatesDir%" %__VSVersion% %__HostArch% !__HostOS! !__ExtraCmakeArgs! if not !errorlevel! == 0 ( echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate native component build project! goto ExitWithError