Edit

IABSD.fr/ports/lang/zig/files

Branch :

  • Show log

    Commit

  • Author : semarie
    Date : 2022-03-10 13:36:49
    Hash : 134e0c7b
    Message : lang/zig: remove RCSTag

  • build.sh
  • #!/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