Skip to content

Commit 3b2ebee

Browse files
committed
SR-8876: Always build libicu on Linux
- Uses version 61.1 from ICU Github unicode-org/icu repository. - Updates mixin_linux_installation to add libicu option. - Use -j when building libicu. - When buiding ICU, use --with-library-suffix=swift This suffixes the ICU symbols with _swift. The libaries are now named libicuucswift, libicui18nswift and libicudataswift. - Add the contents of uconfig.h.prepend into uconfig.h. This avoids passing the renaming CFLAGS to swift and swift-corelibs-foundation. Also resolves: SR-5618: libicu compilation should happen in parallel respecting -j.
1 parent 4277292 commit 3b2ebee

File tree

6 files changed

+72
-35
lines changed

6 files changed

+72
-35
lines changed

lib/Driver/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ if(SWIFT_BUILD_STATIC_STDLIB)
2929
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
3030
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
3131
string(TOLOWER "${sdk}" lowercase_sdk)
32-
if(SWIFT_LINUX_ICU_STATICLIB)
32+
if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB)
3333
set(ICU_STATICLIB "TRUE")
3434
else()
3535
set(ICU_STATICLIB "FALSE")

stdlib/public/core/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ else()
231231
list(APPEND swift_core_private_link_libraries
232232
ICU_UC ICU_I18N)
233233
else()
234-
list(APPEND swift_core_private_link_libraries -licui18n -licuuc -licudata)
234+
list(APPEND swift_core_private_link_libraries -licui18nswift -licuucswift -licudataswift)
235235
endif()
236236
endif()
237237

utils/build-presets.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,8 @@ mixin-preset=mixin_lightweight_assertions
716716
llbuild
717717
swiftpm
718718
xctest
719+
libicu
720+
719721
dash-dash
720722

721723
build-ninja
@@ -724,6 +726,7 @@ install-lldb
724726
install-llbuild
725727
install-swiftpm
726728
install-xctest
729+
install-libicu
727730
install-prefix=/usr
728731
swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;swift-remote-mirror;sdk-overlay;license;sourcekit-inproc
729732
llvm-install-components=llvm-cov;llvm-profdata;IndexStore
@@ -941,6 +944,7 @@ reconfigure
941944
mixin-preset=buildbot_incremental_linux_base
942945
build-subdir=buildbot_incremental
943946

947+
libicu
944948
llbuild
945949
swiftpm
946950
xctest

