Skip to content

Commit 7af28e8

Browse files
authored
Merge pull request #19860 from spevans/pr_sr_8876
SR-8876: Always build libicu on Linux
2 parents 3dfedf0 + 6188980 commit 7af28e8

File tree

7 files changed

+141
-38
lines changed

7 files changed

+141
-38
lines changed

lib/Driver/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ if(SWIFT_BUILD_STATIC_STDLIB)
2828
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
2929
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
3030
string(TOLOWER "${sdk}" lowercase_sdk)
31-
if(SWIFT_LINUX_ICU_STATICLIB)
31+
if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB)
3232
set(ICU_STATICLIB "TRUE")
3333
else()
3434
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: 85 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,6 +2550,20 @@ for host in "${ALL_HOSTS[@]}"; do
25502550
continue
25512551
fi
25522552

2553+
if [[ ! "${SKIP_BUILD_LIBICU}" ]] ; then
2554+
ICU_ROOT=$(build_directory ${host} libicu)/tmp_install
2555+
LIBICU_BUILD_ARGS=(
2556+
-DICU_ROOT:PATH=${ICU_ROOT}
2557+
-DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include
2558+
-DICU_UC_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicuucswift.so
2559+
-DICU_UC_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicuucswift.so
2560+
-DICU_I18N_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so
2561+
-DICU_I18N_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so
2562+
)
2563+
else
2564+
LIBICU_BUILD_ARGS=()
2565+
fi
2566+
25532567
# Staging: require opt-in for building with dispatch
25542568
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
25552569
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
@@ -2574,6 +2588,7 @@ for host in "${ALL_HOSTS[@]}"; do
25742588
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
25752589
-DCMAKE_INSTALL_PREFIX:PATH=$(get_host_install_prefix ${host})
25762590

2591+
${LIBICU_BUILD_ARGS[@]}
25772592
${LIBDISPATCH_BUILD_ARGS[@]}
25782593

25792594
# NOTE(compnerd) we disable tests because XCTest is not ready
@@ -2658,47 +2673,62 @@ for host in "${ALL_HOSTS[@]}"; do
26582673
ICU_TMPLIBDIR="${SWIFT_BUILD_PATH}/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
26592674
if [[ "${RECONFIGURE}" || ! -f "${LIBICU_BUILD_DIR}"/config.status ]]; then
26602675
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"
2676+
if [[ "$LIBICU_BUILD_TYPE" != "Release" ]] ; then
2677+
libicu_enable_debug="--enable-debug"
26652678
else
2666-
icu_build_variant_arg="--enable-debug"
2679+
libicu_enable_debug=""
26672680
fi
26682681
call mkdir -p "${LIBICU_BUILD_DIR}"
2682+
2683+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
2684+
libicu_enable_static="--enable-static"
2685+
else
2686+
libicu_enable_static=""
2687+
fi
2688+
26692689
with_pushd "${LIBICU_BUILD_DIR}" \
2670-
call "${LIBICU_SOURCE_DIR}"/source/configure \
2690+
call env CXXFLAGS=-fPIC "${LIBICU_SOURCE_DIR}"/icu4c/source/runConfigureICU Linux \
26712691
${icu_build_variant_arg} --prefix=${ICU_TMPINSTALL} \
2692+
${libicu_enable_debug} \
2693+
--enable-renaming --with-library-suffix=swift \
26722694
--libdir=${ICU_TMPLIBDIR} \
26732695
--enable-shared --enable-static \
26742696
--enable-strict --disable-icuio \
26752697
--disable-plugins --disable-dyload --disable-extras \
2676-
--disable-samples --with-data-packaging=auto
2698+
--disable-samples --disable-layoutex --with-data-packaging=auto
26772699
else
26782700
echo "Skipping reconfiguration of libicu"
26792701
fi
26802702
with_pushd "${LIBICU_BUILD_DIR}" \
2681-
call make install
2703+
call make -j ${BUILD_JOBS} install
26822704
ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}"
26832705
ICU_LIBDIR_STATIC="$(build_directory ${host} swift)/lib/swift_static/${SWIFT_HOST_VARIANT}"
26842706
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
2707+
# Add in the ICU renaming config into uconfig.h
2708+
sed -e "/^#define __UCONFIG_H__/ r ${LIBICU_BUILD_DIR}/uconfig.h.prepend" -i ${ICU_TMPINSTALL}/include/unicode/uconfig.h
2709+
2710+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
2711+
# Copy the static libs into the swift_static directory
2712+
mkdir -p "${ICU_LIBDIR_STATIC_ARCH}"
2713+
for l in uc i18n data
2714+
do
2715+
lib="${ICU_LIBDIR}/libicu${l}swift.a"
2716+
cp "${lib}" "${ICU_LIBDIR_STATIC}"
2717+
cp "${lib}" "${ICU_LIBDIR_STATIC_ARCH}"
2718+
done
2719+
fi
26932720

