5
5
# https://github.com/lengjingzju/cbuild-ng #
6
6
############################################
7
7
8
- ############# Date: 2023-08-18 #############
8
+ ############# Date: 2023-08-28 #############
9
9
10
10
# The default behavior only includes inc.env.mk and inc.ins.mk.
11
11
# INC_MAKES can be set to a combination of `disenv` `conf` `app` `mod` `disins`.
@@ -109,7 +109,7 @@ DEP_PREFIX := $(DEPDIR)
109
109
endif
110
110
111
111
define link_hdrs
112
- $(addprefix -I,$(addprefix $(DEP_PREFIX),/include /usr/include /usr/local/include) \
112
+ $(addprefix -I,$(addprefix $(DEP_PREFIX),/include /usr/include /usr/local/include) \
113
113
$(if $(SEARCH_HDRS),$(wildcard \
114
114
$(addprefix $(DEP_PREFIX)/include/,$(SEARCH_HDRS)) \
115
115
$(addprefix $(DEP_PREFIX)/usr/include/,$(SEARCH_HDRS)) \
@@ -178,6 +178,17 @@ endif
178
178
export CROSS_COMPILE
179
179
endif
180
180
181
+ ifeq ($(COMPILER_COLLECTION),clang)
182
+ CC := $(CROSS_COMPILE)clang
183
+ CPP := $(CROSS_COMPILE)clang -E
184
+ CXX := $(CROSS_COMPILE)clang++
185
+ AS := $(CROSS_COMPILE)llvm-as
186
+ LD := $(CROSS_COMPILE)lld
187
+ AR := $(CROSS_COMPILE)llvm-ar
188
+ RANLIB := $(CROSS_COMPILE)llvm-ranlib
189
+ OBJCOPY := $(CROSS_COMPILE)llvm-objcopy
190
+ STRIP := $(CROSS_COMPILE)llvm-strip
191
+ else
181
192
CC := $(CROSS_COMPILE)gcc
182
193
CPP := $(CROSS_COMPILE)gcc -E
183
194
CXX := $(CROSS_COMPILE)g++
@@ -187,13 +198,25 @@ AR := $(CROSS_COMPILE)ar
187
198
RANLIB := $(CROSS_COMPILE)ranlib
188
199
OBJCOPY := $(CROSS_COMPILE)objcopy
189
200
STRIP := $(CROSS_COMPILE)strip
201
+ endif
190
202
export CC CXX CPP AS LD AR RANLIB OBJCOPY STRIP
191
203
192
204
else # NATIVE_BUILD
193
205
194
206
undefine ARCH CROSS_COMPILE
195
207
unexport ARCH CROSS_COMPILE
196
208
209
+ ifeq ($(COMPILER_COLLECTION),clang)
210
+ CC := clang
211
+ CPP := clang -E
212
+ CXX := clang++
213
+ AS := llvm-as
214
+ LD := lld
215
+ AR := llvm-ar
216
+ RANLIB := llvm-ranlib
217
+ OBJCOPY := llvm-objcopy
218
+ STRIP := llvm-strip
219
+ else
197
220
CC := gcc
198
221
CPP := gcc -E
199
222
CXX := g++
@@ -203,6 +226,7 @@ AR := ar
203
226
RANLIB := ranlib
204
227
OBJCOPY := objcopy
205
228
STRIP := strip
229
+ endif
206
230
export CC CXX CPP AS LD AR RANLIB OBJCOPY STRIP
207
231
208
232
endif # NATIVE_BUILD
@@ -449,11 +473,21 @@ endif
449
473
imake_cpflags += $(SANITIZER_FLAG)
450
474
imake_ldflags += $(SANITIZER_FLAG)
451
475
476
+ ifeq ($(ENV_ANALYZER),y)
477
+ ifneq ($(filter %gcc,$(CC)), )
452
478
# For more description, refer to https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
453
- ifeq ($(ENV_ANALYZER)-$( shell expr `$( CC) -dumpversion` \>= 10),y- 1)
479
+ ifeq ($(shell expr `PATH=$(PATH) $( CC) -dumpversion` \>= 10),1)
454
480
imake_cpflags += -fanalyzer
455
481
imake_ldflags += -fanalyzer
456
482
endif
483
+ else
484
+ # For more description, refer to https://clang.llvm.org/docs/ClangStaticAnalyzer.html
485
+ # clang --analyze -Xanalyzer -analyzer-checker=<package> <source-files>
486
+ # <package> can be got from `clang -cc1 -analyzer-checker-help`
487
+ imake_cpflags += --analyze
488
+ imake_ldflags += --analyze
489
+ endif
490
+ endif
457
491
458
492
imake_cpflags += $(IMAKE_CPFLAGS)
459
493
imake_ldflags += $(IMAKE_LDFLAGS)
@@ -481,6 +515,10 @@ define set_flags
481
515
$(foreach v,$(2),$(eval $(1)_$(patsubst %,%.o,$(basename $(v))) := $(3)))
482
516
endef
483
517
518
+ define set_links
519
+ -Wl,-Bstatic $(addprefix -l,$(1)) -Wl,-Bdynamic $(addprefix -l,$(2))
520
+ endef
521
+
484
522
define all_ver_obj
485
523
$(strip \
486
524
$(if $(word 4,$(1)), \
@@ -563,7 +601,7 @@ $$(OBJ_PREFIX)/$(1): PRIVATE_CPFLAGS := -fPIC $(4)
563
601
$$(OBJ_PREFIX)/$(1): $$(call translate_obj,$(2)) $(3) $(5)
564
602
@$(COLORECHO) "\033[032mlib:\033[0m \033[44m$$@\033[0m"
565
603
@rm -f $$@
566
- @$$(AR) r $$@ $$(call translate_obj,$(2)) -c
604
+ @$$(AR) rc $$@ $$(call translate_obj,$(2))
567
605
ifneq ($(3), )
568
606
@echo OPEN $$@ >
[email protected] $(foreach lib,$(3),
569
607
@echo ADDLIB $(lib) >>
[email protected] )
0 commit comments