Portable vc snapshots guard android_print with `defined(__ANDROID__) && !defined(__TERMUX__)`. Termux's compiler does not predefine __TERMUX__, so the native Termux bootstrap compiled the snapshot as plain Android and failed to link android_print, which only the android target provides. Define __TERMUX__ in the vc bootstrap when building under Termux (TERMUX_VERSION set or PREFIX under com.termux). The NDK path is unchanged. Also run the bootstrap failure handler through `sh`: on Termux the script's #!/bin/sh shebang is missing, so the handler reported "not found" (exit 127) instead of running. termux_ci.yml: the arm64 job copied build.log into /src, the runner-owned checkout, which the container user cannot write. Mount a world-writable log directory instead and upload from there. Co-authored-by: Richard Wheeler <18647491+PythonWillRule@users.noreply.github.com> Co-authored-by: WOZCODE <contact@withwoz.com>
210 lines
5.4 KiB
Makefile
210 lines
5.4 KiB
Makefile
CC ?= cc
|
|
VEXE ?= ./v
|
|
VFLAGS ?=
|
|
CFLAGS ?=
|
|
LDFLAGS ?=
|
|
|
|
# Portable VC snapshots do not embed V3. Keep their v1 executable on the full
|
|
# compatibility compiler path even when the generated C is built on a V3 host.
|
|
VC_BOOTSTRAP_DEFINE = -DCUSTOM_DEFINE_v1_fallback
|
|
|
|
all: download_vc v
|
|
|
|
.PHONY: all check download_vc install v v1
|
|
|
|
download_vc:
|
|
@set -e; \
|
|
if [ -f vc/v.c ]; then \
|
|
if command -v git >/dev/null 2>&1; then \
|
|
git -C vc/ pull --rebase; \
|
|
else \
|
|
echo "git not found; using existing vc/v.c"; \
|
|
fi; \
|
|
else \
|
|
if command -v git >/dev/null 2>&1; then \
|
|
git clone --filter=blob:none https://github.com/vlang/vc vc/; \
|
|
else \
|
|
echo "git is required to download vc/. Please install git or provide vc/v.c."; \
|
|
exit 1; \
|
|
fi; \
|
|
fi
|
|
|
|
v:
|
|
@set -e; \
|
|
sys=`uname -s 2>/dev/null || echo unknown`; \
|
|
arch=`uname -m 2>/dev/null || echo unknown`; \
|
|
if [ "`getconf LONG_BIT 2>/dev/null`" = 32 ]; then \
|
|
case "$$arch" in \
|
|
aarch64|arm64|armv8*) arch=armv7l;; \
|
|
x86_64|amd64) arch=i686;; \
|
|
esac; \
|
|
fi; \
|
|
set -- $(CFLAGS); \
|
|
ccflags=; \
|
|
unsafe_o=0; \
|
|
for arg do \
|
|
case "$$arg" in \
|
|
-O|-O0|-O1) \
|
|
ccflags="$$ccflags $$arg"; \
|
|
;; \
|
|
-O*) \
|
|
ccflags="$$ccflags $$arg"; \
|
|
unsafe_o=1; \
|
|
;; \
|
|
*) \
|
|
ccflags="$$ccflags $$arg"; \
|
|
;; \
|
|
esac; \
|
|
done; \
|
|
ccflags=$${ccflags# }; \
|
|
bootstrap_ccflags=$$ccflags; \
|
|
set -- $(LDFLAGS); \
|
|
ldflags=; \
|
|
for arg do \
|
|
ldflags="$$ldflags $$arg"; \
|
|
done; \
|
|
ldflags=$${ldflags# }; \
|
|
case "$$sys" in \
|
|
Linux) \
|
|
case "$$arch" in \
|
|
arm*) \
|
|
ldflags="$$ldflags -latomic"; \
|
|
;; \
|
|
esac; \
|
|
;; \
|
|
FreeBSD|NetBSD|OpenBSD) \
|
|
ldflags="$$ldflags -lexecinfo"; \
|
|
;; \
|
|
esac; \
|
|
ccflags=$${ccflags# }; \
|
|
ldflags=$${ldflags# }; \
|
|
if [ "$$sys" = Linux ]; then \
|
|
case "$$arch" in \
|
|
arm64|aarch64) \
|
|
if [ $$unsafe_o -eq 1 ]; then \
|
|
set -- $$ccflags; \
|
|
bootstrap_ccflags=; \
|
|
for arg do \
|
|
case "$$arg" in \
|
|
-O|-O0|-O1) \
|
|
bootstrap_ccflags="$$bootstrap_ccflags $$arg"; \
|
|
;; \
|
|
-O*) \
|
|
bootstrap_ccflags="$$bootstrap_ccflags -O1"; \
|
|
;; \
|
|
*) \
|
|
bootstrap_ccflags="$$bootstrap_ccflags $$arg"; \
|
|
;; \
|
|
esac; \
|
|
done; \
|
|
bootstrap_ccflags=$${bootstrap_ccflags# }; \
|
|
fi; \
|
|
;; \
|
|
esac; \
|
|
fi; \
|
|
bootstrap_gcflags="-gc none"; \
|
|
case " $(VFLAGS) " in \
|
|
*" -gc "*|*" -gc="*) bootstrap_gcflags="";; \
|
|
esac; \
|
|
bootstrap_ccompiler=; \
|
|
case " $(VFLAGS) " in \
|
|
*" -cc "*|*" -cc="*) ;; \
|
|
*) \
|
|
case "$$sys" in \
|
|
Linux|FreeBSD|NetBSD|OpenBSD|DragonFly) \
|
|
case "$$arch" in \
|
|
arm*|aarch64) bootstrap_ccompiler="$(CC)";; \
|
|
esac; \
|
|
;; \
|
|
esac; \
|
|
;; \
|
|
esac; \
|
|
sh cmd/tools/vc_compat.sh vc/v.c $(CC) $$bootstrap_ccflags $(VC_BOOTSTRAP_DEFINE) -std=gnu11 -w -o v1 -- -lm -lpthread $$ldflags || sh cmd/tools/cc_compilation_failed_non_windows.sh; \
|
|
set -- ./v1 -no-parallel -o v2 $$bootstrap_gcflags $(VFLAGS); \
|
|
if [ -n "$$bootstrap_ccompiler" ]; then \
|
|
set -- "$$@" -cc "$$bootstrap_ccompiler"; \
|
|
fi; \
|
|
if [ -n "$$bootstrap_ccflags" ]; then \
|
|
set -- "$$@" -cflags "$$bootstrap_ccflags"; \
|
|
fi; \
|
|
if [ -n "$$ldflags" ]; then \
|
|
set -- "$$@" -ldflags "$$ldflags"; \
|
|
fi; \
|
|
set -- "$$@" cmd/v; \
|
|
"$$@"; \
|
|
set -- ./v2 -o v $$bootstrap_gcflags $(VFLAGS); \
|
|
if [ -n "$$bootstrap_ccompiler" ]; then \
|
|
set -- "$$@" -cc "$$bootstrap_ccompiler"; \
|
|
fi; \
|
|
if [ -n "$$ccflags" ]; then \
|
|
set -- "$$@" -cflags "$$ccflags"; \
|
|
fi; \
|
|
if [ -n "$$ldflags" ]; then \
|
|
set -- "$$@" -ldflags "$$ldflags"; \
|
|
fi; \
|
|
set -- "$$@" cmd/v; \
|
|
"$$@"; \
|
|
rm -rf v1 v2; \
|
|
./v -new-compiler run ./cmd/tools/detect_tcc.v; \
|
|
echo "V has been successfully built"; \
|
|
./v version; \
|
|
./v -new-compiler run .github/problem-matchers/register_all.vsh
|
|
|
|
v1:
|
|
@set -e; \
|
|
sys=`uname -s 2>/dev/null || echo unknown`; \
|
|
arch=`uname -m 2>/dev/null || echo unknown`; \
|
|
if [ "`getconf LONG_BIT 2>/dev/null`" = 32 ]; then \
|
|
case "$$arch" in \
|
|
aarch64|arm64|armv8*) arch=armv7l;; \
|
|
x86_64|amd64) arch=i686;; \
|
|
esac; \
|
|
fi; \
|
|
set -- $(CFLAGS); \
|
|
bootstrap_ccflags=; \
|
|
unsafe_o=0; \
|
|
for arg do \
|
|
case "$$arg" in \
|
|
-O|-O0|-O1) bootstrap_ccflags="$$bootstrap_ccflags $$arg";; \
|
|
-O*) bootstrap_ccflags="$$bootstrap_ccflags $$arg"; unsafe_o=1;; \
|
|
*) bootstrap_ccflags="$$bootstrap_ccflags $$arg";; \
|
|
esac; \
|
|
done; \
|
|
bootstrap_ccflags=$${bootstrap_ccflags# }; \
|
|
set -- $(LDFLAGS); \
|
|
ldflags=; \
|
|
for arg do ldflags="$$ldflags $$arg"; done; \
|
|
ldflags=$${ldflags# }; \
|
|
case "$$sys" in \
|
|
Linux) case "$$arch" in arm*) ldflags="$$ldflags -latomic";; esac;; \
|
|
FreeBSD|NetBSD|OpenBSD) ldflags="$$ldflags -lexecinfo";; \
|
|
esac; \
|
|
ldflags=$${ldflags# }; \
|
|
if [ "$$sys" = Linux ]; then \
|
|
case "$$arch" in \
|
|
arm64|aarch64) \
|
|
if [ $$unsafe_o -eq 1 ]; then \
|
|
set -- $$bootstrap_ccflags; \
|
|
bootstrap_ccflags=; \
|
|
for arg do \
|
|
case "$$arg" in \
|
|
-O|-O0|-O1) bootstrap_ccflags="$$bootstrap_ccflags $$arg";; \
|
|
-O*) bootstrap_ccflags="$$bootstrap_ccflags -O1";; \
|
|
*) bootstrap_ccflags="$$bootstrap_ccflags $$arg";; \
|
|
esac; \
|
|
done; \
|
|
bootstrap_ccflags=$${bootstrap_ccflags# }; \
|
|
fi;; \
|
|
esac; \
|
|
fi; \
|
|
CC='$(CC)' OLDV_CCOPTIONS='$(CPPFLAGS) '"$$bootstrap_ccflags" \
|
|
OLDV_LDFLAGS="$$ldflags" \
|
|
cmd/tools/install_v1_fallback.sh '$(VEXE)' './v1_fallback'; \
|
|
echo "Built V1 compatibility compiler: ./v1_fallback"
|
|
|
|
check:
|
|
./v test-all
|
|
|
|
install:
|
|
@echo 'Please use `sudo ./v symlink` instead, or manually add the current directory to your PATH.'
|