termux-packages/packages/openjdk-17/build.sh
2022-04-22 03:01:00 +09:00

140 lines
5.0 KiB
Bash

TERMUX_PKG_HOMEPAGE=https://github.com/PojavLauncherTeam/mobile
TERMUX_PKG_DESCRIPTION="Java development kit and runtime"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_MAINTAINER="@termux"
TERMUX_PKG_VERSION=17.0
TERMUX_PKG_REVISION=19
TERMUX_PKG_SRCURL=https://github.com/termux/openjdk-mobile-termux/archive/ec285598849a27f681ea6269342cf03cf382eb56.tar.gz
TERMUX_PKG_SHA256=d7c6ead9d80d0f60d98d0414e9dc87f5e18a304e420f5cd21f1aa3210c1a1528
TERMUX_PKG_DEPENDS="freetype, giflib, libandroid-shmem, libandroid-spawn, libiconv, zlib, xorgproto, libx11, libxcursor, libxext, cups, fontconfig, libjpeg-turbo, libpng, libxrender, libxtst, libxrandr, libxt, libxi"
TERMUX_PKG_BUILD_DEPENDS="cups, fontconfig, libpng, libx11, libxrender"
TERMUX_PKG_SUGGESTS="cups, fontconfig, libx11, libxrender"
TERMUX_PKG_BUILD_IN_SRC=true
TERMUX_PKG_HAS_DEBUG=false
termux_step_pre_configure() {
unset JAVA_HOME
# Provide fake gcc.
mkdir -p $TERMUX_PKG_SRCDIR/wrappers-bin
cat <<- EOF > $TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang
#!/bin/bash
name=\$(basename "\$0")
if [ "\$name" = "android-wrapped-clang" ]; then
name=gcc
compiler=$CC
else
name=g++
compiler=$CXX
fi
if [ "\$1" = "--version" ]; then
echo "${TERMUX_HOST_PLATFORM/arm/armv7a}-\${name} (GCC) 4.9 20140827 (prerelease)"
echo "Copyright (C) 2014 Free Software Foundation, Inc."
echo "This is free software; see the source for copying conditions. There is NO"
echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
exit 0
fi
exec \$compiler "\${@/-fno-var-tracking-assignments/}"
EOF
chmod +x $TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang
ln -sfr $TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang \
$TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang++
CC=$TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang
CXX=$TERMUX_PKG_SRCDIR/wrappers-bin/android-wrapped-clang++
cat <<- EOF > $TERMUX_STANDALONE_TOOLCHAIN/devkit.info
DEVKIT_NAME="Android"
DEVKIT_TOOLCHAIN_PATH="\$DEVKIT_ROOT"
DEVKIT_SYSROOT="\$DEVKIT_ROOT/sysroot"
EOF
# OpenJDK uses same makefile for host and target builds, so we can't
# easily patch usage of librt and libpthread. Using linker scripts
# instead.
echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/librt.so
echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/libpthread.so
}
termux_step_configure() {
local jdk_ldflags="-L${TERMUX_PREFIX}/lib -Wl,-rpath=$TERMUX_PREFIX/opt/openjdk/lib -Wl,--enable-new-dtags"
bash ./configure \
--openjdk-target=$TERMUX_HOST_PLATFORM \
--with-extra-cflags="$CFLAGS $CPPFLAGS -DLE_STANDALONE -DANDROID -D__TERMUX__=1" \
--with-extra-cxxflags="$CXXFLAGS $CPPFLAGS -DLE_STANDALONE -DANDROID -D__TERMUX__=1" \
--with-extra-ldflags="${jdk_ldflags} -landroid-shmem -landroid-spawn" \
--disable-precompiled-headers \
--disable-warnings-as-errors \
--enable-option-checking=fatal \
--with-toolchain-type=gcc \
--with-jvm-variants=server \
--with-devkit="$TERMUX_STANDALONE_TOOLCHAIN" \
--with-debug-level=release \
--with-cups-include="$TERMUX_PREFIX/include" \
--with-fontconfig-include="$TERMUX_PREFIX/include" \
--with-freetype-include="$TERMUX_PREFIX/include/freetype2" \
--with-freetype-lib="$TERMUX_PREFIX/lib" \
--with-giflib=system \
--with-libjpeg=system \
--with-libpng=system \
--with-zlib=system \
--x-includes="$TERMUX_PREFIX/include/X11" \
--x-libraries="$TERMUX_PREFIX/lib" \
--with-x="$TERMUX_PREFIX/include/X11" \
AR="$AR" \
NM="$NM" \
OBJCOPY="$OBJCOPY" \
OBJDUMP="$OBJDUMP" \
STRIP="$STRIP"
}
termux_step_make() {
cd build/linux-${TERMUX_ARCH/i686/x86}-server-release
make JOBS=1 images
# Delete created library stubs.
rm $TERMUX_PREFIX/lib/librt.so $TERMUX_PREFIX/lib/libpthread.so
}
termux_step_make_install() {
rm -rf $TERMUX_PREFIX/opt/openjdk
mkdir -p $TERMUX_PREFIX/opt/openjdk
cp -r build/linux-${TERMUX_ARCH/i686/x86}-server-release/images/jdk/* \
$TERMUX_PREFIX/opt/openjdk/
find $TERMUX_PREFIX/opt/openjdk -name "*.debuginfo" -delete
# OpenJDK is not installed into /prefix/bin.
local i
for i in $TERMUX_PREFIX/opt/openjdk/bin/*; do
if [ ! -f "$i" ]; then
continue
fi
ln -sfr "$i" "$TERMUX_PREFIX/bin/$(basename "$i")"
done
# Link manpages to location accessible by "man".
mkdir -p $TERMUX_PREFIX/share/man/man1
for i in $TERMUX_PREFIX/opt/openjdk/man/man1/*; do
if [ ! -f "$i" ]; then
continue
fi
gzip "$i"
ln -sfr "${i}.gz" "$TERMUX_PREFIX/share/man/man1/$(basename "$i").gz"
done
# Dependent projects may need JAVA_HOME.
mkdir -p $TERMUX_PREFIX/etc/profile.d
echo "export JAVA_HOME=$TERMUX_PREFIX/opt/openjdk" > \
$TERMUX_PREFIX/etc/profile.d/java.sh
# Symlink external dependencies.
local l
for l in libandroid-shmem.so libandroid-spawn.so libfreetype.so \
libiconv.so libz.so.1 libXext.so libX11.so libXrender.so \
libXrender.so.1 libXrender.so.1.3.0 libXtst.so libXtst.so.6 \
libXtst.so.6.1.0 libXi.so libxcb.so libXau.so libXdmcp.so \
libfreetype.so libfontconfig.so; do
ln -sfr $TERMUX_PREFIX/lib/$l \
$TERMUX_PREFIX/opt/openjdk/lib/$l
done
}