|  | 
|  | 1 | +# $NetBSD: Makefile,v 1.42 2024/08/10 10:19:01 nia Exp $ | 
|  | 2 | + | 
|  | 3 | +## Update DISTNAME according to the latest master download URL and run | 
|  | 4 | +## "make makesum" after that. | 
|  | 5 | +## Example: If the URL is: | 
|  | 6 | +## https://ziglang.org/builds/zig-0.15.0-dev.300+9e21ba12d.tar.xz | 
|  | 7 | +## then this value would be: zig-0.15.0-dev.300+9e21ba12d | 
|  | 8 | +## Meaning, filename minus the .tar.xz extension | 
|  | 9 | +DISTNAME=	zig-0.15.1 | 
|  | 10 | +## Want to make this (a) a separate package than lang/zig and (b) we | 
|  | 11 | +## want to be able to install different commits of the same version. | 
|  | 12 | +## For example 0.15.0 (stable) and 0.15.0-dev.300+9e21ba12d (unstable). | 
|  | 13 | +## Having the package name as "zig" won't let us install another version | 
|  | 14 | +## with the same name. We need a unique package name based on version in | 
|  | 15 | +## the DISTNAME so that it allows both to be installed. | 
|  | 16 | +## | 
|  | 17 | +## We prepare a version suffix code to make the name unique. | 
|  | 18 | +## Example values: | 
|  | 19 | +## - "zig-0.15.0-dev.300+9e21ba12d" becomes "0150dev300" | 
|  | 20 | +## - "zig-0.15.0" becomes "0150" | 
|  | 21 | +APPEND_VER=	${DISTNAME:S/zig-//:S/.//g:S/-//:C/\+.*$//} | 
|  | 22 | +## Finally appending the version code creates our unique package name. | 
|  | 23 | +## e.g. "zig-isolated0140" or "zig-isolated0140dev3462+edabcf619". Both | 
|  | 24 | +## should be able to be installed at the same time. | 
|  | 25 | +PKGNAME=	${DISTNAME:S/zig-/zig-isolated${APPEND_VER}-/} | 
|  | 26 | +CATEGORIES=	lang | 
|  | 27 | +## https://ziglang.org/builds/ is the official | 
|  | 28 | +# MASTER_SITES=	https://ziglang.org/builds/ | 
|  | 29 | +## Alternate mirror | 
|  | 30 | +MASTER_SITES=	https://zig.linus.dev/zig/ | 
|  | 31 | +EXTRACT_SUFX=	.tar.xz | 
|  | 32 | +## Used mainly for /usr/pkg/xx directory and binary symlink name. | 
|  | 33 | +## e.g. If this is "zig-0.15.0" (a) zig will be installed in | 
|  | 34 | +## /usr/pkg/zig-0.15.0, (b) symlinked as /usr/pkg/bin/zig-0.15.0 and | 
|  | 35 | +## (c) can be used by running "zig-0.15.0". "+" causes Zig binary to not | 
|  | 36 | +## be available on double tab press. We remove "+" as fix and following | 
|  | 37 | +## chars to make it shorter. | 
|  | 38 | +PACKAGE_SLUG=	${DISTNAME:C/\+.*$//} | 
|  | 39 | + | 
|  | 40 | +## Extract dev build number from DISTNAME | 
|  | 41 | +## First :C is for dev versions, later one is for stable | 
|  | 42 | +BUILD_NUMBER=			${DISTNAME:C/.*\-dev\.([0-9]+).*/\1/:C/zig\-.*/0/} | 
|  | 43 | +## Builds after 5 Apr 2025 need LLVM 20 instead of LLVM 19 required | 
|  | 44 | +## before this change. Seems to have started from build no. 233. | 
|  | 45 | +## https://github.com/ziglang/zig/commit/0cd31fc7ff157551cfbba5da35cd79f118d2a2e3#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20a | 
|  | 46 | +.if ${BUILD_NUMBER:R} >= 233 || ${BUILD_NUMBER:R} == 0 | 
|  | 47 | +REQUIRED_LLVM_MAJOR_VERSION=	20 | 
|  | 48 | +.else | 
|  | 49 | +REQUIRED_LLVM_MAJOR_VERSION=	19 | 
|  | 50 | +.endif | 
|  | 51 | +.info "(i) Using LLVM ${REQUIRED_LLVM_MAJOR_VERSION}" | 
|  | 52 | + | 
|  | 53 | + | 
|  | 54 | + | 
|  | 55 | +HOMEPAGE=	https://ziglang.org/ | 
|  | 56 | +COMMENT=	Programming language designed for robustness and clarity | 
|  | 57 | +LICENSE=	mit | 
|  | 58 | + | 
|  | 59 | +# Fails to build in chroot on netbsd: https://github.com/ziglang/zig/issues/19756 | 
|  | 60 | +USE_CXX_FEATURES+=	c++17 | 
|  | 61 | +USE_LANGUAGES=		c c++ | 
|  | 62 | +USE_TOOLS+=		bash:run | 
|  | 63 | + | 
|  | 64 | +CMAKE_CONFIGURE_ARGS+=	-DCMAKE_BUILD_TYPE=Release | 
|  | 65 | +CMAKE_CONFIGURE_ARGS+=	-DZIG_SHARED_LLVM=ON | 
|  | 66 | +# avoid full-cu-features available to build host, | 
|  | 67 | +# in other words ensure that we run everywhere | 
|  | 68 | +CMAKE_CONFIGURE_ARGS+=	-DZIG_TARGET_MCPU=baseline | 
|  | 69 | +#CMAKE_CONFIGURE_ARGS+=	-DZIG_PIE=ON | 
|  | 70 | + | 
|  | 71 | +## Make it see files from the path of lang/llvmXX | 
|  | 72 | +.include "../../lang/llvm${REQUIRED_LLVM_MAJOR_VERSION}/isolatedversion.mk" | 
|  | 73 | +LDFLAGS+=		-L${LLVM_ISOLATED_PREFIX}/lib -Wl,-R${LLVM_ISOLATED_PREFIX}/lib | 
|  | 74 | +CMAKE_CONFIGURE_ARGS+=	-DCMAKE_CXX_LINK_FLAGS=${LDFLAGS:Q} | 
|  | 75 | +CMAKE_CONFIGURE_ARGS+=	-DCMAKE_C_LINK_FLAGS=${LDFLAGS:Q} | 
|  | 76 | +## Because zig build can't find libxml etc. if not set to /usr/pkg | 
|  | 77 | +CMAKE_CONFIGURE_ARGS+=	-DCMAKE_PREFIX_PATH=${PREFIX} | 
|  | 78 | +## Fix for "libclang-cpp.so.xx.y" not found. | 
|  | 79 | +## CMake things don't seem to work here because it is done with zig's | 
|  | 80 | +## build system. Also MAKE_ENV doesn't send the vars (esp. | 
|  | 81 | +## LD_LIBRARY_PATH) to zig build. So we need to prepend LD_LIBRARY_PATH | 
|  | 82 | +## in cmake/install.cmake (see post-configure target below) | 
|  | 83 | +MAKE_ENV+=	LD_LIBRARY_PATH=${LLVM_ISOLATED_PREFIX}/lib:/usr/pkg/lib:/usr/lib | 
|  | 84 | +MAKE_ENV+=	LDFLAGS=-Wl,-R${LLVM_ISOLATED_PREFIX}/lib | 
|  | 85 | +MAKE_ENV+=	LDFLAGS=-L/usr/pkg/lib | 
|  | 86 | + | 
|  | 87 | +## Print every CMake command being run (for debugging/troubleshooting) | 
|  | 88 | +MAKE_ENV+=	VERBOSE=1 | 
|  | 89 | + | 
|  | 90 | +MAKE_ENV+=	ZIG_GLOBAL_CACHE_DIR=${WRKDIR}/${PACKAGE_SLUG}-global-cache | 
|  | 91 | +MAKE_ENV+=	ZIG_LOCAL_CACHE_DIR=${WRKDIR}/${PACKAGE_SLUG}-local-cache | 
|  | 92 | + | 
|  | 93 | +CHECK_PORTABILITY_SKIP+=	ci/azure/macos_script | 
|  | 94 | +BUILDLINK_TRANSFORM+=		rm:-Werror | 
|  | 95 | + | 
|  | 96 | +UNLIMIT_RESOURCES=	stacksize | 
|  | 97 | + | 
|  | 98 | +# again, sigh... | 
|  | 99 | +RELRO_SUPPORTED=	no | 
|  | 100 | +MKPIE_SUPPORTED=	no | 
|  | 101 | +# TODO: /usr/bin/env + /bin/env in lib/std/zig/system.zig | 
|  | 102 | + | 
|  | 103 | +pre-configure: | 
|  | 104 | +	## - Make zig build see LD_LIBRARY_PATH (e.g. path to | 
|  | 105 | +	## "libclang-cpp.so.xx.y") | 
|  | 106 | +	## - Set version string (esp. for dev builds) | 
|  | 107 | +	## - Make stage3 zig build process (build.zig) see the path | 
|  | 108 | +	## - Append or set CMake values (previously CMakeCache.txt | 
|  | 109 | +	##   "workaround"; starting from "CMAKE_INSTALL_PREFIX" line) | 
|  | 110 | +	${SED} -i'_orig' \ | 
|  | 111 | +		-e '1{h;s,.*,set(ENV{LD_LIBRARY_PATH} "'${LLVM_ISOLATED_PREFIX}'/lib:/usr/pkg/lib:/usr/lib:$$\ENV{LD_LIBRARY_PATH}")\n,;G;}' \ | 
|  | 112 | +		-e '1{h;s,.*,set(ENV{LIBRARY_PATH} "'${LLVM_ISOLATED_PREFIX}'/lib:/usr/pkg/lib:/usr/lib:$$\ENV{LIBRARY_PATH}")\n,;G;}' \ | 
|  | 113 | +		-e '1{h;s,.*,set(ENV{LDFLAGS} "-Wl\,-R'${LLVM_ISOLATED_PREFIX}'/lib -L'${LLVM_ISOLATED_PREFIX}'/lib $$\ENV{LDFLAGS}")\n,;G;}' \ | 
|  | 114 | +		-e '/set(ZIG_VERSION/ s,set(ZIG_VERSION "",set(ZIG_VERSION "${DISTNAME:S/zig-//}",' \ | 
|  | 115 | +		-e '/$${CMAKE_PREFIX_PATH}/ s,^,list(APPEND ZIG_CMAKE_PREFIX_PATH "${LLVM_ISOLATED_PREFIX}")\n,' \ | 
|  | 116 | +		-e '1{h;s,.*,set(CMAKE_INSTALL_PREFIX "${PREFIX}/${PACKAGE_SLUG}" CACHE PATH "Directory to install zig to" FORCE)\n,;G;}' \ | 
|  | 117 | +		-e '$$s,$$,\nstring(APPEND CMAKE_CXX_FLAGS " -I${LLVM_ISOLATED_PREFIX}/include"),' \ | 
|  | 118 | +		-e '$$s,$$,\nstring(APPEND CMAKE_CXX_LINK_FLAGS " -L${LLVM_ISOLATED_PREFIX}/lib -Wl\,-R${LLVM_ISOLATED_PREFIX}/lib"),' \ | 
|  | 119 | +		-e '$$s,$$,\nstring(APPEND CMAKE_C_FLAGS " -I${LLVM_ISOLATED_PREFIX}/include"),' \ | 
|  | 120 | +		-e '$$s,$$,\nstring(APPEND CMAKE_EXE_LINKER_FLAGS " -L${LLVM_ISOLATED_PREFIX}/lib -Wl\,-R${LLVM_ISOLATED_PREFIX}/lib"),' \ | 
|  | 121 | +		-e '$$s,$$,\nstring(APPEND CMAKE_MODULE_LINKER_FLAGS " -L${LLVM_ISOLATED_PREFIX}/lib -Wl\,-R${LLVM_ISOLATED_PREFIX}/lib"),' \ | 
|  | 122 | +		-e '$$s,$$,\nstring(APPEND CMAKE_SHARED_LINKER_FLAGS " -L${LLVM_ISOLATED_PREFIX}/lib -Wl\,-R${LLVM_ISOLATED_PREFIX}/lib"),' \ | 
|  | 123 | +		-e '1{h;s,.*,set(CMAKE_INSTALL_RPATH "${LLVM_ISOLATED_PREFIX}/lib" CACHE PATH "" FORCE)\n,;G;}' \ | 
|  | 124 | +		-e '1{h;s,.*,set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "" FORCE)\n,;G;}' \ | 
|  | 125 | +		${WRKDIR}/${DISTNAME}/CMakeLists.txt | 
|  | 126 | +	## Fix paths when lang/clang is already installed on system | 
|  | 127 | +	${SED} -i'_orig' \ | 
|  | 128 | +		-e '1{h;s,.*,set(LLVM_INCLUDE_DIRS "'${LLVM_ISOLATED_PREFIX}'/include:$$\{LLVM_INCLUDE_DIRS}")\n,;G;}' \ | 
|  | 129 | +		-e '1{h;s,.*,set(LLVM_LIBDIRS "'${LLVM_ISOLATED_PREFIX}'/lib:$$\{LLVM_LIBDIRS}")\n,;G;}' \ | 
|  | 130 | +		-e '1{h;s,.*,set(CMAKE_PREFIX_PATH "'${LLVM_ISOLATED_PREFIX}'")\n,;G;}' \ | 
|  | 131 | +		${WRKDIR}/${DISTNAME}/cmake/Findclang.cmake | 
|  | 132 | + | 
|  | 133 | +post-configure: | 
|  | 134 | +	## Hardcode the path so that executing the linked | 
|  | 135 | +	## /usr/pkg/bin/${PACKAGE_SLUG} file doesn't say "unable to find zig | 
|  | 136 | +	## installation directory" | 
|  | 137 | +	${SED} -i'_orig' -e 's,= self_exe_path;,= "/usr/pkg/${PACKAGE_SLUG}/bin";\n    _ = self_exe_path;,' ${WRKDIR}/${DISTNAME}/src/introspect.zig | 
|  | 138 | + | 
|  | 139 | +post-install: | 
|  | 140 | +	## Binary link for isolated install | 
|  | 141 | +	${MKDIR} -p ${DESTDIR}${PREFIX}/bin | 
|  | 142 | +	${LN} -sf ${PREFIX}/${PACKAGE_SLUG}/bin/zig ${DESTDIR}${PREFIX}/bin/${PACKAGE_SLUG} | 
|  | 143 | + | 
|  | 144 | +# after install, because the zig binary ends up in paths like | 
|  | 145 | +# ./zig-0.10.1/zig-cache/o/e6445b80597d6bc8fe865e7254800ac9/zig | 
|  | 146 | +# unless we want to run find for the executable here? | 
|  | 147 | +do-test: | 
|  | 148 | +	mkdir ${WRKDIR}/cache | 
|  | 149 | +	cd ${WRKSRC} && \ | 
|  | 150 | +		${DESTDIR}${PREFIX}/bin/${PACKAGE_SLUG} build test-behavior \ | 
|  | 151 | +		--cache-dir ${WRKDIR}/cache --global-cache-dir ${WRKDIR}/cache \ | 
|  | 152 | +		--zig-lib-dir ${WRKSRC}/lib | 
|  | 153 | + | 
|  | 154 | +.include "../../devel/cmake/build.mk" | 
|  | 155 | +.include "../../devel/lld${REQUIRED_LLVM_MAJOR_VERSION}/buildlink3.mk" | 
|  | 156 | +.include "../../lang/clang${REQUIRED_LLVM_MAJOR_VERSION}/buildlink3.mk" | 
|  | 157 | +.include "../../lang/llvm${REQUIRED_LLVM_MAJOR_VERSION}/buildlink3.mk" | 
|  | 158 | +.include "../../mk/bsd.pkg.mk" | 
0 commit comments