1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# architecture makefile configure
# prefix & suffix
BIN_PREFIX =
BIN_SUFFIX = .b
OBJ_PREFIX =
OBJ_SUFFIX = .o
LIB_PREFIX = lib
LIB_SUFFIX = .a
DLL_PREFIX = lib
DLL_SUFFIX = .so
ASM_SUFFIX = .S
# prefix
PRE_ := $(if $(BIN),$(BIN)/$(PRE),)
# cc
CC_ := ${shell if [ -f "/usr/bin/clang" ]; then echo "clang"; elif [ -f "/usr/local/bin/clang" ]; then echo "clang"; else echo "gcc"; fi }
CC_ := $(if $(findstring y,$(PROF)),gcc,$(CC_))
CC = $(PRE_)$(CC_)
# ld
LD_ := ${shell if [ -f "/usr/bin/clang" ]; then echo "clang"; elif [ -f "/usr/local/bin/clang" ]; then echo "clang"; else echo "gcc"; fi }
LD_ := $(if $(findstring y,$(PROF)),gcc,$(LD_))
LD = $(PRE_)$(LD_)
# tool
AR = $(PRE_)ar
STRIP = $(PRE_)strip
RANLIB = $(PRE_)ranlib
AS = $(if $(PRE_),$(CC) -c -fPIC,yasm -f elf)
RM = rm -f
RMDIR = rm -rf
CP = cp
CPDIR = cp -r
MKDIR = mkdir -p
MAKE = make -r
# architecture flags
AHFLAGS := $(if $(AHFLAGS),$(AHFLAGS),$(if $(findstring x64,$(ARCH)),-m64,))
AHFLAGS := $(if $(AHFLAGS),$(AHFLAGS),$(if $(findstring x86,$(ARCH)),-m32,))
# check flags for x64 or x86
ifneq ($(AHFLAGS),)
ifeq ($(CXFLAGS_CHECK),)
CC_CHECK = ${shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi }
CXFLAGS_CHECK := $(call CC_CHECK,-ftrapv,) $(call CC_CHECK,-fsanitize=address,)
export CXFLAGS_CHECK
endif
ifeq ($(LDFLAGS_CHECK),)
LD_CHECK = ${shell if $(LD) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi }
LDFLAGS_CHECK := $(call LD_CHECK,-ftrapv,) $(call LD_CHECK,-fsanitize=address,)
export LDFLAGS_CHECK
endif
endif
# cxflags: .c/.cc/.cpp files
CXFLAGS_RELEASE = -fvisibility=hidden
CXFLAGS_DEBUG = -g -D__tb_debug__
CXFLAGS = $(AHFLAGS) -c -Wall -Werror -Wno-error=deprecated-declarations
CXFLAGS-I = -I
CXFLAGS-o = -o
# sse for x64 or x86
ifneq ($(AHFLAGS),)
CXFLAGS += -mssse3
endif
# suppress warning for ccache + clang bug
CXFLAGS += $(if $(findstring clang,$(CC)),-Qunused-arguments,)
# optimization
ifeq ($(SMALL),y)
CXFLAGS_RELEASE += -Os
else
CXFLAGS_RELEASE += -O3
endif
# profile
ifeq ($(PROF),y)
CXFLAGS += -g -pg -fno-omit-frame-pointer
else
CXFLAGS_RELEASE += -fomit-frame-pointer
CXFLAGS_DEBUG += -fno-omit-frame-pointer $(CXFLAGS_CHECK)
endif
# cflags: .c files
CFLAGS_RELEASE =
CFLAGS_DEBUG =
CFLAGS = \
-std=c99 \
-D_GNU_SOURCE=1 -D_REENTRANT \
-fno-math-errno -fno-signed-zeros -fno-tree-vectorize
# ccflags: .cc/.cpp files
CCFLAGS_RELEASE = -fno-rtti
CCFLAGS_DEBUG =
CCFLAGS = -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
# ldflags
LDFLAGS_RELEASE =
LDFLAGS_DEBUG = -rdynamic
LDFLAGS = $(AHFLAGS)
LDFLAGS-L = -L
LDFLAGS-l = -l
LDFLAGS-f =
LDFLAGS-o = -o
# prof
ifeq ($(PROF),y)
LDFLAGS += -pg
else
LDFLAGS_RELEASE += -s
LDFLAGS_DEBUG += $(LDFLAGS_CHECK)
endif
# asflags
ASFLAGS_RELEASE =
ASFLAGS_DEBUG =
ASFLAGS = $(AHFLAGS)
ASFLAGS-I = -I
ASFLAGS-o = -o
# arflags
ARFLAGS_RELEASE =
ARFLAGS_DEBUG =
ARFLAGS = -cr
ARFLAGS-o =
# shflags
SHFLAGS_RELEASE = -s
SHFLAGS = $(AHFLAGS) -shared -Wl,-soname
# include sub-config
include $(PLAT_DIR)/config.mak
|