From efd0663144138efb2020af6c13a905fbd6003a46 Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Mon, 21 Jun 2021 16:13:39 +0200 Subject: [PATCH 1/6] Fix MacOS build on 11.x SDK and Catalyst build The configure.cmake was not getting the minimum supported OS version because it was being set via set_compile_options and the config functions can only get options from CMAKE_XXX_FLAGS. --- eng/native/configurecompiler.cmake | 8 +++++--- src/libraries/Native/Unix/CMakeLists.txt | 9 +++++++-- src/libraries/Native/Unix/System.Native/CMakeLists.txt | 4 ++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 99a8013d7cf406..323c235298e740 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -396,10 +396,10 @@ if (CLR_CMAKE_HOST_UNIX) add_compile_options(-Wno-overriding-t-option) add_link_options(-Wno-overriding-t-option) if(CLR_CMAKE_HOST_ARCH_ARM64) - add_compile_options(-target arm64-apple-ios14.2-macabi) + set(MACOS_VERSION_MIN_FLAGS "-target arm64-apple-ios14.2-macabi") add_link_options(-target arm64-apple-ios14.2-macabi) elseif(CLR_CMAKE_HOST_ARCH_AMD64) - add_compile_options(-target x86_64-apple-ios13.5-macabi) + set(MACOS_VERSION_MIN_FLAGS "-target x86_64-apple-ios13.5-macabi") add_link_options(-target x86_64-apple-ios13.5-macabi) else() clr_unknown_arch() @@ -415,9 +415,11 @@ if (CLR_CMAKE_HOST_UNIX) else() clr_unknown_arch() endif() - add_compile_options(${MACOS_VERSION_MIN_FLAGS}) add_linker_flag(${MACOS_VERSION_MIN_FLAGS}) endif(CLR_CMAKE_TARGET_MACCATALYST) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) endif(CLR_CMAKE_HOST_UNIX) diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index 24bb6264f35aed..6a6eb796db03db 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -85,12 +85,17 @@ if(CLR_CMAKE_TARGET_MACCATALYST) add_compile_options(-Wno-overriding-t-option) add_link_options(-Wno-overriding-t-option) if (CLR_CMAKE_TARGET_ARCH_AMD64) - add_compile_options(-target x86_64-apple-ios13.5-macabi) + set(MACOS_VERSION_MIN_FLAGS "-target x86_64-apple-ios13.5-macabi") add_link_options(-target x86_64-apple-ios13.5-macabi) elseif (CLR_CMAKE_TARGET_ARCH_ARM64) - add_compile_options(-target arm64-apple-ios14.2-macabi) + set(MACOS_VERSION_MIN_FLAGS "-target arm64-apple-ios14.2-macabi") add_link_options(-target arm64-apple-ios14.2-macabi) endif() + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + endif() if(CLR_CMAKE_TARGET_TVOS) diff --git a/src/libraries/Native/Unix/System.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Native/CMakeLists.txt index d21e27a561b0f4..a28952750b3ef9 100644 --- a/src/libraries/Native/Unix/System.Native/CMakeLists.txt +++ b/src/libraries/Native/Unix/System.Native/CMakeLists.txt @@ -4,6 +4,10 @@ if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CM add_definitions(-DHAS_CONSOLE_SIGNALS) endif () +if (CLR_CMAKE_TARGET_OSX) + add_definitions(-D_DARWIN_C_SOURCE) +endif () + include_directories("${CLR_SRC_NATIVE_DIR}/common") set(NATIVE_SOURCES From edfc263fd7179a998c99d23884a754f1b726854c Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Mon, 21 Jun 2021 19:18:06 +0200 Subject: [PATCH 2/6] Add comment explaining why we set the macOS options via CMAKE_XXX_FLAGS --- eng/native/configurecompiler.cmake | 3 +++ src/libraries/Native/Unix/CMakeLists.txt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 323c235298e740..1d3c6863f61b22 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -417,6 +417,9 @@ if (CLR_CMAKE_HOST_UNIX) endif() add_linker_flag(${MACOS_VERSION_MIN_FLAGS}) endif(CLR_CMAKE_TARGET_MACCATALYST) + # These options are intentionally set using the CMAKE_XXX_FLAGS instead of + # add_compile_options so that they take effect on the configuration functions + # in various configure.cmake files. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index 6a6eb796db03db..eb351f870d9c2e 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -92,6 +92,9 @@ if(CLR_CMAKE_TARGET_MACCATALYST) add_link_options(-target arm64-apple-ios14.2-macabi) endif() + # These options are intentionally set using the CMAKE_XXX_FLAGS instead of + # add_compile_options so that they take effect on the configuration functions + # in various configure.cmake files. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") From 581ca3854c5d7f365f70846d551dda7ae6151f63 Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Fri, 25 Jun 2021 18:39:20 +0200 Subject: [PATCH 3/6] Add diagnostic printing of the configuration --- src/libraries/Native/Unix/CMakeLists.txt | 9 +++++++++ src/libraries/Native/Unix/configure.cmake | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index eb351f870d9c2e..eca890d9f65f65 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -253,6 +253,15 @@ endif(CLR_CMAKE_TARGET_UNIX) include(configure.cmake) +message("Binary dir: ${CMAKE_BINARY_DIR}") + +file(READ "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log" OUTPUT_LOG) +file(READ "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log" ERROR_LOG) +message("================================= CMakeOutput.log ===================================") +message("${OUTPUT_LOG}") +message("================================= CMakeError.log ===================================") +message("${ERROR_LOG}") + add_subdirectory(System.IO.Compression.Native) if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID) diff --git a/src/libraries/Native/Unix/configure.cmake b/src/libraries/Native/Unix/configure.cmake index b2cfdb3bc40c2a..025af500b99f5a 100644 --- a/src/libraries/Native/Unix/configure.cmake +++ b/src/libraries/Native/Unix/configure.cmake @@ -768,7 +768,7 @@ check_c_source_compiles( HAVE_MKSTEMP) if (NOT HAVE_MKSTEMPS AND NOT HAVE_MKSTEMP) - message(FATAL_ERROR "Cannot find mkstemps nor mkstemp on this platform.") +# message(FATAL_ERROR "Cannot find mkstemps nor mkstemp on this platform.") endif() check_c_source_compiles( From 2bc930c3946912f5e280dd51a1d16d8ac17cb9a2 Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Fri, 25 Jun 2021 19:12:47 +0200 Subject: [PATCH 4/6] May fix the problem --- eng/native/configurecompiler.cmake | 9 +++++---- src/libraries/Native/Unix/CMakeLists.txt | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 1d3c6863f61b22..6076887e3f2c21 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -393,7 +393,7 @@ if (CLR_CMAKE_HOST_UNIX) # replaced with a default value, and always gets expanded to an OS version. # https://gitlab.kitware.com/cmake/cmake/-/issues/20132 # We need to disable the warning that -tagret replaces -mmacosx-version-min - add_compile_options(-Wno-overriding-t-option) + set(DISABLE_OVERRIDING_MIN_VERSION_ERROR -Wno-overriding-t-option) add_link_options(-Wno-overriding-t-option) if(CLR_CMAKE_HOST_ARCH_ARM64) set(MACOS_VERSION_MIN_FLAGS "-target arm64-apple-ios14.2-macabi") @@ -405,6 +405,7 @@ if (CLR_CMAKE_HOST_UNIX) clr_unknown_arch() endif() else() + set(DISABLE_OVERRIDING_MIN_VERSION_ERROR) if(CLR_CMAKE_HOST_ARCH_ARM64) # 'pthread_jit_write_protect_np' is only available on macOS 11.0 or newer set(MACOS_VERSION_MIN_FLAGS -mmacosx-version-min=11.0) @@ -420,9 +421,9 @@ if (CLR_CMAKE_HOST_UNIX) # These options are intentionally set using the CMAKE_XXX_FLAGS instead of # add_compile_options so that they take effect on the configuration functions # in various configure.cmake files. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + 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}") endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) endif(CLR_CMAKE_HOST_UNIX) diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index eca890d9f65f65..a805fa5f40e633 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -82,7 +82,7 @@ endif() if(CLR_CMAKE_TARGET_MACCATALYST) # -target overrides -mmacosx-version-min so suppress warning about that # https://gitlab.kitware.com/cmake/cmake/-/issues/20132 - add_compile_options(-Wno-overriding-t-option) + set(DISABLE_OVERRIDING_MIN_VERSION_ERROR -Wno-overriding-t-option) add_link_options(-Wno-overriding-t-option) if (CLR_CMAKE_TARGET_ARCH_AMD64) set(MACOS_VERSION_MIN_FLAGS "-target x86_64-apple-ios13.5-macabi") @@ -95,9 +95,9 @@ if(CLR_CMAKE_TARGET_MACCATALYST) # These options are intentionally set using the CMAKE_XXX_FLAGS instead of # add_compile_options so that they take effect on the configuration functions # in various configure.cmake files. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS}") + 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}") endif() From 7ab601f4ff753f654ef5817f1c148848e3303caa Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Fri, 25 Jun 2021 19:45:43 +0200 Subject: [PATCH 5/6] Hopefully the right fix --- src/libraries/Native/Unix/CMakeLists.txt | 9 --------- src/libraries/Native/Unix/configure.cmake | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/libraries/Native/Unix/CMakeLists.txt b/src/libraries/Native/Unix/CMakeLists.txt index a805fa5f40e633..fcd7964aacbe8c 100644 --- a/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/libraries/Native/Unix/CMakeLists.txt @@ -253,15 +253,6 @@ endif(CLR_CMAKE_TARGET_UNIX) include(configure.cmake) -message("Binary dir: ${CMAKE_BINARY_DIR}") - -file(READ "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log" OUTPUT_LOG) -file(READ "${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log" ERROR_LOG) -message("================================= CMakeOutput.log ===================================") -message("${OUTPUT_LOG}") -message("================================= CMakeError.log ===================================") -message("${ERROR_LOG}") - add_subdirectory(System.IO.Compression.Native) if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID) diff --git a/src/libraries/Native/Unix/configure.cmake b/src/libraries/Native/Unix/configure.cmake index 025af500b99f5a..b2cfdb3bc40c2a 100644 --- a/src/libraries/Native/Unix/configure.cmake +++ b/src/libraries/Native/Unix/configure.cmake @@ -768,7 +768,7 @@ check_c_source_compiles( HAVE_MKSTEMP) if (NOT HAVE_MKSTEMPS AND NOT HAVE_MKSTEMP) -# message(FATAL_ERROR "Cannot find mkstemps nor mkstemp on this platform.") + message(FATAL_ERROR "Cannot find mkstemps nor mkstemp on this platform.") endif() check_c_source_compiles( From c1ca06fd4319c25ce571ea39e4a680900016c545 Mon Sep 17 00:00:00 2001 From: Jan Vorlicek Date: Sat, 26 Jun 2021 15:28:03 +0200 Subject: [PATCH 6/6] Attempt to fix the coreclr issue --- eng/native/configurecompiler.cmake | 19 ++++++++----------- src/libraries/Native/build-native.sh | 6 +++++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 6076887e3f2c21..685949ca33deaa 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -404,26 +404,23 @@ if (CLR_CMAKE_HOST_UNIX) else() clr_unknown_arch() endif() + # These options are intentionally set using the CMAKE_XXX_FLAGS instead of + # add_compile_options so that they take effect on the configuration functions + # in various configure.cmake files. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") else() - set(DISABLE_OVERRIDING_MIN_VERSION_ERROR) if(CLR_CMAKE_HOST_ARCH_ARM64) - # 'pthread_jit_write_protect_np' is only available on macOS 11.0 or newer - set(MACOS_VERSION_MIN_FLAGS -mmacosx-version-min=11.0) + set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0") add_compile_options(-arch arm64) elseif(CLR_CMAKE_HOST_ARCH_AMD64) - set(MACOS_VERSION_MIN_FLAGS -mmacosx-version-min=10.13) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") add_compile_options(-arch x86_64) else() clr_unknown_arch() endif() - add_linker_flag(${MACOS_VERSION_MIN_FLAGS}) endif(CLR_CMAKE_TARGET_MACCATALYST) - # These options are intentionally set using the CMAKE_XXX_FLAGS instead of - # add_compile_options so that they take effect on the configuration functions - # in various configure.cmake files. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${MACOS_VERSION_MIN_FLAGS} ${DISABLE_OVERRIDING_MIN_VERSION_ERROR}") endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) endif(CLR_CMAKE_HOST_UNIX) diff --git a/src/libraries/Native/build-native.sh b/src/libraries/Native/build-native.sh index f95f1f622f0e41..ba3e88b4260be2 100755 --- a/src/libraries/Native/build-native.sh +++ b/src/libraries/Native/build-native.sh @@ -77,7 +77,11 @@ fi if [[ "$__TargetOS" == OSX ]]; then # set default OSX deployment target - __CMakeArgs="-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 $__CMakeArgs" + if [[ "$__BuildArch" == x64 ]]; then + __CMakeArgs="-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 $__CMakeArgs" + else + __CMakeArgs="-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 $__CMakeArgs" + fi elif [[ "$__TargetOS" == Android && -z "$ROOTFS_DIR" ]]; 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."