bump(main/zig): 0.11.0 (#17733)

This commit is contained in:
Jia Yuan Lo 2023-09-01 10:38:31 +08:00 committed by GitHub
parent 003c814212
commit d47c544b06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 192 additions and 68 deletions

View File

@ -154,7 +154,7 @@ jobs:
- name: Free additional disk space (if necessary)
run: |
if grep -q '^clvk$\|^dart$\|^rust$\|^rustc-nightly$' ./built_termux-main_packages.txt || \
if grep -q '^clvk$\|^dart$\|^rust$\|^rustc-nightly$\|^zig$' ./built_termux-main_packages.txt || \
grep -q '^firefox$' ./built_termux-x11_packages.txt; then
echo "Free additional disk space on host"
sudo apt purge -yq $(dpkg -l | grep '^ii' | awk '{ print $2 }' | grep -P '(cabal-|dotnet-|ghc-|libmono|php|aspnetcore)') \

View File

@ -1,22 +0,0 @@
TERMUX_PKG_HOMEPAGE=https://ziglang.org
TERMUX_PKG_DESCRIPTION="General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software."
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_MAINTAINER="@leapofazzam123"
TERMUX_PKG_VERSION=0.9.1
TERMUX_PKG_SRCURL=https://ziglang.org/download/$TERMUX_PKG_VERSION/zig-$TERMUX_PKG_VERSION.tar.xz
TERMUX_PKG_SHA256=38cf4e84481f5facc766ba72783e7462e08d6d29a5d47e3b75c8ee3142485210
TERMUX_PKG_DEPENDS="libandroid-spawn, libc++, libxml2, ncurses, zlib"
TERMUX_PKG_BUILD_DEPENDS="llvm, libllvm-static"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
-DZIG_PREFER_CLANG_CPP_DYLIB=OFF
-DLLVM_LIBDIRS=$TERMUX_PREFIX/lib
"
termux_step_pre_configure() {
termux_setup_zig
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+="
-DZIG_EXECUTABLE=$(command -v zig)
-DZIG_TARGET_TRIPLE=$ZIG_TARGET_NAME
"
LDFLAGS+=" -landroid-spawn -lncursesw -lxml2 -lz"
}

View File

@ -1,11 +0,0 @@
--- a/cmake/Findllvm.cmake
+++ b/cmake/Findllvm.cmake
@@ -353,6 +353,8 @@
FIND_AND_ADD_LLVM_LIB(LLVMBinaryFormat)
FIND_AND_ADD_LLVM_LIB(LLVMSupport)
FIND_AND_ADD_LLVM_LIB(LLVMDemangle)
+ FIND_AND_ADD_LLVM_LIB(Polly)
+ FIND_AND_ADD_LLVM_LIB(PollyISL)
endif()
include(FindPackageHandleStandardArgs)

123
packages/zig/build.patch Normal file
View File

@ -0,0 +1,123 @@
diff --git a/build b/build
index b1917f6b..c1a5844c 100755
--- a/build
+++ b/build
@@ -20,10 +20,19 @@ case $TARGET_OS_CMAKE in
native) TARGET_OS_CMAKE="";;
esac
+# When we know we are not host building zig,
+# we can disable unused targets ahead of time
+case "${TARGET}" in
+aarch64-*) ARCH="AArch64" ;;
+arm-*) ARCH="ARM" ;;
+x86-*) ARCH="X86" ;;
+x86_64-*) ARCH="X86" ;;
+esac
+
# First build the libraries for Zig to link against, as well as native `llvm-tblgen`.
mkdir -p "$ROOTDIR/out/build-llvm-host"
cd "$ROOTDIR/out/build-llvm-host"
-cmake "$ROOTDIR/llvm" \
+cmake -G Ninja "$ROOTDIR/llvm" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/host" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/host" \
-DCMAKE_BUILD_TYPE=Release \
@@ -38,6 +47,7 @@ cmake "$ROOTDIR/llvm" \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_Z3_SOLVER=OFF \
+ -DLLVM_TARGETS_TO_BUILD="$ARCH" \
-DLLVM_TOOL_LLVM_LTO2_BUILD=OFF \
-DLLVM_TOOL_LLVM_LTO_BUILD=OFF \
-DLLVM_TOOL_LTO_BUILD=OFF \
@@ -50,27 +60,29 @@ cmake "$ROOTDIR/llvm" \
-DCLANG_TOOL_ARCMT_TEST_BUILD=OFF \
-DCLANG_TOOL_C_ARCMT_TEST_BUILD=OFF \
-DCLANG_TOOL_LIBCLANG_BUILD=OFF
-cmake --build . --target install
+ninja -j$(nproc) llvm-ar llvm-ranlib llvm-rc llvm-tblgen clang-tblgen
# Now we build Zig, still with system C/C++ compiler, linking against LLVM,
# Clang, LLD we just built from source.
+if ! :; then
mkdir -p "$ROOTDIR/out/build-zig-host"
cd "$ROOTDIR/out/build-zig-host"
-cmake "$ROOTDIR/zig" \
+cmake -G Ninja "$ROOTDIR/zig" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/host" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/host" \
-DCMAKE_BUILD_TYPE=Release \
-DZIG_VERSION="$ZIG_VERSION"
-cmake --build . --target install
+ninja -j$(nproc) install
+fi
# Now we have Zig as a cross compiler.
-ZIG="$ROOTDIR/out/host/bin/zig"
+ZIG=$(command -v zig)
# First cross compile zlib for the target, as we need the LLVM linked into
# the final zig binary to have zlib support enabled.
mkdir -p "$ROOTDIR/out/build-zlib-$TARGET-$MCPU"
cd "$ROOTDIR/out/build-zlib-$TARGET-$MCPU"
-cmake "$ROOTDIR/zlib" \
+cmake -G Ninja "$ROOTDIR/zlib" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_BUILD_TYPE=Release \
@@ -79,10 +91,10 @@ cmake "$ROOTDIR/zlib" \
-DCMAKE_C_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_CXX_COMPILER="$ZIG;c++;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_ASM_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
- -DCMAKE_RC_COMPILER="$ROOTDIR/out/host/bin/llvm-rc" \
- -DCMAKE_AR="$ROOTDIR/out/host/bin/llvm-ar" \
- -DCMAKE_RANLIB="$ROOTDIR/out/host/bin/llvm-ranlib"
-cmake --build . --target install
+ -DCMAKE_RC_COMPILER="$ROOTDIR/out/build-llvm-host/bin/llvm-rc" \
+ -DCMAKE_AR="$ROOTDIR/out/build-llvm-host/bin/llvm-ar" \
+ -DCMAKE_RANLIB="$ROOTDIR/out/build-llvm-host/bin/llvm-ranlib"
+ninja -j$(nproc) install
# Same deal for zstd.
# The build system for zstd is whack so I just put all the files here.
@@ -132,7 +144,7 @@ $ZIG build-lib \
# Rebuild LLVM with Zig.
mkdir -p "$ROOTDIR/out/build-llvm-$TARGET-$MCPU"
cd "$ROOTDIR/out/build-llvm-$TARGET-$MCPU"
-cmake "$ROOTDIR/llvm" \
+cmake -G Ninja "$ROOTDIR/llvm" \
-DCMAKE_INSTALL_PREFIX="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_PREFIX_PATH="$ROOTDIR/out/$TARGET-$MCPU" \
-DCMAKE_BUILD_TYPE=Release \
@@ -141,9 +153,9 @@ cmake "$ROOTDIR/llvm" \
-DCMAKE_C_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_CXX_COMPILER="$ZIG;c++;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
-DCMAKE_ASM_COMPILER="$ZIG;cc;-fno-sanitize=all;-s;-target;$TARGET;-mcpu=$MCPU" \
- -DCMAKE_RC_COMPILER="$ROOTDIR/out/host/bin/llvm-rc" \
- -DCMAKE_AR="$ROOTDIR/out/host/bin/llvm-ar" \
- -DCMAKE_RANLIB="$ROOTDIR/out/host/bin/llvm-ranlib" \
+ -DCMAKE_RC_COMPILER="$ROOTDIR/out/build-llvm-host/bin/llvm-rc" \
+ -DCMAKE_AR="$ROOTDIR/out/build-llvm-host/bin/llvm-ar" \
+ -DCMAKE_RANLIB="$ROOTDIR/out/build-llvm-host/bin/llvm-ranlib" \
-DLLVM_ENABLE_BACKTRACES=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_CRASH_OVERRIDES=OFF \
@@ -158,7 +170,7 @@ cmake "$ROOTDIR/llvm" \
-DLLVM_ENABLE_ZLIB=FORCE_ON \
-DLLVM_ENABLE_ZSTD=FORCE_ON \
-DLLVM_USE_STATIC_ZSTD=ON \
- -DLLVM_TABLEGEN="$ROOTDIR/out/host/bin/llvm-tblgen" \
+ -DLLVM_TABLEGEN="$ROOTDIR/out/build-llvm-host/bin/llvm-tblgen" \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_BUILD_STATIC=ON \
@@ -185,7 +197,7 @@ cmake "$ROOTDIR/llvm" \
-DCLANG_TOOL_LIBCLANG_BUILD=OFF \
-DLIBCLANG_BUILD_STATIC=ON \
-DLLD_BUILD_TOOLS=OFF
-cmake --build . --target install
+ninja -j$(nproc) install
# Finally, we can cross compile Zig itself, with Zig.
cd "$ROOTDIR/zig"

