ports/lang/zig/files/build.sh

144 lines
3.5 KiB
Bash

#!/bin/sh
set -eux
LLVMINST="${LOCALBASE}"
ZIG1BUILD="${WRKBUILD}/zig-stage1"
ZIG2BUILD="${WRKBUILD}/zig-stage2"
# disable some llvm protections in the llvm compiler to regain performance
case $(machine) in
aarch64) XFLAGS="-fno-ret-protector" ;;
amd64) XFLAGS="-fno-ret-protector -mno-retpoline" ;;
i386) XFLAGS="-fno-ret-protector -mno-retpoline" ;;
mips64) XFLAGS="-fno-ret-protector -fomit-frame-pointer" ;;
mips64el) XFLAGS="-fno-ret-protector -fomit-frame-pointer" ;;
powerpc) XFLAGS="-fno-ret-protector"
CMAKE_SHARED_LINKER_FLAGS="-Wl,-relax"
;;
esac
zig1_configure() {
[ ! -d "${ZIG1BUILD}" ] && mkdir "${ZIG1BUILD}"
# get clang libs
for f in $(ls "${LLVMINST}"/lib/libclang*.a); do
clang_libraries="${clang_libraries:-}${clang_libraries:+;}${f}"
done
# configure zig stage1
cd "${ZIG1BUILD}"
env CFLAGS="${XFLAGS:-} ${CFLAGS:-}" \
CXXFLAGS="${XFLAGS:-} ${CXXFLAGS:-}" \
VERBOSE=1 \
MODCMAKE_PORT_BUILD=yes \
cmake -GNinja "${WRKSRC}/zig" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER="${CC:-cc}" \
-DCMAKE_CXX_COMPILER="${CXX:-c++}" \
\
-DZIG_VERSION="${TARGET_VERSION}" \
-DZIG_PREFER_LLVM_CONFIG=ON \
-DZIG_STATIC_LLVM=ON \
-DZIG_PREFER_CLANG_CPP_DYLIB=OFF \
\
-DLLVM_CONFIG_EXE="${LLVMINST}/bin/llvm-config" \
-DLLVM_INCLUDE_DIRS="${LLVMINST}/include" \
-DLLVM_LIBDIRS="${LLVMINST}/lib" \
\
-DCLANG_LIBRARIES="${clang_libraries}" \
-DCLANG_INCLUDE_DIRS="${LLVMINST}/include" \
\
-DLLD_INCLUDE_DIRS="${LLVMINST}/include" \
-DLLD_LLDCOFF_LIB="${LLVMINST}/lib/liblldCOFF.a" \
-DLLD_LLDCOMMON_LIB="${LLVMINST}/lib/liblldCommon.a" \
-DLLD_LLDCORE_LIB="${LLVMINST}/lib/liblldCore.a" \
-DLLD_LLDDRIVER_LIB="${LLVMINST}/lib/liblldDriver.a" \
-DLLD_LLDELF_LIB="${LLVMINST}/lib/liblldELF.a" \
-DLLD_LLDMACHO_LIB="${LLVMINST}/lib/liblldMachO.a" \
-DLLD_LLDMINGW_LIB="${LLVMINST}/lib/liblldMinGW.a" \
-DLLD_LLDREADERWRITER_LIB="${LLVMINST}/lib/liblldReaderWriter.a" \
-DLLD_LLDWASM_LIB="${LLVMINST}/lib/liblldWasm.a" \
-DLLD_LLDYAML_LIB="${LLVMINST}/lib/liblldYAML.a"
}
zig1_build() {
cd "${ZIG1BUILD}"
ninja -v -j${MAKE_JOBS:-1}
# keep lib-dir next to zig binary
# (for building stage2 or running tests)
ln -fs "${WRKSRC}/zig/lib" "${ZIG1BUILD}/lib"
}
zig2_build() {
cd "${WRKSRC}/zig"
"${ZIG1BUILD}/zig" build install \
--prefix "${ZIG2BUILD}" \
--search-prefix "${LLVMINST}" \
--global-cache-dir "${ZIG2BUILD}/zig-cache" \
--cache-dir "${ZIG2BUILD}/zig-cache" \
--verbose \
--verbose-link \
-Denable-llvm=true \
-Dversion-string="${TARGET_VERSION}"
}
zig_install() {
set -x
#cp -vR "${ZIG2BUILD}/lib/zig" "${PREFIX}/lib"
# install lib dir
cd "${WRKSRC}/zig"
"${ZIG1BUILD}/zig" build install \
--prefix "${PREFIX}" \
--global-cache-dir "${ZIG2BUILD}/zig-cache" \
--cache-dir "${ZIG2BUILD}/zig-cache" \
-Dlib-files-only=true
# install zig stage1, as stage2 doesn't fully work for now
${BSD_INSTALL_PROGRAM} "${ZIG1BUILD}/zig" \
"${PREFIX}/bin/zig"
}
zig_test() {
set -x
cd "${WRKSRC}/zig"
"${ZIG1BUILD}/zig" build test \
-Dskip-compile-errors \
-Dskip-non-native \
--global-cache-dir "${ZIG2BUILD}/zig-cache" \
--cache-dir "${ZIG2BUILD}/zig-cache" \
--verbose \
--verbose-link
}
usage() {
echo "$0 version [build|install|test]"
exit 1
}
if [ $# -ne 2 ]; then
usage
fi
# set zig version
TARGET_VERSION=${1}
case "${2}" in
build)
zig1_configure
zig1_build
;;
install)
zig_install
;;
test)
# build stage2 as part of testing
zig2_build
# zig testsuite
zig_test
;;
*)
usage
;;
esac