utils/build-script-impl

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2658,47 +2658,62 @@ for host in "${ALL_HOSTS[@]}"; do
26582658
ICU_TMPLIBDIR="${SWIFT_BUILD_PATH}/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
26592659
if [[ "${RECONFIGURE}" || ! -f "${LIBICU_BUILD_DIR}"/config.status ]]; then
26602660
echo "Reconfiguring libicu"
2661-
if [[ "$LIBICU_BUILD_TYPE" == "Release" ]] ; then
2662-
icu_build_variant_arg="--enable-release"
2663-
elif [[ "$LIBICU_BUILD_TYPE" == "RelWithDebInfo" ]]; then
2664-
icu_build_variant_arg="--enable-release"
2661+
if [[ "$LIBICU_BUILD_TYPE" != "Release" ]] ; then
2662+
libicu_enable_debug="--enable-debug"
26652663
else
2666-
icu_build_variant_arg="--enable-debug"
2664+
libicu_enable_debug=""
26672665
fi
26682666
call mkdir -p "${LIBICU_BUILD_DIR}"
2667+
2668+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
2669+
libicu_enable_static="--enable-static"
2670+
else
2671+
libicu_enable_static=""
2672+
fi
2673+
26692674
with_pushd "${LIBICU_BUILD_DIR}" \
2670-
call "${LIBICU_SOURCE_DIR}"/source/configure \
2675+
call env CXXFLAGS=-fPIC "${LIBICU_SOURCE_DIR}"/icu4c/source/runConfigureICU Linux \
26712676
${icu_build_variant_arg} --prefix=${ICU_TMPINSTALL} \
2677+
${libicu_enable_debug} \
2678+
--enable-renaming --with-library-suffix=swift \
26722679
--libdir=${ICU_TMPLIBDIR} \
26732680
--enable-shared --enable-static \
26742681
--enable-strict --disable-icuio \
26752682
--disable-plugins --disable-dyload --disable-extras \
2676-
--disable-samples --with-data-packaging=auto
2683+
--disable-samples --disable-layoutex --with-data-packaging=auto
26772684
else
26782685
echo "Skipping reconfiguration of libicu"
26792686
fi
26802687
with_pushd "${LIBICU_BUILD_DIR}" \
2681-
call make install
2688+
call make -j ${BUILD_JOBS} install
26822689
ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
26832690
ICU_LIBDIR_STATIC="$(build_directory ${host} swift)/lib/swift_static/${SWIFT_HOST_VARIANT}"
26842691
ICU_LIBDIR_STATIC_ARCH="$(build_directory ${host} swift)/lib/swift_static/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
2685-
mkdir -p "${ICU_LIBDIR_STATIC_ARCH}"
2686-
# Copy the static libs into the swift_static directory
2687-
for l in uc i18n data
2688-
do
2689-
lib="${ICU_LIBDIR}/libicu${l}.a"
2690-
cp "${lib}" "${ICU_LIBDIR_STATIC}"
2691-
cp "${lib}" "${ICU_LIBDIR_STATIC_ARCH}"
2692-
done
2692+
# Add in the ICU renaming config into uconfig.h
2693+
sed -e "/^#define __UCONFIG_H__/ r ${LIBICU_BUILD_DIR}/uconfig.h.prepend" -i ${ICU_TMPINSTALL}/include/unicode/uconfig.h
2694+
2695+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
2696+
# Copy the static libs into the swift_static directory
2697+
mkdir -p "${ICU_LIBDIR_STATIC_ARCH}"
2698+
for l in uc i18n data
2699+
do
2700+
lib="${ICU_LIBDIR}/libicu${l}swift.a"
2701+
cp "${lib}" "${ICU_LIBDIR_STATIC}"
2702+
cp "${lib}" "${ICU_LIBDIR_STATIC_ARCH}"
2703+
done
2704+
fi
26932705

