Skip to content

Commit f0dae00

Browse files
authored
Add package for zig-0.15.1
1 parent 7387e18 commit f0dae00

File tree

5 files changed

+18362
-0
lines changed

5 files changed

+18362
-0
lines changed

pkgsrc/lang/zig-0.15/DESCR

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Zig is an open-source programming language designed for robustness,
2+
optimality, and clarity.
3+
4+
* Robust - behavior is correct even for edge cases such as out
5+
of memory.
6+
* Optimal - write programs the best way they can
7+
behave and perform.
8+
* Clear - precisely communicate your intent
9+
to the compiler and other programmers. The language imposes a
10+
low overhead to reading code.

pkgsrc/lang/zig-0.15/Makefile

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
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+
MAINTAINER= [email protected]
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

Comments
 (0)