diff --git a/build-package.sh b/build-package.sh index d9a6e73d7..0bbf60834 100755 --- a/build-package.sh +++ b/build-package.sh @@ -55,6 +55,10 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_download.sh" # shellcheck source=scripts/build/setup/termux_setup_ghc.sh source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_ghc.sh" +# Utility function for setting up GN toolchain. +# shellcheck source=scripts/build/setup/termux_setup_gn.sh +source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_gn.sh" + # Utility function for golang-using packages to setup a go toolchain. # shellcheck source=scripts/build/setup/termux_setup_golang.sh source "$TERMUX_SCRIPTDIR/scripts/build/setup/termux_setup_golang.sh" diff --git a/packages/gn/build-gen.py.patch b/packages/gn/build-gen.py.patch new file mode 100644 index 000000000..e5573312d --- /dev/null +++ b/packages/gn/build-gen.py.patch @@ -0,0 +1,11 @@ +--- ./build/gen.py.orig 2021-08-09 14:54:18.428308993 +0530 ++++ ./build/gen.py 2021-08-09 14:55:03.628308976 +0530 +@@ -785,6 +785,8 @@ + executables['gn']['libs'].extend(static_libraries.keys()) + executables['gn_unittests']['libs'].extend(static_libraries.keys()) + ++ del executables['gn_unittests'] ++ + WriteGenericNinja(path, static_libraries, executables, cxx, ar, ld, + platform, host, options, cflags, ldflags, + libflags, include_dirs, libs) diff --git a/packages/gn/build.sh b/packages/gn/build.sh new file mode 100755 index 000000000..c63984bab --- /dev/null +++ b/packages/gn/build.sh @@ -0,0 +1,50 @@ +TERMUX_PKG_HOMEPAGE=https://gn.googlesource.com/gn +TERMUX_PKG_DESCRIPTION="Meta-build system that generates build files for Ninja" +TERMUX_PKG_LICENSE="BSD 3-Clause" +TERMUX_PKG_MAINTAINER="Yaksh Bariya " +# While updating commit hash here also update it in +# termux_setup_gn +_COMMIT=69ec4fca1fa69ddadae13f9e6b7507efa0675263 +TERMUX_PKG_VERSION=0.1 +TERMUX_PKG_RECOMMENDS="ninja" +TERMUX_PKG_SKIP_SRC_EXTRACT=true +TERMUX_PKG_BUILD_IN_SRC=true + +termux_step_get_source() { + TERMUX_PKG_SRCURL=https://gn.googlesource.com/gn/+archive/$_COMMIT.tar.gz + # Prevent caching of builds + rm -rf $TERMUX_PKG_SRCDIR + # FIXME: We would like to enable checksums when downloading + # tar files, but they change each time as the tar metadata + # differs: https://github.com/google/gitiles/issues/84 + GN_TARFILE=$TERMUX_PKG_CACHEDIR/gn_$_COMMIT.tar.gz + test ! -f $GN_TARFILE && termux_download \ + $TERMUX_PKG_SRCURL \ + $GN_TARFILE \ + SKIP_CHECKSUM + mkdir -p $TERMUX_PKG_SRCDIR + tar xf $GN_TARFILE -C $TERMUX_PKG_SRCDIR +} + +termux_step_configure() { + ./build/gen.py \ + --no-last-commit-position \ + --no-static-libstdc++ + + cat <<- EOF > ./out/last_commit_position.h + #ifndef OUT_LAST_COMMIT_POSITION_H_ + #define OUT_LAST_COMMIT_POSITION_H_ + #define LAST_COMMIT_POSITION_NUM ${TERMUX_PKG_VERSION##0.} + #define LAST_COMMIT_POSITION "${TERMUX_PKG_VERSION}" + #endif // OUT_LAST_COMMIT_POSITION_H_ + EOF +} + +termux_step_make() { + termux_setup_ninja + ninja -C out/ +} + +termux_step_make_install() { + install -Dm755 -t $TERMUX_PREFIX/bin out/gn +} diff --git a/scripts/build/setup/termux_setup_gn.sh b/scripts/build/setup/termux_setup_gn.sh new file mode 100644 index 000000000..d614ed046 --- /dev/null +++ b/scripts/build/setup/termux_setup_gn.sh @@ -0,0 +1,52 @@ +termux_setup_gn() { + termux_setup_ninja + local GN_COMMIT=69ec4fca1fa69ddadae13f9e6b7507efa0675263 + local GN_TARFILE=$TERMUX_COMMON_CACHEDIR/gn_$GN_COMMIT.tar.gz + local GN_SOURCE=https://gn.googlesource.com/gn/+archive/$GN_COMMIT.tar.gz + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + GN_FOLDER=$TERMUX_SCRIPTDIR/build-tools/gn-$GN_COMMIT + else + GN_FOLDER=$TERMUX_COMMON_CACHEDIR/gn-$GN_COMMIT + fi + + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + if [ ! -d "$GN_FOLDER" ]; then + # FIXME: We would like to enable checksums when downloading + # tar files, but they change each time as the tar metadata + # differs: https://github.com/google/gitiles/issues/84 + termux_download \ + $GN_SOURCE \ + $GN_TARFILE \ + SKIP_CHECKSUM + mkdir -p $GN_FOLDER + tar xf $GN_TARFILE -C $GN_FOLDER + local LAST_PWD=$(pwd) + cd $GN_FOLDER + ( + unset CC CXX CFLAGS CXXFLAGS LD LDFLAGS AR AS CPP OBJCOPY OBJDUMP RANLIB READELF STRIP + ./build/gen.py \ + --no-last-commit-position + cat <<-EOF >./out/last_commit_position.h + #ifndef OUT_LAST_COMMIT_POSITION_H_ + #define OUT_LAST_COMMIT_POSITION_H_ + #define LAST_COMMIT_POSITION_NUM 1 + #define LAST_COMMIT_POSITION "${GN_COMMIT}" + #endif // OUT_LAST_COMMIT_POSITION_H_ + EOF + ninja -C out/ + ) + cd $LAST_PWD + fi + export PATH=$GN_FOLDER/out:$PATH + else + if [ "$(dpkg-query -W -f '${db:Status-Status}\n' gn 2>/dev/null)" != "installed" ]; then + echo "Package 'gn' is not installed." + echo "You can install it with" + echo + echo " pkg install gn" + echo + exit 1 + fi + fi +}