Skip to content

Commit ad559f9

Browse files
authored
Merge pull request #3205 from compnerd/foreign-icus
build: support having more than one ICU in use
2 parents 6751d38 + 4d2593f commit ad559f9

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

CMakeLists.txt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,20 @@ set(SWIFT_ANDROID_NDK_GCC_VERSION "" CACHE STRING
180180
"The GCC version to use when building for Android. Currently only 4.9 is supported.")
181181
set(SWIFT_ANDROID_SDK_PATH "" CACHE STRING
182182
"Path to the directory that contains the Android SDK tools that will be passed to the swiftc frontend")
183-
set(SWIFT_ANDROID_ICU_UC "" CACHE STRING
184-
"Path to a directory containing libicuuc.so")
185-
set(SWIFT_ANDROID_ICU_UC_INCLUDE "" CACHE STRING
186-
"Path to a directory containing headers for libicuuc")
187-
set(SWIFT_ANDROID_ICU_I18N "" CACHE STRING
188-
"Path to a directory containing libicui18n.so")
189-
set(SWIFT_ANDROID_ICU_I18N_INCLUDE "" CACHE STRING
190-
"Path to a directory containing headers libicui18n")
191183
set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
192184
"Path on an Android device where build products will be pushed. These are used when running the test suite against the device")
193185

186+
foreach(sdk ANDROID;FREEBSD;LINUX)
187+
set(SWIFT_${sdk}_ICU_UC "" CACHE STRING
188+
"Path to a directory containing the icuuc library for ${sdk}")
189+
set(SWIFT_${sdk}_ICU_UC_INCLUDE "" CACHE STRING
190+
"Path to a directory containing headers for icuuc for ${sdk}")
191+
set(SWIFT_${sdk}_ICU_I18N "" CACHE STRING
192+
"Path to a directory containing the icui18n library for ${sdk}")
193+
set(SWIFT_${sdk}_ICU_I18N_INCLUDE "" CACHE STRING
194+
"Path to a directory containing headers icui18n for ${sdk}")
195+
endforeach()
196+
194197
#
195198
# User-configurable Darwin-specific options.
196199
#

cmake/modules/AddSwift.cmake

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,18 @@ function(_add_variant_link_flags)
267267
list(APPEND result
268268
"-ldl"
269269
"-L${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/${SWIFT_ANDROID_NDK_GCC_VERSION}.x"
270-
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so"
271-
"-L${SWIFT_ANDROID_ICU_UC}" "-L${SWIFT_ANDROID_ICU_I18N}")
270+
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so")
272271
else()
273272
list(APPEND result "-lobjc")
274273
endif()
275274

275+
if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_UC}" STREQUAL "")
276+
list(APPEND result "-L${SWIFT_${sdk}_ICU_UC}")
277+
endif()
278+
if(NOT "${SWIFT_${LFLAGS_SDK}_ICU_I18N}" STREQUAL "")
279+
list(APPEND result "-L${SWIFT_${sdk}_ICU_I18N}")
280+
endif()
281+
276282
set("${LFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE)
277283
endfunction()
278284

@@ -489,7 +495,7 @@ function(_add_swift_library_single target name)
489495
message(FATAL_ERROR
490496
"Either SHARED, STATIC, or OBJECT_LIBRARY must be specified")
491497
endif()
492-
498+
493499
# Determine the subdirectory where this library will be installed.
494500
set(SWIFTLIB_SINGLE_SUBDIR
495501
"${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}/${SWIFTLIB_SINGLE_ARCHITECTURE}")
@@ -632,6 +638,17 @@ function(_add_swift_library_single target name)
632638
${SWIFTLIB_SINGLE_XCODE_WORKAROUND_SOURCES}
633639
${SWIFT_SECTIONS_OBJECT_END})
634640

641+
if(SWIFTLIB_SINGLE_TARGET_LIBRARY)
642+
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}" STREQUAL "")
643+
set_property(TARGET "${target}" APPEND_STRING
644+
PROPERTY INCLUDE_DIRECTORIES "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_UC_INCLUDE}")
645+
endif()
646+
if(NOT "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}" STREQUAL "")
647+
set_property(TARGET "${target}" APPEND_STRING
648+
PROPERTY INCLUDE_DIRECTORIES "${SWIFT_${SWIFTLIB_SINGLE_SDK}_ICU_I18N_INCLUDE}")
649+
endif()
650+
endif()
651+
635652
# The section metadata objects are generated sources, and we need to tell CMake
636653
# not to expect to find them prior to their generation.
637654
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX" OR

cmake/modules/FindICU.cmake

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,16 @@ foreach(MODULE ${ICU_FIND_COMPONENTS})
2525
endif()
2626
endforeach()
2727

28-
if(NOT "${SWIFT_ANDROID_ICU_UC_INCLUDE}" STREQUAL "")
29-
set(ICU_UC_INCLUDE_DIR "${SWIFT_ANDROID_ICU_UC_INCLUDE}")
30-
endif()
31-
if(NOT "${SWIFT_ANDROID_ICU_I18N_INCLUDE}" STREQUAL "")
32-
set(ICU_I18N_INCLUDE_DIR "${SWIFT_ANDROID_ICU_I18N_INCLUDE}")
33-
endif()
28+
foreach(sdk ANDROID;FREEBSD;LINUX)
29+
foreach(MODULE ${ICU_FIND_COMPONENTS})
30+
if("${SWIFT_${sdk}_ICU_${MODULE}_INCLUDE}" STREQUAL "")
31+
set(SWIFT_${sdk}_ICU_${MODULE}_INCLUDE ${ICU_${MODULE}_INCLUDE_DIRS})
32+
endif()
33+
if("${SWIFT_${sdk}_ICU_${MODULE}}" STREQUAL "")
34+
set(SWIFT_${sdk}_ICU_${MODULE} ${ICU_${MODULE}_LIBRARY})
35+
endif()
36+
endforeach()
37+
endforeach()
3438

3539
find_package_handle_standard_args(ICU DEFAULT_MSG ${ICU_REQUIRED})
3640
mark_as_advanced(${ICU_REQUIRED})

stdlib/public/stubs/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ else()
1212
find_package(ICU REQUIRED COMPONENTS uc i18n)
1313
set(swift_stubs_unicode_normalization_sources
1414
UnicodeNormalization.cpp)
15-
include_directories(
16-
${ICU_UC_INCLUDE_DIR} ${ICU_I18N_INCLUDE_DIR})
1715
endif()
1816

1917
add_swift_library(swiftStdlibStubs OBJECT_LIBRARY TARGET_LIBRARY

0 commit comments

Comments
 (0)