forked from AnSwErYWJ/wavfile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
120 lines (94 loc) · 2.34 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
VPATH ?= .
include version.mk
#
# build target
#
MODULE := wavtool
EXE_P2W := pcm2wav
EXE_W2P := wav2pcm
EXE_WI := wavinfo
STATIC_LIBRARY := lib$(MODULE).a.$(VERSION)
SHARE_LIBRARY := lib$(MODULE).so.$(VERSION)
ALL := $(EXE_P2W) $(EXE_W2P) $(EXE_WI) $(STATIC_LIBRARY) $(SHARE_LIBRARY)
#
# toolchains
#
CC := gcc
LD := ld
CPP := cpp
CXX := g++
AR := ar
AS := as
NM := nm
STRIP := strip
OBJCOPY := objcopy
RM := -rm -rf
#
# files or dirs
#
SRC_FILES := src/wav.c
INCLUDE_DIRS := -Iinclude
P2W_FILES := $(SRC_FILES) apps/pcm2wav.c
W2P_FILES := $(SRC_FILES) apps/wav2pcm.c
WI_FILES := $(SRC_FILES) apps/wavinfo.c
#
# flags
#
CFLAGS := -Os -std=gnu99 -fvisibility=hidden -D_GNU_SOURCE -fPIC
CFLAGS += -Wall -Wno-variadic-macros -Wno-format-zero-length -fstack-protector-all -ffunction-sections -fdata-sections
CFLAGS += $(INCLUDE_DIRS)
CFLAGS += -D MAJOR=$(MAJOR)
CFLAGS += -D MINOR=$(MINOR)
CFLAGS += -D REVISION=$(REVISION)
CFLAGS += -D CID="\"$(CID)\""
CFLAGS += -D BUILD_TIME="\"$(BUILD_TIME)\""
#CFLAGS += -fPIE
CXXFLAGS := $(subst -std=gnu99,,$(CFLAGS))
LDFLAGS := -Wl,--gc-sections
#LDFLAGS += -pie
#
# rules
#
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o : %.cc
$(CXX) $(CXXFLAGS) -c $< -o $@
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
#
# objects
#
OBJECTS = $(subst .c,.o,$(subst .cpp,.o,$(subst .cc,.o,$(SRC_FILES))))
P2W_OBJECTS = $(subst .c,.o,$(subst .cpp,.o,$(subst .cc,.o,$(P2W_FILES))))
W2P_OBJECTS = $(subst .c,.o,$(subst .cpp,.o,$(subst .cc,.o,$(W2P_FILES))))
WI_OBJECTS = $(subst .c,.o,$(subst .cpp,.o,$(subst .cc,.o,$(WI_FILES))))
#
# goal all
#
.PHONY: all
all: $(ALL)
$(EXE_P2W) : $(P2W_OBJECTS)
$(CXX) $^ $(LDFLAGS) -o $@
$(STRIP) --strip-unneeded $@
$(EXE_W2P) : $(W2P_OBJECTS)
$(CXX) $^ $(LDFLAGS) -o $@
$(STRIP) --strip-unneeded $@
$(EXE_WI) : $(WI_OBJECTS)
$(CXX) $^ $(LDFLAGS) -o $@
$(STRIP) --strip-unneeded $@
$(STATIC_LIBRARY) : $(OBJECTS)
$(AR) crv $@ $^
$(LD) -r $^ -o lib$(MODULE)_default.o
$(STRIP) --strip-unneeded lib$(MODULE)_default.o
$(OBJCOPY) --localize-hidden lib$(MODULE)_default.o lib$(MODULE).o
$(AR) crv $@ lib$(MODULE).o
$(RM) lib$(MODULE)_default.o lib$(MODULE).o
$(SHARE_LIBRARY) : $(OBJECTS)
$(CXX) $^ -shared $(LDFLAGS) -o $@
$(STRIP) --strip-unneeded $@
#
# goal: clean
#
.PHONY: clean
clean:
$(RM) $(OBJECTS) $(P2W_OBJECTS) $(W2P_OBJECTS) $(WI_OBJECTS) $(ALL)