v

Зеркало из https://github.com/vlang/v
Форк
0
/
GNUmakefile 
214 строк · 4.5 Кб
1
CC ?= cc
2
CFLAGS ?=
3
LDFLAGS ?=
4
TMPDIR ?= /tmp
5
VROOT  ?= .
6
VC     ?= ./vc
7
VEXE   ?= ./v
8
VCREPO ?= https://github.com/vlang/vc
9
TCCREPO ?= https://github.com/vlang/tccbin
10
LEGACYREPO ?= https://github.com/macports/macports-legacy-support
11

12
VCFILE := v.c
13
TMPTCC := $(VROOT)/thirdparty/tcc
14
LEGACYLIBS := $(VROOT)/thirdparty/legacy
15
TMPLEGACY := $(LEGACYLIBS)/source
16
TCCOS := unknown
17
TCCARCH := unknown
18
GITCLEANPULL := git clean -xf && git pull --quiet
19
GITFASTCLONE := git clone --filter=blob:none --quiet
20

21
#### Platform detections and overrides:
22
_SYS := $(shell uname 2>/dev/null || echo Unknown)
23
_SYS := $(patsubst MSYS%,MSYS,$(_SYS))
24
_SYS := $(patsubst MINGW%,MinGW,$(_SYS))
25

26
ifneq ($(filter $(_SYS),MSYS MinGW),)
27
WIN32 := 1
28
VEXE := ./v.exe
29
endif
30

31
ifeq ($(_SYS),Linux)
32
LINUX := 1
33
TCCOS := linux
34
ifneq ($(shell ldd /bin/ls | grep musl),)
35
TCCOS := linuxmusl
36
endif
37
endif
38

39
ifeq ($(_SYS),Darwin)
40
MAC := 1
41
TCCOS := macos
42
ifeq ($(shell expr $(shell uname -r | cut -d. -f1) \<= 15), 1)
43
LEGACY := 1
44
endif
45
endif
46

47
ifeq ($(_SYS),FreeBSD)
48
TCCOS := freebsd
49
LDFLAGS += -lexecinfo
50
endif
51

52
ifeq ($(_SYS),NetBSD)
53
TCCOS := netbsd
54
LDFLAGS += -lexecinfo
55
endif
56

57
ifeq ($(_SYS),OpenBSD)
58
TCCOS := openbsd
59
LDFLAGS += -lexecinfo
60
endif
61

62
ifdef ANDROID_ROOT
63
ANDROID := 1
64
undefine LINUX
65
TCCOS := android
66
endif
67
#####
68

69
ifdef WIN32
70
TCCOS := windows
71
VCFILE := v_win.c
72
endif
73

74
TCCARCH := $(shell uname -m 2>/dev/null || echo unknown)
75

76
ifeq ($(TCCARCH),x86_64)
77
	TCCARCH := amd64
78
else
79
ifneq ($(filter x86%,$(TCCARCH)),)
80
	TCCARCH := i386
81
else
82
ifeq ($(TCCARCH),arm64)
83
	TCCARCH := arm64
84
else
85
ifneq ($(filter arm%,$(TCCARCH)),)
86
	TCCARCH := arm
87
# otherwise, just use the arch name
88
endif
89
endif
90
endif
91
endif
92

93
.PHONY: all clean rebuild check fresh_vc fresh_tcc fresh_legacy check_for_working_tcc
94

95
ifdef prod
96
VFLAGS+=-prod
97
endif
98

99
all: latest_vc latest_tcc latest_legacy
100
ifdef WIN32
101
	$(CC) $(CFLAGS) -std=c99 -municode -w -o v1.exe $(VC)/$(VCFILE) $(LDFLAGS) -lws2_32
102
	v1.exe -no-parallel -o v2.exe $(VFLAGS) cmd/v
103
	v2.exe -o $(VEXE) $(VFLAGS) cmd/v
104
	$(RM) v1.exe
105
	$(RM) v2.exe
106
else
107
ifdef LEGACY
108
	$(MAKE) -C $(TMPLEGACY)
109
	$(MAKE) -C $(TMPLEGACY) PREFIX=$(realpath $(LEGACYLIBS)) CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) install
110
	rm -rf $(TMPLEGACY)
111
	$(eval override LDFLAGS+=-L$(realpath $(LEGACYLIBS))/lib -lMacportsLegacySupport)
