@@ -298,6 +298,7 @@ components=(
298
298
foundation
299
299
libcxx
300
300
libdispatch
301
+ libicu
301
302
libxml2
302
303
zlib
303
304
curl
@@ -1248,13 +1249,15 @@ FOUNDATION_SWIFTFOUNDATION_SOURCE_DIR="${WORKSPACE}/swift-foundation"
1248
1249
FOUNDATION_SWIFTFOUNDATIONICU_SOURCE_DIR=" ${WORKSPACE} /swift-foundation-icu"
1249
1250
LIBDISPATCH_SOURCE_DIR=" ${WORKSPACE} /swift-corelibs-libdispatch"
1250
1251
LIBDISPATCH_STATIC_SOURCE_DIR=" ${WORKSPACE} /swift-corelibs-libdispatch"
1252
+ LIBICU_SOURCE_DIR=" ${WORKSPACE} /icu"
1251
1253
LIBCXX_SOURCE_DIR=" ${WORKSPACE} /llvm-project/runtimes"
1252
1254
SWIFT_COLLECTIONS_SOURCE_DIR=" ${WORKSPACE} /swift-collections"
1253
1255
SWIFT_PATH_TO_STRING_PROCESSING_SOURCE=" ${WORKSPACE} /swift-experimental-string-processing"
1254
1256
SWIFTSYNTAX_SOURCE_DIR=" ${WORKSPACE} /swift-syntax"
1255
1257
SWIFT_SYNTAX_SOURCE_DIR=" ${WORKSPACE} /swift-syntax"
1256
1258
1257
1259
[[ " ${SKIP_BUILD_LIBCXX} " ]] || PRODUCTS+=(libcxx)
1260
+ [[ " ${SKIP_BUILD_LIBICU} " ]] || PRODUCTS+=(libicu)
1258
1261
[[ " ${SKIP_BUILD_SWIFT} " ]] || PRODUCTS+=(swift)
1259
1262
[[ " ${SKIP_BUILD_LLDB} " ]] || PRODUCTS+=(lldb)
1260
1263
[[ " ${SKIP_BUILD_LIBDISPATCH} " ]] || PRODUCTS+=(libdispatch)
@@ -1342,6 +1345,8 @@ function build_directory_bin() {
1342
1345
libdispatch|libdispatch_static)
1343
1346
echo " ${root} /${LIBDISPATCH_BUILD_TYPE} /bin"
1344
1347
;;
1348
+ libicu)
1349
+ ;;
1345
1350
* )
1346
1351
echo " error: unknown product: ${product} "
1347
1352
exit 1
@@ -1480,6 +1485,8 @@ function cmake_config_opt() {
1480
1485
libdispatch|libdispatch_static)
1481
1486
echo " --config ${LIBDISPATCH_BUILD_TYPE} "
1482
1487
;;
1488
+ libicu)
1489
+ ;;
1483
1490
* )
1484
1491
echo " error: unknown product: ${product} "
1485
1492
exit 1
@@ -2413,6 +2420,29 @@ for host in "${ALL_HOSTS[@]}"; do
2413
2420
continue
2414
2421
fi
2415
2422
2423
+ if [[ ! " ${SKIP_BUILD_LIBICU} " ]] ; then
2424
+ ICU_ROOT=$( build_directory ${host} libicu) /tmp_install
2425
+ ICU_LIBDIR=" $( build_directory ${host} swift) /lib/swift/${SWIFT_HOST_VARIANT} /${SWIFT_HOST_VARIANT_ARCH} "
2426
+ LIBICU_BUILD_ARGS=(
2427
+ -DICU_ROOT:PATH=${ICU_ROOT}
2428
+ -DICU_INCLUDE_DIR:PATH=${ICU_ROOT} /include
2429
+ -DICU_DATA_LIBRARIES:FILEPATH=${ICU_LIBDIR} /libicudataswift.so
2430
+ -DICU_DATA_LIBRARY:FILEPATH=${ICU_LIBDIR} /libicudataswift.so
2431
+ -DICU_DATA_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR} /libicudataswift.so
2432
+ -DICU_DATA_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR} /libicudataswift.so
2433
+ -DICU_UC_LIBRARIES:FILEPATH=${ICU_LIBDIR} /libicuucswift.so
2434
+ -DICU_UC_LIBRARY:FILEPATH=${ICU_LIBDIR} /libicuucswift.so
2435
+ -DICU_UC_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR} /libicuucswift.so
2436
+ -DICU_UC_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR} /libicuucswift.so
2437
+ -DICU_I18N_LIBRARIES:FILEPATH=${ICU_LIBDIR} /libicui18nswift.so
2438
+ -DICU_I18N_LIBRARY:FILEPATH=${ICU_LIBDIR} /libicui18nswift.so
2439
+ -DICU_I18N_LIBRARY_DEBUG:FILEPATH=${ICU_LIBDIR} /libicui18nswift.so
2440
+ -DICU_I18N_LIBRARY_RELEASE:FILEPATH=${ICU_LIBDIR} /libicui18nswift.so
2441
+ )
2442
+ else
2443
+ LIBICU_BUILD_ARGS=()
2444
+ fi
2445
+
2416
2446
if [[ ! " ${SKIP_BUILD_LIBXML2} " ]]; then
2417
2447
BASE_INSTALL_DIR=" $( get_host_install_destdir ${host} ) "
2418
2448
LIBXML2_HEADERS=" ${BASE_INSTALL_DIR} /usr/include/libxml2"
@@ -2476,6 +2506,12 @@ for host in "${ALL_HOSTS[@]}"; do
2476
2506
call rm -rf " ${build_dir} "
2477
2507
fi
2478
2508
2509
+ # Set the PKG_CONFIG_PATH so that core-foundation can find the libraries and
2510
+ # header files
2511
+ LIBICU_BUILD_DIR=" $( build_directory ${host} libicu) "
2512
+ export PKG_CONFIG_PATH=" ${LIBICU_BUILD_DIR} /config:${PKG_CONFIG_PATH} "
2513
+ export LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH} " :" ${LIBICU_BUILD_DIR} /lib"
2514
+
2479
2515
cmake_options=(
2480
2516
${cmake_options[@]}
2481
2517
-DCMAKE_BUILD_TYPE:STRING=${FOUNDATION_BUILD_TYPE}
@@ -2486,6 +2522,8 @@ for host in "${ALL_HOSTS[@]}"; do
2486
2522
-DCMAKE_Swift_FLAGS:STRING=" $( common_swift_flags) "
2487
2523
-DCMAKE_INSTALL_PREFIX:PATH=$( get_host_install_prefix ${host} )
2488
2524
2525
+ ${LIBICU_BUILD_ARGS[@]}
2526
+
2489
2527
${LIBXML2_BUILD_ARGS[@]}
2490
2528
2491
2529
${ZLIB_BUILD_ARGS[@]}
@@ -2513,7 +2551,7 @@ for host in "${ALL_HOSTS[@]}"; do
2513
2551
if [[ $( is_cross_tools_host ${host} ) ]] ; then
2514
2552
cmake_options+=(" ${SWIFT_TARGET_CMAKE_OPTIONS[@]} " )
2515
2553
2516
- # Foundation looks for the libXML2 and libcurl libraries
2554
+ # Foundation looks for the ICU, libXML2 and libcurl libraries
2517
2555
# using find_package(), so search for them in
2518
2556
# CROSS_COMPILE_DEPS_PATH using the CMake process for doing
2519
2557
# so, see the linked CMake docs for more info:
@@ -2573,6 +2611,62 @@ for host in "${ALL_HOSTS[@]}"; do
2573
2611
;;
2574
2612
esac
2575
2613
2614
+ ;;
2615
+ libicu)
2616
+ SWIFT_BUILD_PATH=$( build_directory ${host} swift)
2617
+ LIBICU_BUILD_DIR=$( build_directory ${host} ${product} )
2618
+ ICU_TMPINSTALL=$LIBICU_BUILD_DIR /tmp_install
2619
+ ICU_TMPLIBDIR=" ${SWIFT_BUILD_PATH} /lib/swift/${SWIFT_HOST_VARIANT} /${SWIFT_HOST_VARIANT_ARCH} "
2620
+ if [[ " ${RECONFIGURE} " || ! -f " ${LIBICU_BUILD_DIR} " /config.status ]]; then
2621
+ echo " Reconfiguring libicu"
2622
+ if [[ " $LIBICU_BUILD_TYPE " != " Release" ]] ; then
2623
+ libicu_enable_debug=" --enable-debug"
2624
+ else
2625
+ libicu_enable_debug=" "
2626
+ fi
2627
+ call mkdir -p " ${LIBICU_BUILD_DIR} "
2628
+
2629
+ if [ $( true_false " ${BUILD_SWIFT_STATIC_STDLIB} " ) == " TRUE" ]; then
2630
+ libicu_enable_static=" --enable-static"
2631
+ else
2632
+ libicu_enable_static=" "
2633
+ fi
2634
+
2635
+ with_pushd " ${LIBICU_BUILD_DIR} " \
2636
+ call env CXXFLAGS=-fPIC LDFLAGS=' -Wl,-rpath=\$$ORIGIN' \
2637
+ " ${LIBICU_SOURCE_DIR} " /icu4c/source/runConfigureICU Linux \
2638
+ ${icu_build_variant_arg} --prefix=${ICU_TMPINSTALL} \
2639
+ ${libicu_enable_debug} \
2640
+ --enable-renaming --with-library-suffix=swift \
2641
+ --libdir=${ICU_TMPLIBDIR} \
2642
+ --enable-shared --enable-static \
2643
+ --enable-strict --disable-icuio \
2644
+ --disable-plugins --disable-dyload --disable-extras \
2645
+ --disable-samples --disable-layoutex --with-data-packaging=auto
2646
+ else
2647
+ echo " Skipping reconfiguration of libicu"
2648
+ fi
2649
+ with_pushd " ${LIBICU_BUILD_DIR} " \
2650
+ call make -j ${BUILD_JOBS} install
2651
+ ICU_LIBDIR=" $( build_directory ${host} swift) /lib/swift/${SWIFT_HOST_VARIANT} /${SWIFT_HOST_VARIANT_ARCH} "
2652
+ ICU_LIBDIR_STATIC=" $( build_directory ${host} swift) /lib/swift_static/${SWIFT_HOST_VARIANT} "
2653
+ ICU_LIBDIR_STATIC_ARCH=" $( build_directory ${host} swift) /lib/swift_static/${SWIFT_HOST_VARIANT} /${SWIFT_HOST_VARIANT_ARCH} "
2654
+ # Add in the ICU renaming config into uconfig.h
2655
+ call sed -e " /^#define __UCONFIG_H__/ r ${LIBICU_BUILD_DIR} /uconfig.h.prepend" -i ${ICU_TMPINSTALL} /include/unicode/uconfig.h
2656
+
2657
+ if [ $( true_false " ${BUILD_SWIFT_STATIC_STDLIB} " ) == " TRUE" ]; then
2658
+ # Copy the static libs into the swift_static directory
2659
+ call mkdir -p " ${ICU_LIBDIR_STATIC_ARCH} "
2660
+ for l in uc i18n data
2661
+ do
2662
+ lib=" ${ICU_LIBDIR} /libicu${l} swift.a"
2663
+ call cp " ${lib} " " ${ICU_LIBDIR_STATIC} "
2664
+ call cp " ${lib} " " ${ICU_LIBDIR_STATIC_ARCH} "
2665
+ done
2666
+ fi
2667
+
2668
+ # libicu builds itself and doesn't use cmake
2669
+ continue
2576
2670
;;
2577
2671
* )
2578
2672
echo " error: unknown product: ${product} "
@@ -2853,6 +2947,17 @@ for host in "${ALL_HOSTS[@]}"; do
2853
2947
# libdispatch_static
2854
2948
continue
2855
2949
;;
2950
+ libicu)
2951
+ if [[ " ${SKIP_TEST_LIBICU} " ]]; then
2952
+ continue
2953
+ fi
2954
+ LIBICU_BUILD_DIR=$( build_directory ${host} ${product} )
2955
+ echo " --- Running tests for ${product} ---"
2956
+ with_pushd " ${LIBICU_BUILD_DIR} /test" \
2957
+ call make -j ${BUILD_JOBS}
2958
+ echo " --- Finished tests for ${product} ---"
2959
+ continue
2960
+ ;;
2856
2961
* )
2857
2962
echo " error: unknown product: ${product} "
2858
2963
exit 1
@@ -3031,6 +3136,42 @@ for host in "${ALL_HOSTS[@]}"; do
3031
3136
;;
3032
3137
esac
3033
3138
;;
3139
+ libicu)
3140
+ if [[ -z " ${INSTALL_LIBICU} " ]]; then
3141
+ continue
3142
+ fi
3143
+ echo " --- Installing ${product} ---"
3144
+ ICU_BUILD_DIR=$( build_directory ${host} ${product} )
3145
+ ICU_INSTALL_DIR=" $( get_host_install_destdir ${host} ) $( get_host_install_prefix ${host} ) "
3146
+ ICU_LIBDIR=" $( build_directory ${host} swift) /lib/swift/${SWIFT_HOST_VARIANT} /${SWIFT_HOST_VARIANT_ARCH} "
3147
+ LIBICU_DEST_DIR=" ${ICU_INSTALL_DIR} lib/swift/${SWIFT_HOST_VARIANT} "
3148
+ call mkdir -p ${LIBICU_DEST_DIR}
3149
+
3150
+ for l in uc i18n data
3151
+ do
3152
+ lib=${ICU_LIBDIR} /libicu${l} swift
3153
+ echo " ${lib} => ${LIBICU_DEST_DIR} "
3154
+ call cp -d ${lib} .so ${lib} .so.* ${LIBICU_DEST_DIR}
3155
+ done
3156
+
3157
+ if [ $( true_false " ${BUILD_SWIFT_STATIC_STDLIB} " ) == " TRUE" ]; then
3158
+ LIBICU_DEST_DIR_STATIC=" ${ICU_INSTALL_DIR} lib/swift_static/${SWIFT_HOST_VARIANT} "
3159
+ call mkdir -p ${LIBICU_DEST_DIR_STATIC}
3160
+ for l in uc i18n data
3161
+ do
3162
+ lib=${ICU_LIBDIR} /libicu${l} swift
3163
+ echo " ${lib} => ${LIBICU_DEST_DIR_STATIC} "
3164
+ call cp -d ${lib} .a ${LIBICU_DEST_DIR_STATIC}
3165
+ done
3166
+ fi
3167
+
3168
+ ICU_TMP_INSTALL_DIR=" ${ICU_BUILD_DIR} /tmp_install"
3169
+ call mkdir -p " ${ICU_INSTALL_DIR} include"
3170
+ call cp -a " ${ICU_TMP_INSTALL_DIR} /include/unicode" " ${ICU_INSTALL_DIR} include"
3171
+ call mkdir -p " ${ICU_INSTALL_DIR} share/icuswift"
3172
+ call cp -a " ${ICU_TMP_INSTALL_DIR} /share/icuswift" " ${ICU_INSTALL_DIR} share"
3173
+ continue
3174
+ ;;
3034
3175
* )
3035
3176
echo " error: unknown product: ${product} "
3036
3177
exit 1
0 commit comments