| @@ -1,176 +1,180 @@ | | | @@ -1,176 +1,180 @@ |
1 | # $NetBSD: build.mk,v 1.18 2023/06/27 10:41:25 riastradh Exp $ | | 1 | # $NetBSD: build.mk,v 1.19 2023/09/16 13:21:23 tnn Exp $ |
2 | | | 2 | |
3 | MESON_REQD?= 0 | | 3 | MESON_REQD?= 0 |
4 | .for version in ${MESON_REQD} | | 4 | .for version in ${MESON_REQD} |
5 | TOOL_DEPENDS+= meson>=${version}:../../devel/meson | | 5 | TOOL_DEPENDS+= meson>=${version}:../../devel/meson |
6 | .endfor | | 6 | .endfor |
7 | | | 7 | |
8 | CONFIGURE_DIRS?= . | | 8 | CONFIGURE_DIRS?= . |
9 | BUILD_DIRS?= ${CONFIGURE_DIRS} | | 9 | BUILD_DIRS?= ${CONFIGURE_DIRS} |
10 | INSTALL_DIRS?= ${CONFIGURE_DIRS} | | 10 | INSTALL_DIRS?= ${CONFIGURE_DIRS} |
11 | TEST_DIRS?= ${CONFIGURE_DIRS} | | 11 | TEST_DIRS?= ${CONFIGURE_DIRS} |
12 | | | 12 | |
13 | .PHONY: meson-configure meson-build meson-install meson-test | | 13 | .PHONY: meson-configure meson-build meson-install meson-test |
14 | | | 14 | |
15 | # pkgsrc contains multiple llvm-config executables at multiple locations. | | 15 | # pkgsrc contains multiple llvm-config executables at multiple locations. |
16 | .if !empty(LLVM_CONFIG_PATH) | | 16 | .if !empty(LLVM_CONFIG_PATH) |
17 | MAKE_ENV+= LLVM_CONFIG_PATH=${LLVM_CONFIG_PATH:Q} | | 17 | MAKE_ENV+= LLVM_CONFIG_PATH=${LLVM_CONFIG_PATH:Q} |
18 | .endif | | 18 | .endif |
19 | | | 19 | |
| | | 20 | # Prevent use of "response files" that break pkgsrc wrappers. |
| | | 21 | # The default threshold of 64k is too low for pkgsrc. |
| | | 22 | MAKE_ENV+= MESON_RSP_THRESHOLD=262144 |
| | | 23 | |
20 | .if !defined(USE_CMAKE) | | 24 | .if !defined(USE_CMAKE) |
21 | MAKE_ENV+= CMAKE=${TOOLS_PATH.false} | | 25 | MAKE_ENV+= CMAKE=${TOOLS_PATH.false} |
22 | .endif | | 26 | .endif |
23 | | | 27 | |
24 | .include "../../mk/bsd.prefs.mk" | | 28 | .include "../../mk/bsd.prefs.mk" |
25 | | | 29 | |
26 | .if ${USE_CROSS_COMPILE:U:tl} == yes | | 30 | .if ${USE_CROSS_COMPILE:U:tl} == yes |
27 | MESON_CPU_FAMILY.amd64= x86_64 | | 31 | MESON_CPU_FAMILY.amd64= x86_64 |
28 | MESON_CPU_FAMILY.arm26?= arm | | 32 | MESON_CPU_FAMILY.arm26?= arm |
29 | MESON_CPU_FAMILY.arm32?= arm | | 33 | MESON_CPU_FAMILY.arm32?= arm |
30 | MESON_CPU_FAMILY.earm?= arm | | 34 | MESON_CPU_FAMILY.earm?= arm |
31 | MESON_CPU_FAMILY.earmeb?= arm | | 35 | MESON_CPU_FAMILY.earmeb?= arm |
32 | MESON_CPU_FAMILY.earmhf?= arm | | 36 | MESON_CPU_FAMILY.earmhf?= arm |
33 | MESON_CPU_FAMILY.earmhfeb?= arm | | 37 | MESON_CPU_FAMILY.earmhfeb?= arm |
34 | MESON_CPU_FAMILY.earmv4?= arm | | 38 | MESON_CPU_FAMILY.earmv4?= arm |
35 | MESON_CPU_FAMILY.earmv4eb?= arm | | 39 | MESON_CPU_FAMILY.earmv4eb?= arm |
36 | MESON_CPU_FAMILY.earmv5?= arm | | 40 | MESON_CPU_FAMILY.earmv5?= arm |
37 | MESON_CPU_FAMILY.earmv5eb?= arm | | 41 | MESON_CPU_FAMILY.earmv5eb?= arm |
38 | MESON_CPU_FAMILY.earmv6?= arm | | 42 | MESON_CPU_FAMILY.earmv6?= arm |
39 | MESON_CPU_FAMILY.earmv6eb?= arm | | 43 | MESON_CPU_FAMILY.earmv6eb?= arm |
40 | MESON_CPU_FAMILY.earmv6hf?= arm | | 44 | MESON_CPU_FAMILY.earmv6hf?= arm |
41 | MESON_CPU_FAMILY.earmv6hfeb?= arm | | 45 | MESON_CPU_FAMILY.earmv6hfeb?= arm |
42 | MESON_CPU_FAMILY.earmv7?= arm | | 46 | MESON_CPU_FAMILY.earmv7?= arm |
43 | MESON_CPU_FAMILY.earmv7eb?= arm | | 47 | MESON_CPU_FAMILY.earmv7eb?= arm |
44 | MESON_CPU_FAMILY.earmv7hf?= arm | | 48 | MESON_CPU_FAMILY.earmv7hf?= arm |
45 | MESON_CPU_FAMILY.earmv7hfeb?= arm | | 49 | MESON_CPU_FAMILY.earmv7hfeb?= arm |
46 | MESON_CPU_FAMILY.i386= x86 | | 50 | MESON_CPU_FAMILY.i386= x86 |
47 | MESON_CPU_FAMILY.i486= x86 | | 51 | MESON_CPU_FAMILY.i486= x86 |
48 | MESON_CPU_FAMILY.i586= x86 | | 52 | MESON_CPU_FAMILY.i586= x86 |
49 | MESON_CPU_FAMILY.i686= x86 | | 53 | MESON_CPU_FAMILY.i686= x86 |
50 | MESON_CPU_FAMILY.hppa= parisc | | 54 | MESON_CPU_FAMILY.hppa= parisc |
51 | MESON_CPU_FAMILY.m68000= m68k | | 55 | MESON_CPU_FAMILY.m68000= m68k |
52 | MESON_CPU_FAMILY.mips64eb= mips | | 56 | MESON_CPU_FAMILY.mips64eb= mips |
53 | MESON_CPU_FAMILY.mips64el= mips | | 57 | MESON_CPU_FAMILY.mips64el= mips |
54 | MESON_CPU_FAMILY.mipseb= mips | | 58 | MESON_CPU_FAMILY.mipseb= mips |
55 | MESON_CPU_FAMILY.mipsel= mips | | 59 | MESON_CPU_FAMILY.mipsel= mips |
56 | MESON_CPU_FAMILY.powerpc64= ppc64 | | 60 | MESON_CPU_FAMILY.powerpc64= ppc64 |
57 | MESON_CPU_FAMILY.powerpc= ppc | | 61 | MESON_CPU_FAMILY.powerpc= ppc |
58 | MESON_CPU_FAMILY.sh3eb= sh3 | | 62 | MESON_CPU_FAMILY.sh3eb= sh3 |
59 | MESON_CPU_FAMILY.sh3el= sh3 | | 63 | MESON_CPU_FAMILY.sh3el= sh3 |
60 | | | 64 | |
61 | MESON_CPU_ENDIAN.earmeb?= big | | 65 | MESON_CPU_ENDIAN.earmeb?= big |
62 | MESON_CPU_ENDIAN.earmhfeb?= big | | 66 | MESON_CPU_ENDIAN.earmhfeb?= big |
63 | MESON_CPU_ENDIAN.earmv4eb?= big | | 67 | MESON_CPU_ENDIAN.earmv4eb?= big |
64 | MESON_CPU_ENDIAN.earmv5eb?= big | | 68 | MESON_CPU_ENDIAN.earmv5eb?= big |
65 | MESON_CPU_ENDIAN.earmv6eb?= big | | 69 | MESON_CPU_ENDIAN.earmv6eb?= big |
66 | MESON_CPU_ENDIAN.earmv6hfeb?= big | | 70 | MESON_CPU_ENDIAN.earmv6hfeb?= big |
67 | MESON_CPU_ENDIAN.earmv7eb?= big | | 71 | MESON_CPU_ENDIAN.earmv7eb?= big |
68 | MESON_CPU_ENDIAN.earmv7hfeb?= big | | 72 | MESON_CPU_ENDIAN.earmv7hfeb?= big |
69 | MESON_CPU_ENDIAN.mips64eb= big | | 73 | MESON_CPU_ENDIAN.mips64eb= big |
70 | MESON_CPU_ENDIAN.mipseb= big | | 74 | MESON_CPU_ENDIAN.mipseb= big |
71 | MESON_CPU_ENDIAN.powerpc64= big | | 75 | MESON_CPU_ENDIAN.powerpc64= big |
72 | MESON_CPU_ENDIAN.powerpc= big | | 76 | MESON_CPU_ENDIAN.powerpc= big |
73 | MESON_CPU_ENDIAN.sh3eb= big | | 77 | MESON_CPU_ENDIAN.sh3eb= big |
74 | MESON_CPU_ENDIAN.sparc64= big | | 78 | MESON_CPU_ENDIAN.sparc64= big |
75 | MESON_CPU_ENDIAN.sparc= big | | 79 | MESON_CPU_ENDIAN.sparc= big |
76 | | | 80 | |
77 | MESON_CPU_FAMILY= ${MESON_CPU_FAMILY.${MACHINE_ARCH}:U${MACHINE_ARCH}} | | 81 | MESON_CPU_FAMILY= ${MESON_CPU_FAMILY.${MACHINE_ARCH}:U${MACHINE_ARCH}} |
78 | MESON_CPU= ${MACHINE_ARCH} | | 82 | MESON_CPU= ${MACHINE_ARCH} |
79 | MESON_CPU_ENDIAN= ${MESON_CPU_ENDIAN.${MACHINE_ARCH}:Ulittle} | | 83 | MESON_CPU_ENDIAN= ${MESON_CPU_ENDIAN.${MACHINE_ARCH}:Ulittle} |
80 | | | 84 | |
81 | MESON_CROSS_VARS+= sys_root | | 85 | MESON_CROSS_VARS+= sys_root |
82 | MESON_CROSS.sys_root= '${_CROSS_DESTDIR}' | | 86 | MESON_CROSS.sys_root= '${_CROSS_DESTDIR}' |
83 | | | 87 | |
84 | MESON_CROSS_FILE= ${WRKDIR}/.meson_cross | | 88 | MESON_CROSS_FILE= ${WRKDIR}/.meson_cross |
85 | meson-configure: ${MESON_CROSS_FILE} | | 89 | meson-configure: ${MESON_CROSS_FILE} |
86 | ${MESON_CROSS_FILE}: | | 90 | ${MESON_CROSS_FILE}: |
87 | @${STEP_MSG} Creating meson cross file | | 91 | @${STEP_MSG} Creating meson cross file |
88 | ${RUN}${ECHO} '[properties]' >$@.tmp | | 92 | ${RUN}${ECHO} '[properties]' >$@.tmp |
89 | . for _v_ in ${MESON_CROSS_VARS} | | 93 | . for _v_ in ${MESON_CROSS_VARS} |
90 | . if defined(MESON_CROSS.${_v_}) | | 94 | . if defined(MESON_CROSS.${_v_}) |
91 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${_v_}:Q} >>$@.tmp | | 95 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${_v_}:Q} >>$@.tmp |
92 | . endif | | 96 | . endif |
93 | . endfor | | 97 | . endfor |
94 | . for _v_ in ${MESON_CROSS_OPSYS_VARS} | | 98 | . for _v_ in ${MESON_CROSS_OPSYS_VARS} |
95 | . if defined(MESON_CROSS.${OPSYS}.${_v_}) | | 99 | . if defined(MESON_CROSS.${OPSYS}.${_v_}) |
96 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${OPSYS}.${_v_}:Q} >>$@.tmp | | 100 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${OPSYS}.${_v_}:Q} >>$@.tmp |
97 | . endif | | 101 | . endif |
98 | . endfor | | 102 | . endfor |
99 | . for _v_ in ${MESON_CROSS_ARCH_VARS} | | 103 | . for _v_ in ${MESON_CROSS_ARCH_VARS} |
100 | . if defined(MESON_CROSS.${MACHINE_ARCH}.${_v_}) | | 104 | . if defined(MESON_CROSS.${MACHINE_ARCH}.${_v_}) |
101 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${MACHINE_ARCH}.${_v_}:Q} >>$@.tmp | | 105 | ${RUN}${ECHO} ${_v_} = ${MESON_CROSS.${MACHINE_ARCH}.${_v_}:Q} >>$@.tmp |
102 | . endif | | 106 | . endif |
103 | . endfor | | 107 | . endfor |
104 | ${RUN}${ECHO} '[host_machine]' >>$@.tmp | | 108 | ${RUN}${ECHO} '[host_machine]' >>$@.tmp |
105 | ${RUN}${ECHO} "system = '${LOWER_OPSYS}'" >>$@.tmp | | 109 | ${RUN}${ECHO} "system = '${LOWER_OPSYS}'" >>$@.tmp |
106 | ${RUN}${ECHO} "cpu_family = '${MESON_CPU_FAMILY}'" >>$@.tmp | | 110 | ${RUN}${ECHO} "cpu_family = '${MESON_CPU_FAMILY}'" >>$@.tmp |
107 | ${RUN}${ECHO} "cpu = '${MESON_CPU}'" >>$@.tmp | | 111 | ${RUN}${ECHO} "cpu = '${MESON_CPU}'" >>$@.tmp |
108 | ${RUN}${ECHO} "endian = '${MESON_CPU_ENDIAN}'" >>$@.tmp | | 112 | ${RUN}${ECHO} "endian = '${MESON_CPU_ENDIAN}'" >>$@.tmp |
109 | ${RUN}${MV} -f $@.tmp $@ | | 113 | ${RUN}${MV} -f $@.tmp $@ |
110 | MESON_CROSS_ARGS+= --cross-file ${MESON_CROSS_FILE:Q} | | 114 | MESON_CROSS_ARGS+= --cross-file ${MESON_CROSS_FILE:Q} |
111 | | | 115 | |
112 | .endif | | 116 | .endif |
113 | | | 117 | |
114 | do-configure: meson-configure | | 118 | do-configure: meson-configure |
115 | meson-configure: | | 119 | meson-configure: |
116 | .for d in ${CONFIGURE_DIRS} | | 120 | .for d in ${CONFIGURE_DIRS} |
117 | . if ${CONFIGURE_DIRS:[#]} != 1 | | 121 | . if ${CONFIGURE_DIRS:[#]} != 1 |
118 | @${STEP_MSG} Configuring meson in ${d} | | 122 | @${STEP_MSG} Configuring meson in ${d} |
119 | . endif | | 123 | . endif |
120 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${MAKE_ENV} meson setup \ | | 124 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${MAKE_ENV} meson setup \ |
121 | --prefix ${PREFIX} \ | | 125 | --prefix ${PREFIX} \ |
122 | --libdir lib \ | | 126 | --libdir lib \ |
123 | --libexecdir libexec \ | | 127 | --libexecdir libexec \ |
124 | --mandir ${PKGMANDIR} \ | | 128 | --mandir ${PKGMANDIR} \ |
125 | --sysconfdir ${PKG_SYSCONFDIR} \ | | 129 | --sysconfdir ${PKG_SYSCONFDIR} \ |
126 | ${MESON_CROSS_ARGS} \ | | 130 | ${MESON_CROSS_ARGS} \ |
127 | --buildtype=plain ${MESON_ARGS} . output | | 131 | --buildtype=plain ${MESON_ARGS} . output |
128 | .endfor | | 132 | .endfor |
129 | | | 133 | |
130 | do-build: meson-build | | 134 | do-build: meson-build |
131 | meson-build: | | 135 | meson-build: |
132 | .for d in ${BUILD_DIRS} | | 136 | .for d in ${BUILD_DIRS} |
133 | . if ${BUILD_DIRS:[#]} != 1 | | 137 | . if ${BUILD_DIRS:[#]} != 1 |
134 | @${STEP_MSG} Building with ninja in ${d} | | 138 | @${STEP_MSG} Building with ninja in ${d} |
135 | . endif | | 139 | . endif |
136 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${MAKE_ENV} \ | | 140 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${MAKE_ENV} \ |
137 | ninja -j ${_MAKE_JOBS_N:U1} -C output | | 141 | ninja -j ${_MAKE_JOBS_N:U1} -C output |
138 | .endfor | | 142 | .endfor |
139 | | | 143 | |
140 | do-install: meson-install | | 144 | do-install: meson-install |
141 | meson-install: | | 145 | meson-install: |
142 | .for d in ${INSTALL_DIRS} | | 146 | .for d in ${INSTALL_DIRS} |
143 | ${RUN}if [ -f ${WRKSRC}/meson_post_install.py ]; then \ | | 147 | ${RUN}if [ -f ${WRKSRC}/meson_post_install.py ]; then \ |
144 | ${CHMOD} +x ${WRKSRC}/meson_post_install.py; \ | | 148 | ${CHMOD} +x ${WRKSRC}/meson_post_install.py; \ |
145 | fi | | 149 | fi |
146 | . if ${INSTALL_DIRS:[#]} != 1 | | 150 | . if ${INSTALL_DIRS:[#]} != 1 |
147 | @${STEP_MSG} Installing with ninja in ${d} | | 151 | @${STEP_MSG} Installing with ninja in ${d} |
148 | . endif | | 152 | . endif |
149 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${INSTALL_ENV} ${MAKE_ENV} \ | | 153 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${INSTALL_ENV} ${MAKE_ENV} \ |
150 | ninja -j ${_MAKE_JOBS_N:U1} -C output install | | 154 | ninja -j ${_MAKE_JOBS_N:U1} -C output install |
151 | .endfor | | 155 | .endfor |
152 | | | 156 | |
153 | do-test: meson-test | | 157 | do-test: meson-test |
154 | meson-test: | | 158 | meson-test: |
155 | .for d in ${TEST_DIRS} | | 159 | .for d in ${TEST_DIRS} |
156 | . if ${TEST_DIRS:[#]} != 1 | | 160 | . if ${TEST_DIRS:[#]} != 1 |
157 | @${STEP_MSG} Testing with ninja in ${d} | | 161 | @${STEP_MSG} Testing with ninja in ${d} |
158 | . endif | | 162 | . endif |
159 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${TEST_ENV} \ | | 163 | ${RUN}cd ${WRKSRC} && cd ${d} && ${SETENV} ${TEST_ENV} \ |
160 | ninja -j ${_MAKE_JOBS_N:U1} -C output test | | 164 | ninja -j ${_MAKE_JOBS_N:U1} -C output test |
161 | .endfor | | 165 | .endfor |
162 | | | 166 | |
163 | _VARGROUPS+= meson | | 167 | _VARGROUPS+= meson |
164 | _PKG_VARS.meson= MESON_REQD | | 168 | _PKG_VARS.meson= MESON_REQD |
165 | _PKG_VARS.meson+= CONFIGURE_DIRS | | 169 | _PKG_VARS.meson+= CONFIGURE_DIRS |
166 | _PKG_VARS.meson+= BUILD_DIRS MAKE_ENV | | 170 | _PKG_VARS.meson+= BUILD_DIRS MAKE_ENV |
167 | _PKG_VARS.meson+= TEST_DIRS TEST_ENV | | 171 | _PKG_VARS.meson+= TEST_DIRS TEST_ENV |
168 | _PKG_VARS.meson+= INSTALL_DIRS INSTALL_ENV | | 172 | _PKG_VARS.meson+= INSTALL_DIRS INSTALL_ENV |
169 | _PKG_VARS.meson+= LLVM_CONFIG_PATH | | 173 | _PKG_VARS.meson+= LLVM_CONFIG_PATH |
170 | _PKG_VARS.meson+= USE_CMAKE MESON_ARGS | | 174 | _PKG_VARS.meson+= USE_CMAKE MESON_ARGS |
171 | _USER_VARS.meson= MAKE_JOBS PKG_SYSCONFDIR | | 175 | _USER_VARS.meson= MAKE_JOBS PKG_SYSCONFDIR |
172 | _USE_VARS.meson= TOOLS_PATH.false WRKSRC PREFIX PKGMANDIR | | 176 | _USE_VARS.meson= TOOLS_PATH.false WRKSRC PREFIX PKGMANDIR |
173 | _USE_VARS.meson+= _MAKE_JOBS_N | | 177 | _USE_VARS.meson+= _MAKE_JOBS_N |
174 | _DEF_VARS.meson= TOOL_DEPENDS | | 178 | _DEF_VARS.meson= TOOL_DEPENDS |
175 | _LISTED_VARS.meson= *_ARGS *_DEPENDS | | 179 | _LISTED_VARS.meson= *_ARGS *_DEPENDS |
176 | _SORTED_VARS.meson= *_ENV | | 180 | _SORTED_VARS.meson= *_ENV |