26942706
# Set the PKG_CONFIG_PATH so that core-foundation can find the libraries and
26952707
# header files
2696-
export PKG_CONFIG_PATH="${ICU_TMPLIBDIR}/pkgconfig:${PKG_CONFIG_PATH}"
2708+
export PKG_CONFIG_PATH="${LIBICU_BUILD_DIR}/config:${PKG_CONFIG_PATH}"
2709+
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${LIBICU_BUILD_DIR}/lib"
26972710
swift_cmake_options=(
26982711
"${swift_cmake_options[@]}"
26992712
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_UC_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
27002713
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_I18N_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
27012714
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB:BOOL=TRUE
2715+
-DICU_UC_LIBDIR:PATH="${LIBICU_BUILD_DIR}/lib"
2716+
-DICU_I18N_LIBDIR:PATH="${LIBICU_BUILD_DIR}/lib"
27022717
)
27032718
# libicu builds itself and doesn't use cmake
27042719
continue
@@ -3169,7 +3184,7 @@ for host in "${ALL_HOSTS[@]}"; do
31693184
LIBICU_BUILD_DIR=$(build_directory ${host} ${product})
31703185
echo "--- Running tests for ${product} ---"
31713186
with_pushd "${LIBICU_BUILD_DIR}/test" \
3172-
call make
3187+
call make -j ${BUILD_JOBS}
31733188
echo "--- Finished tests for ${product} ---"
31743189
continue
31753190
;;
@@ -3411,21 +3426,34 @@ for host in "${ALL_HOSTS[@]}"; do
34113426
exit 1
34123427
fi
34133428
echo "--- Installing ${product} ---"
3414-
LIBICU_BUILD_DIR=$(build_directory ${host} ${product})
3429+
ICU_BUILD_DIR=$(build_directory ${host} ${product})
3430+
ICU_INSTALL_DIR="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})"
34153431
ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
3416-
LIBICU_DEST_DIR="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})lib/swift/${SWIFT_HOST_VARIANT}"
3417-
LIBICU_DEST_DIR_STATIC="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})lib/swift_static/${SWIFT_HOST_VARIANT}"
3432+
LIBICU_DEST_DIR="${ICU_INSTALL_DIR}lib/swift/${SWIFT_HOST_VARIANT}"
34183433
mkdir -p ${LIBICU_DEST_DIR}
3419-
mkdir -p ${LIBICU_DEST_DIR_STATIC}
3434+
34203435
for l in uc i18n data
34213436
do
3422-
lib=${ICU_LIBDIR}/libicu${l}
3437+
lib=${ICU_LIBDIR}/libicu${l}swift
34233438
echo "${lib} => ${LIBICU_DEST_DIR}"
34243439
cp -d ${lib}.so ${lib}.so.* ${LIBICU_DEST_DIR}
3425-
cp -d ${lib}.so ${lib}.so.* ${LIBICU_DEST_DIR}
3426-
cp -d ${lib}.a ${LIBICU_DEST_DIR_STATIC}
3427-
cp -d ${lib}.a ${LIBICU_DEST_DIR_STATIC}
34283440
done
3441+
3442+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
3443+
LIBICU_DEST_DIR_STATIC="${ICU_INSTALL_DIR}lib/swift_static/${SWIFT_HOST_VARIANT}"
3444+
mkdir -p ${LIBICU_DEST_DIR_STATIC}
3445+
for l in uc i18n data
3446+
do
3447+
lib=${ICU_LIBDIR}/libicu${l}swift
3448+
echo "${lib} => ${LIBICU_DEST_DIR_STATIC}"
3449+
cp -d ${lib}.a ${LIBICU_DEST_DIR_STATIC}
3450+
done
3451+
fi
3452+
3453+
ICU_TMP_INSTALL_DIR="${ICU_BUILD_DIR}/tmp_install"
3454+
mkdir -p "${ICU_INSTALL_DIR}include"
3455+
cp -a "${ICU_TMP_INSTALL_DIR}/include/unicode" "${ICU_INSTALL_DIR}include"
3456+
34293457
continue
34303458
;;
34313459
playgroundsupport)

utils/gen-static-stdlib-link-args

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ EOF
4646
# If libicu was compiled as part of the swift build then link the libs as normal
4747
function use_local_iculibs {
4848
read -d '' ICU_LIBS <<EOF
49-
-licui18n
50-
-licuuc
51-
-licudata
49+
-licui18nswift
50+
-licuucswift
51+
-licudataswift
5252
EOF
5353
}
5454

utils/update_checkout/update-checkout-config.json

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
"swift-xcode-playground-support": {
3232
"remote": { "id": "apple/swift-xcode-playground-support" } },
3333
"ninja": {
34-
"remote": { "id": "ninja-build/ninja" } }
34+
"remote": { "id": "ninja-build/ninja" } },
35+
"icu": {
36+
"remote": { "id": "unicode-org/icu" } }
3537
},
3638
"default-branch-scheme": "master",
3739
"branch-schemes": {
@@ -52,7 +54,8 @@
5254
"swift-corelibs-libdispatch": "master",
5355
"swift-integration-tests": "master",
5456
"swift-xcode-playground-support": "master",
55-
"ninja": "release"
57+
"ninja": "release",
58+
"icu": "release-61-1"
5659
}
5760
},
5861
"next" : {
@@ -74,7 +77,8 @@
7477
"swift-corelibs-libdispatch": "master",
7578
"swift-integration-tests": "master",
7679
"swift-xcode-playground-support": "master",
77-
"ninja": "release"
80+
"ninja": "release",
81+
"icu": "release-61-1"
7882
}
7983
},
8084
"swift-3.0-branch" : {
@@ -194,7 +198,8 @@
194198
"swift-corelibs-libdispatch": "master",
195199
"swift-integration-tests": "master",
196200
"swift-xcode-playground-support": "master",
197-
"ninja": "release"
201+
"ninja": "release",
202+
"icu": "release-61-1"
198203
}
199204
}
200205
}

0 commit comments

Comments
 (0)