112
endif
113
	$(CC) $(CFLAGS) -std=gnu99 -w -o v1.exe $(VC)/$(VCFILE) -lm -lpthread $(LDFLAGS)
114
	./v1.exe -no-parallel -o v2.exe $(VFLAGS) cmd/v
115
	./v2.exe -nocache -o $(VEXE) $(VFLAGS) cmd/v
116
	rm -rf v1.exe v2.exe
117
endif
118
	@$(VEXE) run cmd/tools/detect_tcc.v
119
	@echo "V has been successfully built"
120
	@$(VEXE) -version
121

122
clean:
123
	rm -rf $(TMPTCC)
124
	rm -rf $(LEGACYLIBS)
125
	rm -rf $(VC)
126

127
rebuild: clean all
128

129
ifndef local
130
latest_vc: $(VC)/.git/config
131
	cd $(VC) && $(GITCLEANPULL)
132
else
133
latest_vc:
134
	@echo "Using local vc"
135
endif
136

137
check_for_working_tcc:
138
	@$(TMPTCC)/tcc.exe --version > /dev/null 2> /dev/null || echo "The executable '$(TMPTCC)/tcc.exe' does not work."
139

140
fresh_vc:
141
	rm -rf $(VC)
142
	$(GITFASTCLONE) $(VCREPO) $(VC)
143

144
ifndef local
145
latest_tcc: $(TMPTCC)/.git/config
146
	cd $(TMPTCC) && $(GITCLEANPULL)
147
ifneq (,$(wildcard ./tcc.exe))
148
	@$(MAKE) --quiet check_for_working_tcc 2> /dev/null
149
endif
150

151
else
152
latest_tcc:
153
	@echo "Using local tcc"
154
	@$(MAKE) --quiet check_for_working_tcc 2> /dev/null
155
endif
156

157
fresh_tcc:
158
	rm -rf $(TMPTCC)
159
ifndef local
160
# Check whether a TCC branch exists for the user's system configuration.
161
ifneq (,$(findstring thirdparty-$(TCCOS)-$(TCCARCH), $(shell git ls-remote --heads $(TCCREPO) | sed 's/^[a-z0-9]*\trefs.heads.//')))
162
	$(GITFASTCLONE) --branch thirdparty-$(TCCOS)-$(TCCARCH) $(TCCREPO) $(TMPTCC)
163
	@$(MAKE) --quiet check_for_working_tcc 2> /dev/null
164
else
165
	@echo 'Pre-built TCC not available for thirdparty-$(TCCOS)-$(TCCARCH) at $(TCCREPO), will use the system compiler: $(CC)'
166
	$(GITFASTCLONE) --branch thirdparty-unknown-unknown $(TCCREPO) $(TMPTCC)
167
endif
168
else
169
	@echo "Using local tccbin"
170
	@$(MAKE) --quiet check_for_working_tcc 2> /dev/null
171
endif
172

173
ifndef local
174
latest_legacy: $(TMPLEGACY)/.git/config
175
ifdef LEGACY
176
	cd $(TMPLEGACY) && $(GITCLEANPULL)
177
endif
178
else
179
latest_legacy:
180
ifdef LEGACY
181
	@echo "Using local legacysupport"
182
endif
183
endif
184

185
fresh_legacy:
186
	rm -rf $(LEGACYLIBS)
187
	$(GITFASTCLONE) $(LEGACYREPO) $(TMPLEGACY)
188

189
$(TMPTCC)/.git/config:
190
	$(MAKE) fresh_tcc
191

192
$(VC)/.git/config:
193
	$(MAKE) fresh_vc
194

195
$(TMPLEGACY)/.git/config:
196
ifdef LEGACY
197
	$(MAKE) fresh_legacy
198
endif
199

200
asan:
201
	$(MAKE) all CFLAGS='-fsanitize=address,undefined'
202

203
selfcompile:
204
	$(VEXE) -cg -o v cmd/v
205

206
selfcompile-static:
207
	$(VEXE) -cg -cflags '--static' -o v-static cmd/v
208

209
### NB: Please keep this Makefile and make.bat simple.
210
install:
211
	@echo 'Please use `sudo ./v symlink` instead.'
212

213
check:
214
	$(VEXE) test-all
215

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.