From 7115ef469d20bf4a3aba3dcfbb38629bcc57ac5b Mon Sep 17 00:00:00 2001 From: pastdue <30942300+past-due@users.noreply.github.com> Date: Thu, 28 Jan 2021 22:38:32 -0500 Subject: vcpkg_configure_make: Support macOS cross-compile (#15659) * vcpkg_configure_make: Support macOS cross-compile * Move compiler flags logic to get_cmake_vars * Better match the arch behavior of config.guess * Apply suggestions from code review Co-authored-by: Billy O'Neal Co-authored-by: Billy O'Neal --- scripts/get_cmake_vars/CMakeLists.txt | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'scripts/get_cmake_vars') diff --git a/scripts/get_cmake_vars/CMakeLists.txt b/scripts/get_cmake_vars/CMakeLists.txt index 45a53989b..6be594787 100644 --- a/scripts/get_cmake_vars/CMakeLists.txt +++ b/scripts/get_cmake_vars/CMakeLists.txt @@ -48,6 +48,12 @@ foreach(flag IN LISTS FLAGS) endforeach() list(REMOVE_DUPLICATES VCPKG_DEFAULT_FLAGS_TO_CHECK) +#Language-specific flags. +foreach(_lang IN LISTS VCPKG_LANGUAGES) + list(APPEND VCPKG_LANG_FLAGS CMAKE_${_lang}_FLAGS) +endforeach() +list(REMOVE_DUPLICATES VCPKG_LANG_FLAGS) + # TODO if ever necessary: Properties to check set(VCPKG_VAR_PREFIX "VCPKG_DETECTED" CACHE STRING "Variable prefix to use for detected flags") @@ -81,17 +87,31 @@ foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK) endif() endforeach() +macro(_vcpkg_adjust_flags flag_var) + if(MSVC) # Transform MSVC /flags to -flags due to bash scripts intepreting /flag as a path. + string(REGEX REPLACE "(^| )/" "\\1-" ${flag_var} "${${flag_var}}") + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + if("${flag_var}" IN_LIST VCPKG_LANG_FLAGS) + # macOS - append arch and isysroot if cross-compiling + if(NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}") + + foreach(arch IN LISTS CMAKE_OSX_ARCHITECTURES) + string(APPEND ${flag_var} " -arch ${arch}") + endforeach() + string(APPEND ${flag_var} " -isysroot ${CMAKE_OSX_SYSROOT}") + endif() + endif() + endif() +endmacro() + foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK) string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces - if(MSVC) # Transform MSVC /flags to -flags due to bash scripts intepreting /flag as a path. - string(REGEX REPLACE "(^| )/" "\\1-" ${flag} "${${flag}}") - endif() + _vcpkg_adjust_flags(${flag}) string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${${flag}}\")\n") foreach(config IN LISTS VCPKG_CONFIGS) string(STRIP "${${flag}_${config}}" ${flag}_${config}) - if(MSVC) - string(REGEX REPLACE "(^| )/" "\\1-" ${flag}_${config} "${${flag}_${config}}") - endif() + _vcpkg_adjust_flags(${flag}_${config}) string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag}_${config} \"${CMAKE_${flag}_FLAGS_${config}}\")\n") set(COMBINED_${flag}_${config} "${${flag}} ${${flag}_${config}}") string(STRIP "${COMBINED_${flag}_${config}}" COMBINED_${flag}_${config}) -- cgit v1.2.3