Skip to content

Commit e77d4c7

Browse files
committed
build: explicitly state arch for ICU
This is needed to support cross-compilation on targets which do not support FAT binaries (i.e. non-MachO targets). The primary user of this functionality right now is Windows, but this support is needed for Linux and android as well.
1 parent c12d1db commit e77d4c7

File tree

5 files changed

+39
-37
lines changed

5 files changed

+39
-37
lines changed

CMakeLists.txt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,16 @@ set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
187187
#
188188

189189
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU)
190-
set(SWIFT_${sdk}_ICU_UC "" CACHE STRING
191-
"Path to a directory containing the icuuc library for ${sdk}")
192-
set(SWIFT_${sdk}_ICU_UC_INCLUDE "" CACHE STRING
193-
"Path to a directory containing headers for icuuc for ${sdk}")
194-
set(SWIFT_${sdk}_ICU_I18N "" CACHE STRING
195-
"Path to a directory containing the icui18n library for ${sdk}")
196-
set(SWIFT_${sdk}_ICU_I18N_INCLUDE "" CACHE STRING
197-
"Path to a directory containing headers icui18n for ${sdk}")
190+
foreach(arch aarch64;armv6;armv7;i686;powerpc64;powerpc64le;s390x;x86_64)
191+
set(SWIFT_${sdk}_${arch}_ICU_UC "" CACHE STRING
192+
"Path to a directory containing the icuuc library for ${sdk}")
193+
set(SWIFT_${sdk}_${arch}_ICU_UC_INCLUDE "" CACHE STRING
194+
"Path to a directory containing headers for icuuc for ${sdk}")
195+
set(SWIFT_${sdk}_${arch}_ICU_I18N "" CACHE STRING
196+
"Path to a directory containing the icui18n library for ${sdk}")
197+
set(SWIFT_${sdk}_${arch}_ICU_I18N_INCLUDE "" CACHE STRING
198+
"Path to a directory containing headers icui18n for ${sdk}")
199+
endforeach()
198200
endforeach()
199201

200202
#

cmake/modules/AddSwift.cmake

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -396,11 +396,11 @@ function(_add_variant_link_flags)
396396
endif()
397397
endif()
398398

399-
if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_UC}" STREQUAL "")
400-
list(APPEND library_search_directories "${SWIFT_${sdk}_ICU_UC}")
399+
if(NOT "${SWIFT_${LFLAGS_SDK}_${LFLAGS_ARCH}_ICU_UC}" STREQUAL "")
400+
list(APPEND library_search_directories "${SWIFT_${sdk}_${arch}_ICU_UC}")
401401
endif()
402-
if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_I18N}" STREQUAL "")
403-
list(APPEND library_search_directories "${SWIFT_${sdk}_ICU_I18N}")
402+
if(NOT "${SWIFT_${LFLAGS_SDK}_${LFLAGS_ARCH}_ICU_I18N}" STREQUAL "")
403+
list(APPEND library_search_directories "${SWIFT_${sdk}_${arch}_ICU_I18N}")
404404
endif()
405405

406406
if(NOT SWIFT_COMPILER_IS_MSVC_LIKE)
@@ -852,17 +852,17 @@ function(_add_swift_library_single target name)
852852
_set_target_prefix_and_suffix("${target}" "${libkind}" "${SWIFTLIB_SINGLE_SDK}")
853853

854854
if(SWIFTLIB_SINGLE_TARGET_LIBRARY)
855-
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}" STREQUAL "" AND
856-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}" STREQUAL "/usr/include" AND
857-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_ARCH_${SWIFTLIB_SINGLE_ARCHITECTURE}_TRIPLE}/include" AND
858-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_TRIPLE}/include")
859-
target_include_directories("${target}" SYSTEM PRIVATE "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}")
855+
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}" STREQUAL "" AND
856+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}" STREQUAL "/usr/include" AND
857+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_ARCH_${SWIFTLIB_SINGLE_ARCHITECTURE}_TRIPLE}/include" AND
858+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_TRIPLE}/include")
859+
target_include_directories("${target}" SYSTEM PRIVATE "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}")
860860
endif()
861-
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}" STREQUAL "" AND
862-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}" STREQUAL "/usr/include" AND
863-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_ARCH_${SWIFTLIB_SINGLE_ARCHITECTURE}_TRIPLE}/include" AND
864-
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_TRIPLE}/include")
865-
target_include_directories("${target}" SYSTEM PRIVATE "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}")
861+
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE}" STREQUAL "" AND
862+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE}" STREQUAL "/usr/include" AND
863+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_ARCH_${SWIFTLIB_SINGLE_ARCHITECTURE}_TRIPLE}/include" AND
864+
NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE}" STREQUAL "/usr/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_TRIPLE}/include")
865+
target_include_directories("${target}" SYSTEM PRIVATE "${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE}")
866866
endif()
867867
endif()
868868

