-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
134 lines (111 loc) · 2.71 KB
/
Makefile
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
# fcom makefile
ROOT := ..
FCOM_DIR := $(ROOT)/fcom
FFBASE_DIR := $(ROOT)/ffbase
FFSYS_DIR := $(ROOT)/ffsys
include $(FFBASE_DIR)/conf.mk
EXE := fcom$(DOTEXE)
CFLAGS := -MMD -MP \
-I$(FCOM_DIR)/src -I$(FFSYS_DIR) -I$(FFBASE_DIR) \
-DFFBASE_HAVE_FFERR_STR -DFFBASE_MEM_ASSERT \
-Wall -Wextra -Wno-unused-parameter -Wno-multichar \
-fPIC \
-g
ifeq "$(DEBUG)" "1"
CFLAGS += -O0 -DFF_DEBUG -Werror
else
CFLAGS += -O3 -fno-strict-aliasing -fvisibility=hidden
endif
ifeq "$(ASAN)" "1"
CFLAGS += -fsanitize=address
LINKFLAGS += -fsanitize=address
else
ifeq "$(CPU)" "amd64"
CFLAGS += -march=nehalem
endif
endif
CXXFLAGS := -std=c++11 $(CFLAGS)
CFLAGS := -std=c99 $(CFLAGS)
LINKXXFLAGS := $(LINKFLAGS) -static-libgcc
ifeq "$(OS)" "windows"
# remove runtime dependency on both libstdc++-6.dll and libwinpthread-1.dll
LINKXXFLAGS += -Wl,-Bstatic
else
LINKXXFLAGS += -static-libstdc++
endif
LINK_DL :=
ifeq "$(OS)" "linux"
LINK_DL := -ldl
endif
default: build
ifneq "$(DEBUG)" "1"
$(SUBMAKE) strip-debug
endif
$(SUBMAKE) app
-include $(wildcard *.d)
include $(FCOM_DIR)/src/core/Makefile
include $(FCOM_DIR)/src/exe/Makefile
include $(FCOM_DIR)/src/fs/Makefile
include $(FCOM_DIR)/src/ops/Makefile
include $(FCOM_DIR)/src/pack/Makefile
include $(FCOM_DIR)/src/pic/Makefile
include $(FCOM_DIR)/src/text/Makefile
ifeq "$(OS)" "windows"
include $(FCOM_DIR)/src/windows/Makefile
endif
ifeq "$(TARGETS)" ""
override TARGETS := core.$(SO) $(EXE) $(MODS)
endif
build: $(TARGETS)
clean:
$(RM) $(MODS) *.o
%.$(SO): %.o
$(LINK) -shared $+ $(LINKFLAGS) -o $@
test: test.o
$(LINK) $+ $(LINKFLAGS) -o $@
strip-debug: $(addsuffix .debug,$(TARGETS))
%.debug: %
$(OBJCOPY) --only-keep-debug $< $@
$(STRIP) $<
$(OBJCOPY) --add-gnu-debuglink=$@ $<
touch $@
# copy files to app directory
APP_DIR := fcom-1
app:
$(MKDIR) $(APP_DIR)
$(CP) \
$(EXE) \
core.$(SO) \
$(FCOM_DIR)/README.md \
$(FCOM_DIR)/help.txt \
$(APP_DIR)
chmod 0755 $(APP_DIR) $(APP_DIR)/$(EXE)
chmod 0644 $(APP_DIR)/README.* $(APP_DIR)/*.$(SO)
$(MKDIR) $(APP_DIR)/ops
chmod 0755 $(APP_DIR)/ops
$(CP) $(MODS) $(APP_DIR)/ops
ifneq "$(LIBS3)" ""
$(CP) $(LIBS3) $(APP_DIR)/ops
endif
chmod 0644 $(APP_DIR)/ops/*.$(SO)
$(SUBMAKE) app-gsync
# package
PKG_VER := test
PKG_ARCH := $(CPU)
PKG_PACKER := tar -c --owner=0 --group=0 --numeric-owner -v --zstd -f
PKG_EXT := tar.zst
ifeq "$(OS)" "windows"
PKG_PACKER := zip -r -v
PKG_EXT := zip
endif
PKG_NAME := fcom-$(PKG_VER)-$(OS)-$(PKG_ARCH).$(PKG_EXT)
$(PKG_NAME): $(APP_DIR)
$(PKG_PACKER) $@ $<
package: $(PKG_NAME)
PKG_DEBUG_NAME := fcom-$(PKG_VER)-$(OS)-$(PKG_ARCH)-debug.$(PKG_EXT)
$(PKG_DEBUG_NAME):
$(PKG_PACKER) $@ *.debug
package-debug: $(PKG_DEBUG_NAME)
release: default
$(SUBMAKE) package
$(SUBMAKE) package-debug