diff options
Diffstat (limited to 'Mk/Uses')
-rw-r--r-- | Mk/Uses/zig.mk | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Mk/Uses/zig.mk b/Mk/Uses/zig.mk new file mode 100644 index 000000000000..5727a812fede --- /dev/null +++ b/Mk/Uses/zig.mk @@ -0,0 +1,102 @@ +# Provide support for building Zig software. +# +# Feature: zig +# Usage: USES=zig + +# Variables, which can be set by the port: +# +# ZIG_TUPLE List of Zig dependencies required to build the port. +# Each item is triplet of an arbitrary name, an URL without +# scheme part (https://) and a directory name where the +# expects this dependency to be placed. +# This knob can be generated by running make make-zig-tuple +# You might need to run this multiple time until all +# transitive dependencies get pulled in. +# +# MAINTAINER: ports@FreeBSD.org + +.if !defined(_INCLUDE_USES_ZIG_MK) +_INCLUDE_USES_ZIG_MK= yes + +. if !empty(zig_ARGS) +IGNORE= USES=zig does not accept arguments +. endif + +.sinclude "${MASTERDIR}/Makefile.zig" + +ZIG_CMD?= zig +ZIG_PORT?= lang/zig +ZIG_DEPSDIR= ${WRKDIR}/zig-packages +ZIG_TMPDEPSDIR= ${WRKDIR}/zig-packages-tmp + +ZIG_CPUTYPE_DEFAULT= ${ARCH:S/amd64/x86_64/} +ZIG_CPUTYPE?= ${CPUTYPE:U${ZIG_CPUTYPE_DEFAULT}} + +_ZIG2TUPLE_CMD= zig2tuple + +BUILD_DEPENDS+= ${ZIG_CMD}:${ZIG_PORT} + +DIST_SUBDIR?= zig + +. for z in ${ZIG_TUPLE} +. for group url dir in ${z:S/:/ /g:tw} +MASTER_SITES+= https://${url:H}/:${group} +DISTFILES+= ${url:T}:${group} +. endfor +. endfor + +_USES_extract= 299:zig-pre-extract + +# Generates ZIG_TUPLE= ... line ready to be pasted into the port based on +# build.zig.zon files found in ${WRKSRC} +make-zig-tuple: check-zig2tuple + @${ECHO_MSG} "===> Processing build.zig.zon files" + ${_ZIG2TUPLE_CMD} ${WRKDIR} + +check-zig2tuple: + @if ! type ${_ZIG2TUPLE_CMD} > /dev/null 2>&1; then \ + ${ECHO_MSG} "===> zig2tuple executable not found, install \"ports-mgmt/zig2tuple\""; exit 1; \ + fi + +# Main targets implementation. + +zig-pre-extract: + @${ECHO_CMD} "===> Extracting zig dependencies" +# We don't know the name of the directory that is contained in the archive, +# but we need to rename it into the last component of the tuple +# To solve this we extract into an empty directory and then do +# mv * /path/where/we/want/it + @${MKDIR} ${ZIG_DEPSDIR} ${ZIG_TMPDEPSDIR} +. for z in ${ZIG_TUPLE} +. for group url dir in ${z:S/:/ /g:tw} + ${MAKE} -C ${.CURDIR} do-extract EXTRACT_ONLY=${url:T} WRKDIR=${ZIG_TMPDEPSDIR} + ${MV} ${ZIG_TMPDEPSDIR}/* ${ZIG_DEPSDIR}/${dir} +. endfor +. endfor + @${RMDIR} ${ZIG_TMPDEPSDIR} + +ZIG_ENV+= DESTDIR=${STAGEDIR} +ZIG_ARGS+= --prefix ${PREFIX} --system ${ZIG_DEPSDIR} --verbose \ + -Dcpu=${ZIG_CPUTYPE} \ + ${"${WITH_DEBUG}" != "":?:--release=fast} \ + ${"${WITH_DEBUG}" != "":?-Doptimize=Debug:-Doptimize=ReleaseSmall} \ + ${ZIG_ARGS_${FLAVOR}} +DO_MAKE_BUILD?= ${SETENVI} ${WRK_ENV} ${ZIG_ENV} ${ZIG_CMD} build \ + ${_MAKE_JOBS} ${ZIG_ARGS} +. if !target(do-build) +do-build: + @${DO_NADA} +. endif + +. if !target(do-install) +do-install: + @(cd ${BUILD_WRKSRC}; if ! ${DO_MAKE_BUILD}; then \ + if [ -n "${BUILD_FAIL_MESSAGE}" ] ; then \ + ${ECHO_MSG} "===> Compilation failed unexpectedly."; \ + (${ECHO_CMD} "${BUILD_FAIL_MESSAGE}") | ${FMT_80} ; \ + fi; \ + ${FALSE}; \ + fi) +. endif + +.endif |