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