Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions scripts/icu/58.1-brkitr/.travis.yml
Original file line number Diff line number Diff line change
@@ -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}
118 changes: 118 additions & 0 deletions scripts/icu/58.1-brkitr/script.sh
Original file line number Diff line number Diff line change
@@ -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 "$@"