@@ -1539,7 +1539,7 @@ function(add_swift_library name)
15391539
foreach(lib ${SWIFTLIB_PRIVATE_LINK_LIBRARIES})
15401540
if("${lib}" STREQUAL "ICU_UC")
15411541
list(APPEND swiftlib_private_link_libraries_targets
1542-
"${SWIFT_${sdk}_ICU_UC}")
1542+
"${SWIFT_${sdk}_${arch}_ICU_UC}")
15431543
# temporary fix for atomic needing to be
15441544
# after object files for libswiftCore.so
15451545
if("${sdk}" STREQUAL "ANDROID")
@@ -1553,7 +1553,7 @@ function(add_swift_library name)
15531553
endif()
15541554
elseif("${lib}" STREQUAL "ICU_I18N")
15551555
list(APPEND swiftlib_private_link_libraries_targets
1556-
"${SWIFT_${sdk}_ICU_I18N}")
1556+
"${SWIFT_${sdk}_${arch}_ICU_I18N}")
15571557
elseif(TARGET "${lib}${VARIANT_SUFFIX}")
15581558
list(APPEND swiftlib_private_link_libraries_targets
15591559
"${lib}${VARIANT_SUFFIX}")

cmake/modules/FindICU.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ endforeach()
3434
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU)
3535
foreach(MODULE ${ICU_FIND_COMPONENTS})
3636
string(TOUPPER "${MODULE}" MODULE)
37-
if("${SWIFT_${sdk}_ICU_${MODULE}_INCLUDE}" STREQUAL "")
38-
set(SWIFT_${sdk}_ICU_${MODULE}_INCLUDE ${ICU_${MODULE}_INCLUDE_DIRS})
37+
if("${SWIFT_${sdk}_${SWIFT_HOST_VARIANT_ARCH}_ICU_${MODULE}_INCLUDE}" STREQUAL "")
38+
set(SWIFT_${sdk}_${SWIFT_HOST_VARIANT_ARCH}_ICU_${MODULE}_INCLUDE ${ICU_${MODULE}_INCLUDE_DIRS} CACHE STRING "" FORCE)
3939
endif()
40-
if("${SWIFT_${sdk}_ICU_${MODULE}}" STREQUAL "")
41-
set(SWIFT_${sdk}_ICU_${MODULE} ${ICU_${MODULE}_LIBRARY})
40+
if("${SWIFT_${sdk}_${SWIFT_HOST_VARIANT_ARCH}_ICU_${MODULE}}" STREQUAL "")
41+
set(SWIFT_${sdk}_${SWIFT_HOST_VARIANT_ARCH}_ICU_${MODULE} ${ICU_${MODULE}_LIBRARY} CACHE STRING "" FORCE)
4242
endif()
4343
endforeach()
4444
endforeach()

test/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,8 @@ foreach(SDK ${SWIFT_SDKS})
236236
# These two directories may contain the same libraries,
237237
# but upload both to device just in case. Duplicates will be
238238
# overwritten, and uploading doesn't take very long anyway.
239-
"${SWIFT_ANDROID_ICU_UC}"
240-
"${SWIFT_ANDROID_ICU_I18N}")
239+
"${SWIFT_ANDROID_${ARCH}_ICU_UC}"
240+
"${SWIFT_ANDROID_${ARCH}_ICU_I18N}")
241241
endif()
242242
add_custom_target("upload-stdlib${VARIANT_SUFFIX}"
243243
${command_upload_stdlib}

utils/build-script-impl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,10 +2011,10 @@ for host in "${ALL_HOSTS[@]}"; do
20112011
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
20122012
-DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}"
20132013
-DSWIFT_ANDROID_SDK_PATH:STRING="${ANDROID_NDK}/platforms/android-${ANDROID_API_LEVEL}/arch-arm"
2014-
-DSWIFT_ANDROID_ICU_UC:STRING="${ANDROID_ICU_UC}"
2015-
-DSWIFT_ANDROID_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}"
2016-
-DSWIFT_ANDROID_ICU_I18N:STRING="${ANDROID_ICU_I18N}"
2017-
-DSWIFT_ANDROID_ICU_I18N_INCLUDE:STRING="${ANDROID_ICU_I18N_INCLUDE}"
2014+
-DSWIFT_ANDROID_${HOST}_ICU_UC:STRING="${ANDROID_ICU_UC}"
2015+
-DSWIFT_ANDROID_${HOST}_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}"
2016+
-DSWIFT_ANDROID_${HOST}_ICU_I18N:STRING="${ANDROID_ICU_I18N}"
2017+
-DSWIFT_ANDROID_${HOST}_ICU_I18N_INCLUDE:STRING="${ANDROID_ICU_I18N_INCLUDE}"
20182018
-DSWIFT_ANDROID_DEPLOY_DEVICE_PATH:STRING="${ANDROID_DEPLOY_DEVICE_PATH}"
20192019
)
20202020
fi
@@ -2555,9 +2555,9 @@ for host in "${ALL_HOSTS[@]}"; do
25552555
export PKG_CONFIG_PATH="${ICU_TMPLIBDIR}/pkgconfig"
25562556
swift_cmake_options=(
25572557
"${swift_cmake_options[@]}"
2558-
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_ICU_UC_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
2559-
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_ICU_I18N_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
2560-
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_ICU_STATICLIB:BOOL=TRUE
2558+
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_UC_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
2559+
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_I18N_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
2560+
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB:BOOL=TRUE
25612561
)
25622562
# libicu builds itself and doesn't use cmake
25632563
continue

0 commit comments

Comments
 (0)