termux-packages/packages/ldc/build.sh

204 lines
8.0 KiB
Bash
Raw Normal View History

LLVM_INSTALL_DIR=$TERMUX_PKG_BUILDDIR/llvm-install
2017-07-01 02:43:00 +02:00
TERMUX_PKG_HOMEPAGE=https://github.com/ldc-developers/ldc
TERMUX_PKG_DESCRIPTION="D programming language compiler, built with LLVM"
2019-01-21 13:53:58 +01:00
TERMUX_PKG_LICENSE="BSD 3-Clause"
TERMUX_PKG_VERSION=()
2020-06-17 01:48:49 +02:00
TERMUX_PKG_VERSION+=(1.22.0)
2020-04-24 12:59:35 +02:00
TERMUX_PKG_VERSION+=(10.0.0) # LLVM version
2020-06-17 01:48:49 +02:00
TERMUX_PKG_VERSION+=(2.092.1) # TOOLS version
TERMUX_PKG_VERSION+=(1.21.0) # DUB version
Copy LICENSE file for some licenses instead of using generic one (#5478) * termux-licenses: remove licenses that contain copyright information These licenses cannot be taken from the common termux-licenses package as the copyright information needs to be distributed with the package as well. 271 packages in the main repository needs to be rebuilt after this change. * termux_step_install_license: remove duplicated comment * Bump packages that has a license with copyright information We need to include this copyright information in the package so need to rebuild them now that termux_step_install_license has been modified. The affected licenses are: MIT, ISC, PythonPL, Openfont-1.1, ZLIB, Libpng, BSD, BSD 2-Clause, BSD 3-Clause. * zlib: extract license file from zlib.h * xorgproto: include all individual license files in package * libgcrypt: include LICENSE file in package It contains some copyright information so needs to be included in package * libcrypt: add a dummy BSD 2-Clause license According to homepage it is suppose to be BSD 2-Clause, but original project did not include a license file * libandroid-spawn: add LICENSE file to package * libandroid-glob: add license file to package * licenses: allow for comma separated TERMUX_PKG_LICENSE_FILE %ci:no-build * libicu: fix so that termux_step_install_license finds license file %ci:no-build * termux_step_install_license: check for license file as "License" %ci:no-build * libtiff: specify TERMUX_PKG_LICENSE_FILE %ci:no-build * asciidoctor: install license to standard location * krb5: specify license file * libdb: specify path to license file %ci:no-build * libprotobuf: specify path to license file * darkhttpd: extract license file from darkhttpd.c * w3m: ensure host libraries are not picked up * w3m: extract LICENSE file from dock/README * liblua{,52}: extract license files from doc/readme.html * termux_step_install_license: look for License.txt as well * dart: specify path to LICENSE file * nim: specify license file * runit: specify license file * termux_step_install_license: look for LICENSE.TXT as well * ossp-uuid: extract LICENSE from README * pigz: extract LICENSE from pigz.c * ttyrec: extract LICENSE from ttyrec.c %ci:no-build * bmon: specify license files Most of the source files are licensed under MIT, it is not clear (to me) which parts that are licensed under BSD 2-Clause. %ci:no-build * wordgrinder: specify license files * fdupes: add LICENSE * autossh: add LICENSE patch * cmake: specify LICENSE file * dos2unix: specify LICENSE file * gnuplot: specify LICENSE file * termux_step_install_license: look for variants of "copyright" also * picolisp: specify LICENSE file * lua-lpeg: extract license file * tidy: specify license file * gflags: specify LICENSE file * timewarrior: fix src url It seems to have been changed. * postgresql: specify license file * ttyrec: fix license patch header * fossil: specify license file * fmt: specify license file * i2pd: specify license file * leptonica: specify license file * imgflo: add license file patch * ired: add license file from ired github repo * libzen: specify license file * libmediainfo: specify license file * mediainfo: specify license file * tty-clock: add license patch * samefile: add license patch * quickjs: add license patch * docbook-xml: add LICENSE patch * docbook-xsl: specify LICENSE files * gnuplot: configure with --without-latex * timewarrior: add libshared to SRCURL as well The non-release archives does not contain gitsubmodules so we need to download it manually. * restic: switch back to using 0.9.6 archive * dart: revert revision bump dart's SDK does not fully support python3 yet, and trying to solve that is not entirely trivial. We save the dart bump (and upgrade to 2.8.4) for another day. %ci:no-build
2020-07-07 18:45:45 +02:00
TERMUX_PKG_REVISION=1
TERMUX_PKG_SRCURL=(https://github.com/ldc-developers/ldc/releases/download/v${TERMUX_PKG_VERSION}/ldc-${TERMUX_PKG_VERSION}-src.tar.gz
2019-12-21 13:25:50 +01:00
https://github.com/ldc-developers/llvm-project/releases/download/ldc-v${TERMUX_PKG_VERSION[1]}/llvm-${TERMUX_PKG_VERSION[1]}.src.tar.xz
https://github.com/dlang/tools/archive/v${TERMUX_PKG_VERSION[2]}.tar.gz
2020-06-17 01:48:49 +02:00
https://github.com/dlang/dub/archive/v${TERMUX_PKG_VERSION[3]}.tar.gz
https://github.com/ldc-developers/ldc/releases/download/v${TERMUX_PKG_VERSION}/ldc2-${TERMUX_PKG_VERSION}-linux-x86_64.tar.xz)
2020-06-17 01:48:49 +02:00
TERMUX_PKG_SHA256=(866becac61fb225b0d55847fb5f206ff042d6a3ff63b671a474aa8b6a93d8988
2020-04-24 12:59:35 +02:00
feceb954f61ce6d68069c2094e334772419f9bcb627a10202838a2b02d7e3e47
2020-06-17 01:48:49 +02:00
8db4d21c6348fc25143d532e56f345198a384cce85c08979aca2476211e15113
320d96453b4a9a36a2d8716307cebe44f53638e06f425a7cc0d7d4dc9379bbe7
907404cfd78fdf036555829f29b2176decc16dfef43a9d360a758e585435e0fe)
2019-06-20 20:30:12 +02:00
TERMUX_PKG_DEPENDS="clang, libc++, zlib"
TERMUX_PKG_NO_STATICSPLIT=true
2017-07-01 02:43:00 +02:00
TERMUX_PKG_HOSTBUILD=true
TERMUX_PKG_FORCE_CMAKE=true
2017-07-01 02:43:00 +02:00
#These CMake args are only used to configure a patched LLVM
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
2019-09-29 22:41:21 +02:00
-DLLVM_ENABLE_PLUGINS=OFF
2017-07-01 02:43:00 +02:00
-DLLVM_BUILD_TOOLS=OFF
-DLLVM_BUILD_UTILS=OFF
-DCOMPILER_RT_INCLUDE_TESTS=OFF
2019-09-29 22:41:21 +02:00
-DLLVM_INCLUDE_TESTS=OFF
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_LIBEDIT=OFF
-DLLVM_TABLEGEN=$TERMUX_PKG_HOSTBUILD_DIR/bin/llvm-tblgen
2019-09-29 22:41:21 +02:00
-DLLVM_CONFIG_PATH=$TERMUX_PKG_HOSTBUILD_DIR/bin/llvm-config
2019-02-12 09:41:30 +01:00
-DPYTHON_EXECUTABLE=$(which python3)
2019-09-29 22:41:21 +02:00
-DLLVM_TARGETS_TO_BUILD='AArch64;ARM;WebAssembly;X86'
-DCMAKE_INSTALL_PREFIX=$LLVM_INSTALL_DIR
"
2017-07-01 02:43:00 +02:00
termux_step_post_extract_package() {
# Certain packages are not safe to build on device because their
# build.sh script deletes specific files in $TERMUX_PREFIX.
if $TERMUX_ON_DEVICE_BUILD; then
termux_error_exit "Package '$TERMUX_PKG_NAME' is not safe for on-device builds."
fi
mv llvm-${TERMUX_PKG_VERSION[1]}.src llvm
mv tools-${TERMUX_PKG_VERSION[2]} dlang-tools
mv dub-${TERMUX_PKG_VERSION[3]} dub
2017-07-01 02:43:00 +02:00
2020-04-24 12:59:35 +02:00
# Exclude MLIR
rm -Rf llvm/projects/mlir
2019-09-13 02:09:36 +02:00
LLVM_TRIPLE=${TERMUX_HOST_PLATFORM/-/--}
if [ $TERMUX_ARCH = arm ]; then LLVM_TRIPLE=${LLVM_TRIPLE/arm-/armv7a-}; fi
2017-07-01 02:43:00 +02:00
}
termux_step_host_build() {
2017-07-01 02:43:00 +02:00
termux_setup_cmake
2017-10-31 19:10:15 +01:00
termux_setup_ninja
# Build native llvm-tblgen, a prerequisite for cross-compiling LLVM
2017-10-31 19:10:15 +01:00
cmake -GNinja $TERMUX_PKG_SRCDIR/llvm \
-DCMAKE_BUILD_TYPE=Release \
2017-07-01 02:43:00 +02:00
-DLLVM_BUILD_TOOLS=OFF \
2018-04-30 11:47:35 +02:00
-DLLVM_BUILD_UTILS=OFF \
2019-09-29 22:41:21 +02:00
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_TESTS=OFF
2018-03-05 15:00:00 +01:00
ninja -j $TERMUX_MAKE_PROCESSES llvm-tblgen
2017-07-01 02:43:00 +02:00
}
# Just before CMake invokation for LLVM:
termux_step_pre_configure() {
LDFLAGS=" -L$TERMUX_PKG_BUILDDIR/llvm/lib $LDFLAGS -lc++_shared"
2019-03-29 13:06:16 +01:00
2020-02-15 02:03:03 +01:00
# Don't build compiler-rt sanitizers:
# * 64-bit targets: libclang_rt.hwasan-*-android.so fails to link
# * 32-bit ARM: compile errors for interception library
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DCOMPILER_RT_BUILD_SANITIZERS=OFF"
local LLVM_TARGET_ARCH
if [ $TERMUX_ARCH = "arm" ]; then
LLVM_TARGET_ARCH=ARM
elif [ $TERMUX_ARCH = "aarch64" ]; then
LLVM_TARGET_ARCH=AArch64
elif [ $TERMUX_ARCH = "i686" ]; then
LLVM_TARGET_ARCH=X86
elif [ $TERMUX_ARCH = "x86_64" ]; then
LLVM_TARGET_ARCH=X86
else
termux_error_exit "Invalid arch: $TERMUX_ARCH"
fi
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${LLVM_TRIPLE}"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGET_ARCH=${LLVM_TARGET_ARCH}"
2017-07-01 02:43:00 +02:00
# CPPFLAGS adds the system llvm to the include path, which causes
# conflicts with the local patched llvm when compiling ldc
CPPFLAGS=""
OLD_TERMUX_PKG_SRCDIR=$TERMUX_PKG_SRCDIR
TERMUX_PKG_SRCDIR=$TERMUX_PKG_SRCDIR/llvm
OLD_TERMUX_PKG_BUILDDIR=$TERMUX_PKG_BUILDDIR
TERMUX_PKG_BUILDDIR=$TERMUX_PKG_BUILDDIR/llvm
mkdir "$TERMUX_PKG_BUILDDIR"
}
# CMake for LLVM has been run:
termux_step_post_configure() {
# Cross-compile & install LLVM
cd "$TERMUX_PKG_BUILDDIR"
if test -f build.ninja; then
ninja -j $TERMUX_MAKE_PROCESSES install
fi
# Invoke CMake for LDC:
2017-07-01 02:43:00 +02:00
TERMUX_PKG_SRCDIR=$OLD_TERMUX_PKG_SRCDIR
TERMUX_PKG_BUILDDIR=$OLD_TERMUX_PKG_BUILDDIR
cd "$TERMUX_PKG_BUILDDIR"
2019-09-29 22:41:21 +02:00
# Replace non-native llvm-config executable with bash script,
# as it is going to be invoked during LDC CMake config.
sed $TERMUX_PKG_SRCDIR/.azure-pipelines/android-llvm-config.in \
-e "s|@LLVM_VERSION@|${TERMUX_PKG_VERSION[1]}|g" \
-e "s|@LLVM_INSTALL_DIR@|$LLVM_INSTALL_DIR|g" \
-e "s|@TERMUX_PKG_SRCDIR@|$TERMUX_PKG_SRCDIR/llvm|g" \
-e "s|@LLVM_DEFAULT_TARGET_TRIPLE@|$LLVM_TRIPLE|g" \
-e "s|@LLVM_TARGETS@|AArch64 ARM X86 WebAssembly|g" > $LLVM_INSTALL_DIR/bin/llvm-config
chmod 755 $LLVM_INSTALL_DIR/bin/llvm-config
2019-09-13 02:09:36 +02:00
LDC_FLAGS="-mtriple=$LLVM_TRIPLE"
2019-09-13 02:09:36 +02:00
LDC_PATH=$TERMUX_PKG_SRCDIR/ldc2-$TERMUX_PKG_VERSION-linux-x86_64
DMD=$LDC_PATH/bin/ldmd2
TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" -DLLVM_ROOT_DIR=$LLVM_INSTALL_DIR \
2019-09-13 02:09:36 +02:00
-DD_COMPILER=$DMD \
-DCMAKE_INSTALL_PREFIX=$TERMUX_PREFIX \
2019-09-29 22:41:21 +02:00
-DLDC_WITH_LLD=OFF \
2020-06-17 01:48:49 +02:00
-DD_LINKER_ARGS='-fuse-ld=bfd;-Lldc-build-runtime.tmp/lib;-lphobos2-ldc;-ldruntime-ldc;-Wl,--gc-sections'"
2017-07-01 02:43:00 +02:00
termux_step_configure_cmake
}
termux_step_make() {
# Cross-compile the runtime libraries
$LDC_PATH/bin/ldc-build-runtime --ninja -j $TERMUX_MAKE_PROCESSES \
2020-04-24 12:59:35 +02:00
--dFlags="-fvisibility=hidden;$LDC_FLAGS" --cFlags="$CFLAGS -I$TERMUX_PREFIX/include" \
--targetSystem="Android;Linux;UNIX" --ldcSrcDir="$TERMUX_PKG_SRCDIR"
2019-09-13 02:09:36 +02:00
# Set up host ldmd2 for cross-compilation
export DFLAGS="${LDC_FLAGS//;/ }"
# Cross-compile LDC executables (linked against runtime libs above)
if test -f build.ninja; then
2019-10-17 00:22:33 +02:00
ninja -j $TERMUX_MAKE_PROCESSES ldc2 ldmd2 ldc-build-runtime ldc-profdata ldc-prune-cache
2017-07-01 02:43:00 +02:00
fi
2020-04-24 12:59:35 +02:00
echo ".: LDC built successfully."
# Cross-compile dlang tools and dub:
2020-04-24 12:59:35 +02:00
# Extend DFLAGS for cross-linking with host ldmd2
2020-06-17 01:48:49 +02:00
export DFLAGS="$DFLAGS -linker=bfd -L-L$TERMUX_PKG_BUILDDIR/ldc-build-runtime.tmp/lib"
if [ $TERMUX_ARCH = arm ]; then export DFLAGS="$DFLAGS -L--fix-cortex-a8"; fi
cd $TERMUX_PKG_SRCDIR/dlang-tools
2020-06-17 01:48:49 +02:00
$DMD -w -de -dip1000 rdmd.d -of=$TERMUX_PKG_BUILDDIR/bin/rdmd
$DMD -w -de -dip1000 ddemangle.d -of=$TERMUX_PKG_BUILDDIR/bin/ddemangle
$DMD -w -de -dip1000 DustMite/dustmite.d DustMite/splitter.d -of=$TERMUX_PKG_BUILDDIR/bin/dustmite
2020-04-24 12:59:35 +02:00
echo ".: dlang tools built successfully."
cd $TERMUX_PKG_SRCDIR/dub
2020-04-24 12:59:35 +02:00
# Note: cannot link a native build.d tool, so build manually:
$DMD -of=$TERMUX_PKG_BUILDDIR/bin/dub -Isource -version=DubUseCurl -version=DubApplication -O -w @build-files.txt
echo ".: dub built successfully."
2017-07-01 02:43:00 +02:00
}
termux_step_make_install() {
2019-10-17 00:22:33 +02:00
cp bin/{ddemangle,dub,dustmite,ldc-build-runtime,ldc-profdata,ldc-prune-cache,ldc2,ldmd2,rdmd} $TERMUX_PREFIX/bin
cp $TERMUX_PKG_BUILDDIR/ldc-build-runtime.tmp/lib/*.a $TERMUX_PREFIX/lib
sed "s|$TERMUX_PREFIX/|%%ldcbinarypath%%/../|g" bin/ldc2_install.conf > $TERMUX_PREFIX/etc/ldc2.conf
2020-06-17 01:48:49 +02:00
if [ $TERMUX_ARCH = aarch64 ]; then
# LDC defaults to `-linker=bfd` for Android, but Termux has no ld.bfd on AArch64 (where it's the default ld linker)
sed -i 's|"-link-defaultlib-shared=false",|"-link-defaultlib-shared=false", "-linker=",|' $TERMUX_PREFIX/etc/ldc2.conf
2020-04-24 12:59:35 +02:00
fi
cat $TERMUX_PREFIX/etc/ldc2.conf
2017-07-01 02:43:00 +02:00
rm -Rf $TERMUX_PREFIX/include/d
mkdir $TERMUX_PREFIX/include/d
cp -r $TERMUX_PKG_SRCDIR/runtime/druntime/src/{core,etc,ldc,object.d} $TERMUX_PREFIX/include/d
cp $LDC_PATH/import/ldc/gccbuiltins_{aarch64,arm,x86}.di $TERMUX_PREFIX/include/d/ldc
2017-07-01 02:43:00 +02:00
cp -r $TERMUX_PKG_SRCDIR/runtime/phobos/etc/c $TERMUX_PREFIX/include/d/etc
rm -Rf $TERMUX_PREFIX/include/d/etc/c/zlib
cp -r $TERMUX_PKG_SRCDIR/runtime/phobos/std $TERMUX_PREFIX/include/d
rm -Rf $TERMUX_PREFIX/share/ldc
mkdir $TERMUX_PREFIX/share/ldc
cp -r $TERMUX_PKG_SRCDIR/{LICENSE,README,packaging/bash_completion.d} $TERMUX_PREFIX/share/ldc
2017-07-01 02:43:00 +02:00
}