26942721
# Set the PKG_CONFIG_PATH so that core-foundation can find the libraries and
26952722
# header files
2696-
export PKG_CONFIG_PATH="${ICU_TMPLIBDIR}/pkgconfig:${PKG_CONFIG_PATH}"
2723+
export PKG_CONFIG_PATH="${LIBICU_BUILD_DIR}/config:${PKG_CONFIG_PATH}"
2724+
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${LIBICU_BUILD_DIR}/lib"
26972725
swift_cmake_options=(
26982726
"${swift_cmake_options[@]}"
26992727
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_UC_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
27002728
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_I18N_INCLUDE:STRING="${ICU_TMPINSTALL}/include"
27012729
-DSWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB:BOOL=TRUE
2730+
-DICU_UC_LIBDIR:PATH="${LIBICU_BUILD_DIR}/lib"
2731+
-DICU_I18N_LIBDIR:PATH="${LIBICU_BUILD_DIR}/lib"
27022732
)
27032733
# libicu builds itself and doesn't use cmake
27042734
continue
@@ -3110,6 +3140,20 @@ for host in "${ALL_HOSTS[@]}"; do
31103140
continue
31113141
fi
31123142

3143+
if [[ ! "${SKIP_BUILD_LIBICU}" ]] ; then
3144+
ICU_ROOT=$(build_directory ${host} libicu)/tmp_install
3145+
LIBICU_BUILD_ARGS=(
3146+
-DICU_ROOT:PATH=${ICU_ROOT}
3147+
-DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include
3148+
-DICU_UC_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicuucswift.so
3149+
-DICU_UC_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicuucswift.so
3150+
-DICU_I18N_LIBRARIES:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so
3151+
-DICU_I18N_LIBRARY:FILEPATH=${ICU_LIBDIR}/libicui18nswift.so
3152+
)
3153+
else
3154+
LIBICU_BUILD_ARGS=()
3155+
fi
3156+
31133157
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
31143158
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
31153159
LIBDISPATCH_BUILD_ARGS=(
@@ -3128,6 +3172,7 @@ for host in "${ALL_HOSTS[@]}"; do
31283172
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
31293173
-DCMAKE_INSTALL_PREFIX:PATH=$(get_host_install_prefix ${host})
31303174

3175+
${LIBICU_BUILD_ARGS[@]}
31313176
${LIBDISPATCH_BUILD_ARGS[@]}
31323177

31333178
# NOTE(compnerd) the time has come to enable tests now
@@ -3169,7 +3214,7 @@ for host in "${ALL_HOSTS[@]}"; do
31693214
LIBICU_BUILD_DIR=$(build_directory ${host} ${product})
31703215
echo "--- Running tests for ${product} ---"
31713216
with_pushd "${LIBICU_BUILD_DIR}/test" \
3172-
call make
3217+
call make -j ${BUILD_JOBS}
31733218
echo "--- Finished tests for ${product} ---"
31743219
continue
31753220
;;
@@ -3411,21 +3456,35 @@ for host in "${ALL_HOSTS[@]}"; do
34113456
exit 1
34123457
fi
34133458
echo "--- Installing ${product} ---"
3414-
LIBICU_BUILD_DIR=$(build_directory ${host} ${product})
3459+
ICU_BUILD_DIR=$(build_directory ${host} ${product})
3460+
ICU_INSTALL_DIR="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})"
34153461
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}"
3462+
LIBICU_DEST_DIR="${ICU_INSTALL_DIR}lib/swift/${SWIFT_HOST_VARIANT}"
34183463
mkdir -p ${LIBICU_DEST_DIR}
3419-
mkdir -p ${LIBICU_DEST_DIR_STATIC}
3464+
34203465
for l in uc i18n data
34213466
do
3422-
lib=${ICU_LIBDIR}/libicu${l}
3467+
lib=${ICU_LIBDIR}/libicu${l}swift
34233468
echo "${lib} => ${LIBICU_DEST_DIR}"
34243469
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}
34283470
done
3471+
3472+
if [ $(true_false "${BUILD_SWIFT_STATIC_STDLIB}") == "TRUE" ]; then
3473+
LIBICU_DEST_DIR_STATIC="${ICU_INSTALL_DIR}lib/swift_static/${SWIFT_HOST_VARIANT}"
3474+
mkdir -p ${LIBICU_DEST_DIR_STATIC}
3475+
for l in uc i18n data
3476+
do
3477+
lib=${ICU_LIBDIR}/libicu${l}swift
3478+
echo "${lib} => ${LIBICU_DEST_DIR_STATIC}"
3479+
cp -d ${lib}.a ${LIBICU_DEST_DIR_STATIC}
3480+
done
3481+
fi
3482+
3483+
ICU_TMP_INSTALL_DIR="${ICU_BUILD_DIR}/tmp_install"
3484+
mkdir -p "${ICU_INSTALL_DIR}include"
3485+
cp -a "${ICU_TMP_INSTALL_DIR}/include/unicode" "${ICU_INSTALL_DIR}include"
3486+
mkdir -p "${ICU_INSTALL_DIR}share/icuswift"
3487+
cp -a "${ICU_TMP_INSTALL_DIR}/share/icuswift" "${ICU_INSTALL_DIR}share"
34293488
continue
34303489
;;
34313490
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: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@
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" },
37+
"platforms": [ "Linux" ]
38+
}
3539
},
3640
"default-branch-scheme": "master",
3741
"branch-schemes": {
@@ -52,7 +56,8 @@
5256
"swift-corelibs-libdispatch": "master",
5357
"swift-integration-tests": "master",
5458
"swift-xcode-playground-support": "master",
55-
"ninja": "release"
59+
"ninja": "release",
60+
"icu": "release-61-1"
5661
}
5762
},
5863
"next" : {
@@ -74,7 +79,8 @@
7479
"swift-corelibs-libdispatch": "master",
7580
"swift-integration-tests": "master",
7681
"swift-xcode-playground-support": "master",
77-
"ninja": "release"
82+
"ninja": "release",
83+
"icu": "release-61-1"
7884
}
7985
},
8086
"swift-3.0-branch" : {
@@ -194,7 +200,8 @@
194200
"swift-corelibs-libdispatch": "master",
195201
"swift-integration-tests": "master",
196202
"swift-xcode-playground-support": "master",
197-
"ninja": "release"
203+
"ninja": "release",
204+
"icu": "release-61-1"
198205
}
199206
}
200207
}

