From e09d23c2157be2eeb4e96fd10d8ab46348ec1f4a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 2 Aug 2017 00:07:31 +0200 Subject: [PATCH 1/3] Currently the only clang available on termux compiles for termux. This patc allows clang to be used in cross-compilations. E.g. to compile 32-bit binaries on 64-bit termux. --- packages/libllvm/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libllvm/build.sh b/packages/libllvm/build.sh index 958642b9c772714..8c9086c7a26c541 100644 --- a/packages/libllvm/build.sh +++ b/packages/libllvm/build.sh @@ -86,7 +86,7 @@ termux_step_pre_configure () { fi # see CMakeLists.txt and tools/clang/CMakeLists.txt TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_DEFAULT_TARGET_TRIPLE=$LLVM_DEFAULT_TARGET_TRIPLE" - TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGET_ARCH=$LLVM_TARGET_ARCH -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGET_ARCH" + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGET_ARCH=$LLVM_TARGET_ARCH -DLLVM_TARGETS_TO_BUILD=all" } termux_step_post_make_install () { From 613737cee9bacc2a456b42ab6eabd4346a341c22 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Thu, 10 Aug 2017 11:19:40 +0200 Subject: [PATCH 2/3] Add LLD package. LLD is LLVM-based multi-platform linker. Together with cross-compiling clang it can be used to create binaries for other platforms. --- packages/libllvm/build.sh | 9 +++++++++ packages/libllvm/lld.subpackage.sh | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 packages/libllvm/lld.subpackage.sh diff --git a/packages/libllvm/build.sh b/packages/libllvm/build.sh index 8c9086c7a26c541..bd2671db6928807 100644 --- a/packages/libllvm/build.sh +++ b/packages/libllvm/build.sh @@ -57,6 +57,15 @@ termux_step_post_extract_package () { tar -xf $TERMUX_PKG_CACHEDIR/$CLANG_SRC_TAR -C tools mv tools/cfe-${TERMUX_PKG_VERSION}.src tools/clang + + local LLD_SRC_TAR=lld-${TERMUX_PKG_VERSION}.src.tar.xz + termux_download \ + http://llvm.org/releases/${TERMUX_PKG_VERSION}/$LLD_SRC_TAR \ + $TERMUX_PKG_CACHEDIR/$LLD_SRC_TAR \ + 399a7920a5278d42c46a7bf7e4191820ec2301457a7d0d4fcc9a4ac05dd53897 + + tar -xf $TERMUX_PKG_CACHEDIR/$LLD_SRC_TAR -C tools + mv tools/lld-${TERMUX_PKG_VERSION}.src tools/lld } termux_step_host_build () { diff --git a/packages/libllvm/lld.subpackage.sh b/packages/libllvm/lld.subpackage.sh new file mode 100644 index 000000000000000..b1ffa7d85b3403f --- /dev/null +++ b/packages/libllvm/lld.subpackage.sh @@ -0,0 +1,16 @@ +TERMUX_SUBPKG_INCLUDE=" +include/lld/ +lib/liblldConfig.a +lib/liblldCore.a +lib/liblldDriver.a +lib/liblldReaderWriter.a +lib/liblldMachO.a +lib/liblldYAML.a +bin/lld +bin/lld-link +bin/ld.lld +lib/liblldCOFF.a +lib/liblldELF.a +" +TERMUX_SUBPKG_DESCRIPTION="LD replace based on LLVM" +TERMUX_SUBPKG_DEPENDS="libllvm" From 81fb886145a57f0d386c39a00fa24980396f8234 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sat, 26 Aug 2017 22:56:25 +0200 Subject: [PATCH 3/3] ndk-multilib: Supply crt* files for all platforms. It allows compiling binaries for another android variant on termux. E.g. to compile for arm on aarch64 do: clang -m32 -o 1 1.c -fuse-ld=lld -L/system/lib -B$PREFIX/arm-linux-androideabi/lib Hopefully with the time -L and -B will be eliminated --- packages/ndk-multilib/build.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/ndk-multilib/build.sh diff --git a/packages/ndk-multilib/build.sh b/packages/ndk-multilib/build.sh new file mode 100644 index 000000000000000..19b782f75abde0b --- /dev/null +++ b/packages/ndk-multilib/build.sh @@ -0,0 +1,34 @@ +TERMUX_PKG_HOMEPAGE=https://developer.android.com/tools/sdk/ndk/index.html +TERMUX_SUBPKG_DESCRIPTION="multilib binaries for cross-compilation" +TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION +TERMUX_PKG_NO_DEVELSPLIT=yes +TERMUX_PKG_KEEP_STATIC_LIBRARIES="true" +TERMUX_PKG_PLATFORM_INDEPENDENT=true + +prepare_libs () { + local ARCH="$1" + local SUFFIX="$2" + local NDK_SUFFIX=$SUFFIX + + if [ $ARCH = x86 ] || [ $ARCH = x86_64 ]; then + NDK_SUFFIX=$ARCH + fi + + mkdir -p $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX/$SUFFIX/lib + local BASEDIR=$NDK/platforms/android-${TERMUX_PKG_API_LEVEL}/arch-$ARCH/usr/lib + if [ $ARCH = x86_64 ] || [ $ARCH = mips64 ]; then BASEDIR+="64"; fi + cp $BASEDIR/*.o $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX/$SUFFIX/lib + + LIBATOMIC=$NDK/toolchains/${NDK_SUFFIX}-*/prebuilt/linux-*/${SUFFIX}/lib + if [ $ARCH = arm64 ]; then LIBATOMIC+="64"; fi + cp $LIBATOMIC/libatomic.a $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX/$SUFFIX/lib/libatomic.a +} + +termux_step_extract_into_massagedir () { + prepare_libs "arm" "arm-linux-androideabi" + prepare_libs "arm64" "aarch64-linux-android" + prepare_libs "x86" "i686-linux-android" + prepare_libs "x86_64" "x86_64-linux-android" + prepare_libs "mips" "mipsel-linux-android" + prepare_libs "mips64" "mips64el-linux-android" +}