aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/Makefile
diff options
context:
space:
mode:
authorIndrajith K L2022-12-03 17:00:20 +0530
committerIndrajith K L2022-12-03 17:00:20 +0530
commitf5c4671bfbad96bf346bd7e9a21fc4317b4959df (patch)
tree2764fc62da58f2ba8da7ed341643fc359873142f /v_windows/v/Makefile
downloadcli-tools-windows-master.tar.gz
cli-tools-windows-master.tar.bz2
cli-tools-windows-master.zip
Adds most of the toolsHEADmaster
Diffstat (limited to 'v_windows/v/Makefile')
-rw-r--r--v_windows/v/Makefile154
1 files changed, 154 insertions, 0 deletions
diff --git a/v_windows/v/Makefile b/v_windows/v/Makefile
new file mode 100644
index 0000000..fd87662
--- /dev/null
+++ b/v_windows/v/Makefile
@@ -0,0 +1,154 @@
+CC ?= cc
+CFLAGS ?=
+LDFLAGS ?=
+TMPDIR ?= /tmp
+VROOT ?= .
+VC ?= ./vc
+V ?= ./v
+VCREPO ?= https://github.com/vlang/vc
+TCCREPO ?= https://github.com/vlang/tccbin
+
+VCFILE := v.c
+TMPTCC := $(VROOT)/thirdparty/tcc
+TCCOS := unknown
+TCCARCH := unknown
+GITCLEANPULL := git clean -xf && git pull --quiet
+GITFASTCLONE := git clone --depth 1 --quiet --single-branch
+
+#### Platform detections and overrides:
+_SYS := $(shell uname 2>/dev/null || echo Unknown)
+_SYS := $(patsubst MSYS%,MSYS,$(_SYS))
+_SYS := $(patsubst MINGW%,MinGW,$(_SYS))
+
+ifneq ($(filter $(_SYS),MSYS MinGW),)
+WIN32 := 1
+V:=./v.exe
+endif
+
+ifeq ($(_SYS),Linux)
+LINUX := 1
+TCCOS := linux
+endif
+
+ifeq ($(_SYS),Darwin)
+MAC := 1
+TCCOS := macos
+endif
+
+ifeq ($(_SYS),FreeBSD)
+TCCOS := freebsd
+LDFLAGS += -lexecinfo
+endif
+
+ifeq ($(_SYS),NetBSD)
+TCCOS := netbsd
+LDFLAGS += -lexecinfo
+endif
+
+ifdef ANDROID_ROOT
+ANDROID := 1
+undefine LINUX
+TCCOS := android
+endif
+#####
+
+ifdef WIN32
+TCCOS := windows
+VCFILE := v_win.c
+endif
+
+TCCARCH := $(shell uname -m 2>/dev/null || echo unknown)
+
+ifeq ($(TCCARCH),x86_64)
+ TCCARCH := amd64
+else
+ifneq ($(filter x86%,$(TCCARCH)),)
+ TCCARCH := i386
+else
+ifeq ($(TCCARCH),arm64)
+ TCCARCH := arm64
+else
+ifneq ($(filter arm%,$(TCCARCH)),)
+ TCCARCH := arm
+# otherwise, just use the arch name
+endif
+endif
+endif
+endif
+
+.PHONY: all clean fresh_vc fresh_tcc
+
+ifdef prod
+VFLAGS+=-prod
+endif
+
+all: latest_vc latest_tcc
+ifdef WIN32
+ $(CC) $(CFLAGS) -std=c99 -municode -w -o $(V) $(VC)/$(VCFILE) $(LDFLAGS)
+ $(V) -o v2.exe $(VFLAGS) cmd/v
+ move /y v2.exe v.exe
+else
+ $(CC) $(CFLAGS) -std=gnu99 -w -o $(V) $(VC)/$(VCFILE) -lm -lpthread $(LDFLAGS)
+ $(V) -o v2.exe $(VFLAGS) cmd/v
+ mv -f v2.exe v
+endif
+ @echo "V has been successfully built"
+ @$(V) -version
+
+clean:
+ rm -rf $(TMPTCC)
+ rm -rf $(VC)
+
+ifndef local
+latest_vc: $(VC)/.git/config
+ cd $(VC) && $(GITCLEANPULL)
+else
+latest_vc:
+ @echo "Using local vc"
+endif
+
+fresh_vc:
+ rm -rf $(VC)
+ $(GITFASTCLONE) $(VCREPO) $(VC)
+
+ifndef local
+latest_tcc: $(TMPTCC)/.git/config
+ cd $(TMPTCC) && $(GITCLEANPULL)
+else
+latest_tcc:
+ @echo "Using local tcc"
+endif
+
+fresh_tcc:
+ rm -rf $(TMPTCC)
+ifndef local
+# Check wether a TCC branch exists for the user's system configuration.
+ifneq (,$(findstring thirdparty-$(TCCOS)-$(TCCARCH), $(shell git ls-remote --heads $(TCCREPO) | sed 's/^[a-z0-9]*\trefs.heads.//')))
+ $(GITFASTCLONE) --branch thirdparty-$(TCCOS)-$(TCCARCH) $(TCCREPO) $(TMPTCC)
+else
+ @echo 'Pre-built TCC not available for thirdparty-$(TCCOS)-$(TCCARCH) at $(TCCREPO), will use the system compiler: $(CC)'
+ $(GITFASTCLONE) --branch thirdparty-unknown-unknown $(TCCREPO) $(TMPTCC)
+endif
+else
+ @echo "Using local tccbin"
+endif
+
+$(TMPTCC)/.git/config:
+ $(MAKE) fresh_tcc
+
+$(VC)/.git/config:
+ $(MAKE) fresh_vc
+
+asan:
+ $(MAKE) all CFLAGS='-fsanitize=address,undefined'
+
+selfcompile:
+ $(V) -cg -o v cmd/v
+
+selfcompile-static:
+ $(V) -cg -cflags '--static' -o v-static cmd/v
+
+### NB: Please keep this Makefile and make.bat simple.
+install:
+ @echo 'Please use `sudo ./v symlink` instead.'
+