utils/update_checkout/update_checkout/update_checkout.py

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import argparse
1414
import json
1515
import os
16+
import platform
1617
import re
1718
import sys
1819
import traceback
@@ -131,8 +132,8 @@ def update_single_repository(args):
131132
# If we were asked to reset to the specified branch, do the hard
132133
# reset and return.
133134
if checkout_target and reset_to_remote and not cross_repo:
134-
shell.run(['git', 'reset', '--hard',
135-
"origin/%s" % checkout_target], echo=True)
135+
full_target = full_target_name('origin', checkout_target)
136+
shell.run(['git', 'reset', '--hard', full_target], echo=True)
136137
return
137138

138139
# Query whether we have a "detached HEAD", which will mean that
@@ -371,6 +372,37 @@ def validate_config(config):
371372
'aliases?!')
372373

373374

375+
def full_target_name(repository, target):
376+
tag = shell.capture(["git", "tag", "-l", target], echo=True).strip()
377+
if tag == target:
378+
return tag
379+
380+
branch = shell.capture(["git", "branch", "--list", target],
381+
echo=True).strip().replace("* ", "")
382+
if branch == target:
383+
name = "%s/%s" % (repository, target)
384+
return name
385+
386+
raise RuntimeError('Cannot determine if %s is a branch or a tag' % target)
387+
388+
389+
def skip_list_for_platform(config):
390+
# If there is a platforms key only include the repo if the
391+
# plaform is in the list
392+
skip_list = []
393+
platform_name = platform.system()
394+
395+
for repo_name, repo_info in config['repos'].items():
396+
if 'platforms' in repo_info:
397+
if platform_name not in repo_info['platforms']:
398+
print("Skipping", repo_name, "on", platform_name)
399+
skip_list.append(repo_name)
400+
else:
401+
print("Including", repo_name, "on", platform_name)
402+
403+
return skip_list
404+
405+
374406
def main():
375407
freeze_support()
376408
parser = argparse.ArgumentParser(
@@ -494,7 +526,8 @@ def main():
494526
if scheme is None:
495527
scheme = config['default-branch-scheme']
496528

497-
skip_repo_list = args.skip_repository_list
529+
skip_repo_list = skip_list_for_platform(config)
530+
skip_repo_list.extend(args.skip_repository_list)
498531
clone_results = obtain_all_additional_swift_sources(args, config,
499532
clone_with_ssh,
500533
scheme,

0 commit comments

Comments
 (0)