Skip to content

Commit 5bc7a74

Browse files
committed
zig support
Signed-off-by: CrazyMax <[email protected]>
1 parent 5b413d3 commit 5bc7a74

File tree

3 files changed

+155
-9
lines changed

3 files changed

+155
-9
lines changed

src/test-go.bats

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,71 @@ testHelloCGO() {
477477
assert_output --partial "PKG_CONFIG=$(xx-info triple)-pkg-config"
478478
}
479479

480+
testHelloCGOZig() {
481+
export CGO_ENABLED=1
482+
add zig
483+
run xx-go build -x -o /tmp/a.out ./fixtures/hello_cgo.go
484+
assert_success
485+
run xx-verify /tmp/a.out
486+
assert_success
487+
if ! xx-info is-cross; then
488+
run /tmp/a.out
489+
assert_success
490+
assert_output "hello cgo"
491+
fi
492+
}
493+
494+
@test "native-hellocgo-zig" {
495+
unset TARGETARCH
496+
testHelloCGOZig
497+
}
498+
499+
@test "amd64-hellocgo-zig" {
500+
export TARGETARCH=amd64
501+
testHelloCGOZig
502+
}
503+
504+
@test "arm64-hellocgo-zig" {
505+
export TARGETARCH=arm64
506+
testHelloCGOZig
507+
}
508+
509+
@test "arm-hellocgo-zig" {
510+
export TARGETARCH=arm
511+
testHelloCGOZig
512+
}
513+
514+
@test "ppc64le-hellocgo-zig" {
515+
export TARGETARCH=ppc64le
516+
testHelloCGOZig
517+
}
518+
519+
@test "riscv64-hellocgo-zig" {
520+
if ! supportRiscVCGo; then
521+
skip "RISC-V CGO not supported"
522+
fi
523+
export TARGETARCH=riscv64
524+
testHelloCGOZig
525+
}
526+
527+
@test "386-hellocgo-zig" {
528+
export TARGETARCH=386
529+
testHelloCGOZig
530+
}
531+
532+
@test "arm64-cgoenv-zig" {
533+
export TARGETARCH=arm64
534+
export CGO_ENABLED=1
535+
536+
add zig
537+
# single/double quotes changed in between go versions
538+
run sh -c "xx-go env | sed 's/[\"'\'']//g'"
539+
assert_success
540+
assert_output --partial "CC=zig cc -target $(xx-info zig-triple)"
541+
assert_output --partial "CXX=zig c++ -target $(xx-info zig-triple)"
542+
del zig
543+
}
544+
480545
@test "wrap-unwrap" {
481546
target="arm64"
482547
if [ "$(xx-info arch)" = "arm64" ]; then target="amd64"; fi

src/xx-go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,20 @@ if command -v clang >/dev/null 2>/dev/null; then
8686
fi
8787
fi
8888

89-
if command -v "$XX_TRIPLE-ar" >/dev/null 2>/dev/null; then
90-
export AR="$XX_TRIPLE-ar"
91-
ar_set=1
92-
fi
93-
94-
if command -v "$XX_TRIPLE-pkg-config" >/dev/null 2>/dev/null; then
95-
export PKG_CONFIG="$XX_TRIPLE-pkg-config"
96-
pkgconfig_set=1
89+
if command -v "zig" >/dev/null 2>/dev/null; then
90+
export CC="zig cc -target $XX_ZIG_TRIPLE"
91+
c_set=1
92+
export CXX="zig c++ -target $XX_ZIG_TRIPLE"
93+
cxx_set=1
94+
else
95+
if command -v "$XX_TRIPLE-ar" >/dev/null 2>/dev/null; then
96+
export AR="$XX_TRIPLE-ar"
97+
ar_set=1
98+
fi
99+
if command -v "$XX_TRIPLE-pkg-config" >/dev/null 2>/dev/null; then
100+
export PKG_CONFIG="$XX_TRIPLE-pkg-config"
101+
pkgconfig_set=1
102+
fi
97103
fi
98104

99105
if [ -z "$GOBIN" ] && [ -n "$GOPATH" ] && [ -n "$GOARCH" ] && [ -n "$GOOS" ]; then

src/xx-info

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
: "${XX_RHEL_ARCH=unknown}"
1616
: "${XX_OS_VERSION=}"
1717
: "${XX_TRIPLE=unknown-unknown-none}"
18+
: "${XX_ZIG_TRIPLE=unknown-unknown-none}"
1819
: "${XX_VENDOR=}"
1920
: "${XX_LIBC=}"
2021

@@ -228,10 +229,17 @@ case "$TARGETARCH" in
228229
XX_ALPINE_ARCH="x86_64"
229230
XX_RHEL_ARCH="x86_64"
230231
XX_TRIPLE="x86_64${vendor}-linux-${XX_LIBC}"
232+
if [ "$XX_LIBC" = "musl" ]; then
233+
XX_ZIG_TRIPLE="x86_64-linux-musl"
234+
else
235+
XX_ZIG_TRIPLE="x86_64-linux-gnu"
236+
fi
231237
if [ "$TARGETOS" = "darwin" ]; then
232238
XX_TRIPLE="x86_64${vendor}-macos${MACOSX_VERSION_MIN}"
239+
XX_ZIG_TRIPLE="x86_64-macos-none"
233240
elif [ "$TARGETOS" = "windows" ]; then
234241
XX_TRIPLE="x86_64-w64-mingw32"
242+
XX_ZIG_TRIPLE="x86_64-windows-gnu"
235243
fi
236244
;;
237245
"arm64")
@@ -240,11 +248,18 @@ case "$TARGETARCH" in
240248
XX_ALPINE_ARCH="aarch64"
241249
XX_RHEL_ARCH="aarch64"
242250
XX_TRIPLE="aarch64${vendor}-linux-${XX_LIBC}"
251+
if [ "$XX_LIBC" = "musl" ]; then
252+
XX_ZIG_TRIPLE="aarch64-linux-musl"
253+
else
254+
XX_ZIG_TRIPLE="aarch64-linux-gnu"
255+
fi
243256
if [ "$TARGETOS" = "darwin" ]; then
244257
XX_MARCH="arm64"
245258
XX_TRIPLE="arm64${vendor}-macos${MACOSX_VERSION_MIN}"
259+
XX_ZIG_TRIPLE="aarch64-macos-none"
246260
elif [ "$TARGETOS" = "windows" ]; then
247261
XX_TRIPLE="aarch64-w64-mingw32"
262+
XX_ZIG_TRIPLE="aarch64-windows-gnu"
248263
fi
249264
;;
250265
"arm")
@@ -259,6 +274,11 @@ case "$TARGETARCH" in
259274
triplearch="armv7"
260275
fi
261276
XX_TRIPLE="${triplearch}${vendor}-linux-${XX_LIBC}eabihf"
277+
if [ "$XX_LIBC" = "musl" ]; then
278+
XX_ZIG_TRIPLE="arm-linux-musleabihf"
279+
else
280+
XX_ZIG_TRIPLE="arm-linux-gnueabihf"
281+
fi
262282
if [ "$TARGETVARIANT" = "v6" ]; then
263283
XX_MARCH="armv6l"
264284
XX_DEBIAN_ARCH="armel"
@@ -268,6 +288,11 @@ case "$TARGETARCH" in
268288
if [ "$XX_VENDOR" = "alpine" ]; then
269289
XX_TRIPLE="armv6${vendor}-linux-${XX_LIBC}eabihf"
270290
fi
291+
if [ "$XX_LIBC" = "musl" ]; then
292+
XX_ZIG_TRIPLE="arm-linux-musleabi"
293+
else
294+
XX_ZIG_TRIPLE="arm-linux-gnueabi"
295+
fi
271296
fi
272297
if [ "$TARGETVARIANT" = "v5" ]; then
273298
XX_MARCH="armv5l"
@@ -278,10 +303,15 @@ case "$TARGETARCH" in
278303
if [ "$XX_VENDOR" = "alpine" ]; then
279304
XX_TRIPLE="armv5${vendor}-linux-${XX_LIBC}eabi"
280305
fi
306+
if [ "$XX_LIBC" = "musl" ]; then
307+
XX_ZIG_TRIPLE="arm-linux-musleabi"
308+
else
309+
XX_ZIG_TRIPLE="arm-linux-gnueabi"
310+
fi
281311
fi
282-
283312
if [ "$TARGETOS" = "windows" ]; then
284313
XX_TRIPLE="armv7-w64-mingw32"
314+
XX_ZIG_TRIPLE="arm-windows-gnu"
285315
fi
286316
;;
287317
"riscv64")
@@ -294,20 +324,35 @@ case "$TARGETARCH" in
294324
triplearch="${RISCV64_TARGET_ARCH}"
295325
fi
296326
XX_TRIPLE="${triplearch}${vendor}-linux-${XX_LIBC}"
327+
if [ "$XX_LIBC" = "musl" ]; then
328+
XX_ZIG_TRIPLE="riscv64-linux-musl"
329+
else
330+
XX_ZIG_TRIPLE="riscv64-linux-gnu"
331+
fi
297332
;;
298333
"ppc64le")
299334
XX_MARCH="ppc64le"
300335
XX_DEBIAN_ARCH="ppc64el"
301336
XX_ALPINE_ARCH="ppc64le"
302337
XX_RHEL_ARCH="ppc64le"
303338
XX_TRIPLE="powerpc64le${vendor}-linux-${XX_LIBC}"
339+
if [ "$XX_LIBC" = "musl" ]; then
340+
XX_ZIG_TRIPLE="powerpc64le-linux-musl"
341+
else
342+
XX_ZIG_TRIPLE="powerpc64le-linux-gnu"
343+
fi
304344
;;
305345
"s390x")
306346
XX_MARCH="s390x"
307347
XX_DEBIAN_ARCH="s390x"
308348
XX_ALPINE_ARCH="s390x"
309349
XX_RHEL_ARCH="s390x"
310350
XX_TRIPLE="s390x${vendor}-linux-${XX_LIBC}"
351+
if [ "$XX_LIBC" = "musl" ]; then
352+
XX_ZIG_TRIPLE="s390x-linux-musl"
353+
else
354+
XX_ZIG_TRIPLE="s390x-linux-gnu"
355+
fi
311356
;;
312357
"386")
313358
XX_MARCH="i386"
@@ -318,8 +363,14 @@ case "$TARGETARCH" in
318363
if [ "$XX_VENDOR" = "alpine" ]; then
319364
XX_TRIPLE="i586${vendor}-linux-${XX_LIBC}"
320365
fi
366+
if [ "$XX_LIBC" = "musl" ]; then
367+
XX_ZIG_TRIPLE="x86-linux-musl"
368+
else
369+
XX_ZIG_TRIPLE="x86-linux-gnu"
370+
fi
321371
if [ "$TARGETOS" = "windows" ]; then
322372
XX_TRIPLE="i686-w64-mingw32"
373+
XX_ZIG_TRIPLE="x86-windows-gnu"
323374
fi
324375
;;
325376
"mips")
@@ -328,27 +379,47 @@ case "$TARGETARCH" in
328379
XX_ALPINE_ARCH="mips"
329380
XX_RHEL_ARCH="mips"
330381
XX_TRIPLE="mips${vendor}-linux-${XX_LIBC}"
382+
if [ "$XX_LIBC" = "musl" ]; then
383+
XX_ZIG_TRIPLE="mips-linux-musl"
384+
else
385+
XX_ZIG_TRIPLE="mips-linux-gnueabi"
386+
fi
331387
;;
332388
"mipsle")
333389
XX_MARCH="mipsle"
334390
XX_DEBIAN_ARCH="mipsel"
335391
XX_ALPINE_ARCH="mipsle"
336392
XX_RHEL_ARCH="mipsel"
337393
XX_TRIPLE="mipsel${vendor}-linux-${XX_LIBC}"
394+
if [ "$XX_LIBC" = "musl" ]; then
395+
XX_ZIG_TRIPLE="mipsel-linux-musl"
396+
else
397+
XX_ZIG_TRIPLE="mipsel-linux-gnueabi"
398+
fi
338399
;;
339400
"mips64")
340401
XX_MARCH="mips64"
341402
XX_DEBIAN_ARCH="mips64"
342403
XX_ALPINE_ARCH="mips64"
343404
XX_RHEL_ARCH="mips64"
344405
XX_TRIPLE="mips64${vendor}-linux-${XX_LIBC}abi64"
406+
if [ "$XX_LIBC" = "musl" ]; then
407+
XX_ZIG_TRIPLE="mips64-linux-musl"
408+
else
409+
XX_ZIG_TRIPLE="mips64-linux-gnuabi64"
410+
fi
345411
;;
346412
"mips64le")
347413
XX_MARCH="mips64le"
348414
XX_DEBIAN_ARCH="mips64el"
349415
XX_ALPINE_ARCH="mips64le"
350416
XX_RHEL_ARCH="mips64el"
351417
XX_TRIPLE="mips64el${vendor}-linux-${XX_LIBC}abi64"
418+
if [ "$XX_LIBC" = "musl" ]; then
419+
XX_ZIG_TRIPLE="mips64el-linux-musl"
420+
else
421+
XX_ZIG_TRIPLE="mips64el-linux-gnuabi64"
422+
fi
352423
;;
353424
esac
354425

@@ -404,6 +475,9 @@ case "$1" in
404475
"triple")
405476
echo "$XX_TRIPLE"
406477
;;
478+
"zig-triple")
479+
echo "$XX_ZIG_TRIPLE"
480+
;;
407481
"vendor")
408482
echo "$XX_VENDOR"
409483
;;
@@ -420,6 +494,7 @@ case "$1" in
420494
echo "XX_PKG_ARCH=${XX_PKG_ARCH}"
421495
fi
422496
echo "XX_TRIPLE=${XX_TRIPLE}"
497+
echo "XX_ZIG_TRIPLE=${XX_ZIG_TRIPLE}"
423498
echo "XX_LIBC=${XX_LIBC}"
424499
echo "TARGETOS=${TARGETOS}"
425500
echo "TARGETARCH=${TARGETARCH}"

0 commit comments

Comments
 (0)