diff --git a/scripts/icu/58.1-brkitr/.travis.yml b/scripts/icu/58.1-brkitr/.travis.yml new file mode 100644 index 000000000..370fbba2b --- /dev/null +++ b/scripts/icu/58.1-brkitr/.travis.yml @@ -0,0 +1,41 @@ +language: generic + +matrix: + include: + - os: osx + compiler: clang + sudo: false + - os: osx + env: MASON_PLATFORM=ios + compiler: clang + - os: linux + env: MASON_PLATFORM_VERSION=cortex_a9 + - os: linux + env: MASON_PLATFORM_VERSION=i686 + - os: linux + compiler: clang + sudo: false + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - libstdc++-5-dev + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v5 + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7 + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v8 + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=x86 + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=x86-64 + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=mips + - os: osx + env: MASON_PLATFORM=android MASON_ANDROID_ABI=mips-64 + +script: +- ./mason build ${MASON_NAME} ${MASON_VERSION} +- ./mason publish ${MASON_NAME} ${MASON_VERSION} diff --git a/scripts/icu/58.1-brkitr/script.sh b/scripts/icu/58.1-brkitr/script.sh new file mode 100755 index 000000000..745e3aa8c --- /dev/null +++ b/scripts/icu/58.1-brkitr/script.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash + +# Build ICU common package (libicuuc.a) with data file separate and with support for legacy conversion and break iteration turned off in order to minimize size + +MASON_NAME=icu +MASON_VERSION=58.1-brkitr +MASON_LIB_FILE=lib/libicuuc.a +#MASON_PKGCONFIG_FILE=lib/pkgconfig/icu-uc.pc + +. ${MASON_DIR}/mason.sh + +MASON_BUILD_DEBUG=0 # Enable to build library with debug symbols +MASON_CROSS_BUILD=0 + +function mason_load_source { + mason_download \ + http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz \ + ad6995ba349ed79dde0f25d125a9b0bb56979420 + + mason_extract_tar_gz + + export MASON_BUILD_PATH=${MASON_ROOT}/.build/${MASON_NAME} +} + +function mason_prepare_compile { + if [[ ${MASON_PLATFORM} == 'ios' || ${MASON_PLATFORM} == 'android' || ${MASON_PLATFORM_VERSION} != `uname -m` ]]; then + mason_substep "Cross-compiling ICU. Starting with host build of ICU to generate tools." + + pushd ${MASON_ROOT}/.. + env -i HOME="$HOME" PATH="$PATH" USER="$USER" ${MASON_DIR}/mason build icu ${MASON_VERSION} + popd + + # TODO: Copies a bunch of files to a kind of orphaned place, do we need to do something to clean up after the build? + # Copying the whole build directory is the easiest way to do a cross build, but we could limit this to a small subset of files (icucross.mk, the tools directory, probably a few others...) + # Also instead of using the regular build steps, we could use a dedicated built target that just builds the tools + mason_substep "Moving host ICU build directory to ${MASON_ROOT}/.build/icu-host" + rm -rf ${MASON_ROOT}/.build/icu-host + cp -R ${MASON_BUILD_PATH}/source ${MASON_ROOT}/.build/icu-host + fi +} + +function mason_compile { + if [[ ${MASON_PLATFORM} == 'ios' || ${MASON_PLATFORM} == 'android' || ${MASON_PLATFORM_VERSION} != `uname -m` ]]; then + MASON_CROSS_BUILD=1 + fi + mason_compile_base +} + +function mason_compile_base { + pushd ${MASON_BUILD_PATH}/source + + # Using uint_least16_t instead of char16_t because Android Clang doesn't recognize char16_t + # I'm being shady and telling users of the library to use char16_t, so there's an implicit raw cast + ICU_CORE_CPP_FLAGS="-DU_CHARSET_IS_UTF8=1 -DU_CHAR_TYPE=uint_least16_t" + ICU_MODULE_CPP_FLAGS="${ICU_CORE_CPP_FLAGS} -DUCONFIG_NO_LEGACY_CONVERSION=1" # -DUCONFIG_NO_BREAK_ITERATION=1" + + CPPFLAGS="${CPPFLAGS:-} ${ICU_CORE_CPP_FLAGS} ${ICU_MODULE_CPP_FLAGS} -fvisibility=hidden $(icu_debug_cpp)" + #CXXFLAGS="--std=c++0x" + echo "Configuring with ${MASON_HOST_ARG}" + + ./configure ${MASON_HOST_ARG} --prefix=${MASON_PREFIX} \ + $(icu_debug_configure) \ + $(cross_build_configure) \ + --with-data-packaging=archive \ + --enable-renaming \ + --enable-strict \ + --enable-static \ + --enable-draft \ + --disable-rpath \ + --disable-shared \ + --disable-tests \ + --disable-extras \ + --disable-tracing \ + --disable-layout \ + --disable-icuio \ + --disable-samples \ + --disable-dyload || cat config.log + + + # Must do make clean after configure to clear out object files left over from previous build on different architecture + make clean + make -j${MASON_CONCURRENCY} + make install + popd +} + +function icu_debug_cpp { + if [ ${MASON_BUILD_DEBUG} ]; then + echo "-glldb" + fi +} + +function icu_debug_configure { + if [ ${MASON_BUILD_DEBUG} == 1 ]; then + echo "--enable-debug --disable-release" + else + echo "--enable-release --disable-debug" + fi +} + +function cross_build_configure { + # Building tools is disabled in cross-build mode. Using the host-built version of the tools is the whole point of the --with-cross-build flag + if [ ${MASON_CROSS_BUILD} == 1 ]; then + echo "--with-cross-build=${MASON_ROOT}/.build/icu-host --disable-tools" + else + echo "--enable-tools" + fi +} + +function mason_cflags { + echo "-I${MASON_PREFIX}/include -DUCHAR_TYPE=char16_t" +} + +function mason_ldflags { + echo "" +} + +mason_run "$@"