38
packages/zig/build.sh Normal file
View File

@ -0,0 +1,38 @@
TERMUX_PKG_HOMEPAGE=https://ziglang.org
TERMUX_PKG_DESCRIPTION="General-purpose programming language and toolchain"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_LICENSE_FILE="zig/LICENSE"
TERMUX_PKG_MAINTAINER="@termux"
TERMUX_PKG_VERSION=0.11.0
TERMUX_PKG_SRCURL=https://github.com/ziglang/zig-bootstrap/archive/${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=046cede54ae0627c6ac98a1b3915242b35bc550ac7aaec3ec4cef6904c95019e
TERMUX_PKG_BUILD_IN_SRC=true
TERMUX_PKG_AUTO_UPDATE=true
TERMUX_PKG_UPDATE_TAG_TYPE="newest-tag"
termux_step_pre_configure() {
termux_setup_cmake
termux_setup_ninja
termux_setup_zig
}
termux_step_make() {
# zig 0.11.0+ uses 3 stages bootstrapping build system
# which NDK cant be used anymore
unset AS CC CFLAGS CPP CPPFLAGS CXX CXXFLAGS LD LDFLAGS
# zig 0.9.1 android triples never worked and uses musl
export ZIG_TARGET_NAME="${TERMUX_ARCH}-linux-musl"
case "${TERMUX_ARCH}" in
arm) ZIG_TARGET_NAME="arm-linux-musleabihf" ;;
i686) ZIG_TARGET_NAME="x86-linux-musl" ;;
esac
# build.patch skipped various steps to make CI build <6 hours
./build "${ZIG_TARGET_NAME}" baseline
}
termux_step_make_install() {
cp -fr "out/zig-${ZIG_TARGET_NAME}-baseline" "${TERMUX_PREFIX}/lib/zig"
ln -fsv "../lib/zig/zig" "${TERMUX_PREFIX}/bin/zig"
}

View File

@ -1,44 +1,40 @@
# shellcheck shell=bash disable=SC2155
termux_setup_zig() {
local ZIG_VERSION=0.9.1
local ZIG_FOLDER
if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then
local ZIG_VERSION=0.11.0
local ZIG_TXZ_URL=https://ziglang.org/download/${ZIG_VERSION}/zig-linux-x86_64-${ZIG_VERSION}.tar.xz
local ZIG_TXZ_SHA256=2d00e789fec4f71790a6e7bf83ff91d564943c5ee843c5fd966efc474b423047
local ZIG_TXZ_FILE=${TERMUX_PKG_TMPDIR}/zig-${ZIG_VERSION}.tar.xz
local ZIG_FOLDER=${TERMUX_COMMON_CACHEDIR}/zig-${ZIG_VERSION}
if [[ "${TERMUX_PACKAGES_OFFLINE-false}" == "true" ]]; then
ZIG_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/zig-${ZIG_VERSION}
else
ZIG_FOLDER=${TERMUX_COMMON_CACHEDIR}/zig-${ZIG_VERSION}
fi
local ZIG_PKG_VERSION=$(. "${TERMUX_SCRIPTDIR}/packages/zig/build.sh"; echo ${TERMUX_PKG_VERSION})
if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
if [ ! -x "$ZIG_FOLDER/zig" ]; then
mkdir -p "$ZIG_FOLDER"
local ZIG_TARBALL=$TERMUX_PKG_TMPDIR/zig-$ZIG_VERSION.zip
termux_download https://ziglang.org/download/$ZIG_VERSION/zig-linux-x86_64-$ZIG_VERSION.tar.xz \
"$ZIG_TARBALL" \
be8da632c1d3273f766b69244d80669fe4f5e27798654681d77c992f17c237d7
tar xf "$ZIG_TARBALL" -C "$ZIG_FOLDER" --strip-components=1
fi
export PATH=$ZIG_FOLDER:$PATH
else
local ZIG_PKG_VERSION=$(bash -c ". $TERMUX_SCRIPTDIR/packages/zig/build.sh; echo \$TERMUX_PKG_VERSION")
if ([ ! -e "$TERMUX_BUILT_PACKAGES_DIRECTORY/zig" ] ||
[ "$(cat "$TERMUX_BUILT_PACKAGES_DIRECTORY/zig")" != "$ZIG_PKG_VERSION" ]) &&
[ "$(dpkg-query -W -f '${db:Status-Status}\n' zig 2>/dev/null)" != "installed" ]; then
echo "Package 'zig' is not installed."
echo "You can install it with"
echo
echo " pkg install zig"
echo
echo "or build it from source with"
echo
echo " ./build-package.sh zig"
echo
if [[ "${TERMUX_ON_DEVICE_BUILD}" == "true" ]]; then
if [[ "$(cat "${TERMUX_BUILT_PACKAGES_DIRECTORY}/zig" 2>/dev/null)" != "${ZIG_PKG_VERSION}" && -z "$(command -v zig)" ]]; then
cat <<- EOL
Package 'zig' is not installed.
You can install it with
pkg install zig
or build it from source with
./build-package.sh zig
EOL
exit 1
fi
return
fi
if [ $TERMUX_ARCH = "i686" ]; then
ZIG_TARGET_NAME=i386-linux-android
else
ZIG_TARGET_NAME=$TERMUX_ARCH-linux-android
if [[ ! -x "${ZIG_FOLDER}/zig" ]]; then
mkdir -p "${ZIG_FOLDER}"
termux_download "${ZIG_TXZ_URL}" "${ZIG_TXZ_FILE}" "${ZIG_TXZ_SHA256}"
tar -xf "${ZIG_TXZ_FILE}" -C "${ZIG_FOLDER}" --strip-components=1
fi
export PATH="${ZIG_FOLDER}:${PATH}"
if [[ -z "$(command -v zig)" ]]; then
termux_error_exit "termux_setup_zig: No zig executable found!"
fi
}