bzr branch
http://bzr.ed.am/make/edam-mk
11
by edam
- smartened up comments |
1 |
#_______________________________________________________________________________ |
2 |
# |
|
3 |
# edam's general-purpose makefile v2.0 |
|
4 |
#_______________________________________________________________________________ |
|
5 |
# COMMON SETTINGS |
|
3
by edam
- added propper header |
6 |
|
11
by edam
- smartened up comments |
7 |
# |
8 |
# overridable options |
|
9 |
# (better to specify in environment/command line) |
|
10 |
# |
|
8
by edam
- added SUBDIRS for recursing |
11 |
#export DEBUGMODE := 1 |
11
by edam
- smartened up comments |
12 |
#export PROFILEMODE := 1 |
13 |
#export LINKSTATIC := 1 |
|
14 |
||
15 |
# |
|
16 |
# target binary/library |
|
17 |
# |
|
18 |
#MKSTATICLIB := 1 |
|
19 |
#MKSHAREDLIB := 1 |
|
20 |
TARGET := tim |
|
21 |
||
22 |
# |
|
23 |
# all source files |
|
24 |
# |
|
9
by edam
- combines sources in to one variable, SOURCES |
25 |
SOURCES := tim.cc |
3
by edam
- added propper header |
26 |
|
11
by edam
- smartened up comments |
27 |
# |
28 |
# libraries to link against |
|
29 |
# |
|
7
by edam
- set CC correctly |
30 |
LIBRARIES := |
31 |
||
11
by edam
- smartened up comments |
32 |
# |
33 |
# subdirectories to make first |
|
34 |
# |
|
8
by edam
- added SUBDIRS for recursing |
35 |
SUBDIRS := |
3
by edam
- added propper header |
36 |
|
11
by edam
- smartened up comments |
37 |
# |
38 |
# additional build flags |
|
39 |
# |
|
9
by edam
- combines sources in to one variable, SOURCES |
40 |
CPPFLAGS := |
11
by edam
- smartened up comments |
41 |
CFLAGS := |
42 |
CXXFLAGS := |
|
43 |
ASFLAGS := |
|
44 |
LDFLAGS := |
|
45 |
LDPOSTFLAGS := |
|
46 |
||
47 |
#_______________________________________________________________________________ |
|
48 |
# OTHER SETTINGS |
|
49 |
||
50 |
# set debug mode if profiling |
|
51 |
ifdef PROFILEMODE |
|
52 |
export DEBUGMODE := 1 |
|
53 |
endif |
|
54 |
||
55 |
# software |
|
56 |
AS := nasm |
|
57 |
CC := gcc |
|
58 |
CXX := g++ |
|
59 |
LD := g++ |
|
60 |
AR := ar |
|
61 |
MAKE := make |
|
62 |
||
63 |
# build flags |
|
64 |
CPPFLAGS := $(if $(PROFILEMODE),-pg -D PROFILE) $(CPPFLAGS) |
|
65 |
CPPFLAGS := $(if $(DEBUGMODE),-g -D DEBUG,-O2) $(CPPFLAGS) |
|
66 |
ASFLAGS := -f elf $(if $(DEBUGMODE),-g -dDEBUG,-O2) $(ASFLAGS) |
|
67 |
LDFLAGS := $(if $(PROFILEMODE),-pg,$(if $(DEBUGMODE),,-s)) $(LDFLAGS) |
|
68 |
LDFLAGS := -Wall $(if $(LINKSTATIC),-static) $(LDFLAGS) |
|
69 |
LDPOSTFLAGS := $(addprefix -l,$(LIBRARIES)) $(LDPOSTFLAGS) |
|
70 |
||
71 |
#_______________________________________________________________________________ |
|
72 |
||
73 |
# object debug/profile suffix |
|
74 |
BUILDSUFFIX := $(if $(PROFILEMODE),_p,$(if $(DEBUGMODE),_d)) |
|
75 |
||
76 |
# files |
|
77 |
OBJECTS := $(addsuffix $(BUILDSUFFIX).o,$(basename $(SOURCES))) |
|
78 |
DEPFILES := $(addsuffix .d,$(basename $(SOURCES))) |
|
79 |
||
80 |
# fixup target |
|
81 |
ifdef TARGET |
|
82 |
TARGET := $(basename $(TARGET))$(BUILDSUFFIX)$(suffix $(TARGET)) |
|
9
by edam
- combines sources in to one variable, SOURCES |
83 |
TARGET := $(patsubst %.so,%,$(patsubst %.a,%,$(TARGET))) |
11
by edam
- smartened up comments |
84 |
TARGET := $(TARGET)$(if $(MKSHAREDLIB),.so,$(if $(MKSTATICLIB),.a)) |
85 |
endif |
|
86 |
||
87 |
# Set up dependancy generation build flags and a commands to be executed after |
|
88 |
# generating any dependancy file. The commands append the names of all the |
|
89 |
# depended-on files in the dependancy file to the end of the dependancy file as |
|
90 |
# empty rules with no prerequesits or commands. This causes make not to fail if |
|
91 |
# one of these files becomes non-existant, but causes files dependant on these |
|
92 |
# files to be rebuilt (and thus also have their dependancies regenerated). |
|
93 |
ifdef DEBUGMODE |
|
94 |
ifndef PROFILEMODE |
|
95 |
FIXUP_DEPENDANCY_FILES = \ |
|
96 |
sed 's/\#.*//;s/^[^:]*://;s/^[ \t]*//;s/ *\\$$//;/^$$/d;s/$$/:/' < \ |
|
97 |
$(basename $<).d > .$$$$~; cat .$$$$~ >> $(basename $<).d; rm .$$$$~; |
|
98 |
DEPFLAGS = -MD -MF $(basename $<).d |
|
99 |
endif |
|
100 |
endif |
|
101 |
||
102 |
# include dependancies |
|
103 |
ifneq "$(MAKECMDGOALS)" "clean" |
|
104 |
ifneq "$(MAKECMDGOALS)" "clean_all" |
|
105 |
-include $(DEPFILES) |
|
106 |
endif |
|
107 |
endif |
|
108 |
||
109 |
# default rule |
|
110 |
.DEFAULT_GOAL := all |
|
111 |
||
112 |
#_______________________________________________________________________________ |
|
113 |
# RULES |
|
10
by edam
- fixed recursive cleaning |
114 |
|
9
by edam
- combines sources in to one variable, SOURCES |
115 |
.PHONY: all subdirs target clean clean_all run depend dep $(SUBDIRS) |
116 |
||
117 |
all: subdirs target |
|
118 |
||
119 |
subdirs: $(SUBDIRS) |
|
120 |
||
121 |
target: $(TARGET) |
|
1
by edam
initial makefile |
122 |
|
11
by edam
- smartened up comments |
123 |
clean: |
124 |
ifdef SUBDIRS |
|
125 |
ifneq "$(MAKECMDGOALS)" "clean_all" |
|
126 |
@echo "NOT RECURSING: use 'make clean_all' to clean subdirectories as well." |
|
127 |
endif |
|
128 |
endif |
|
129 |
rm -f $(OBJECTS) $(TARGET) core |
|
130 |
||
131 |
clean_all: subdirs clean |
|
132 |
||
133 |
ifndef MKSTATICLIB |
|
134 |
ifndef MKSHAREDLIB |
|
9
by edam
- combines sources in to one variable, SOURCES |
135 |
run: target |
136 |
./$(TARGET) |
|
137 |
endif |
|
138 |
endif |
|
4
by edam
- replaced debug option with debug switch |
139 |
|
8
by edam
- added SUBDIRS for recursing |
140 |
$(SUBDIRS): |
11
by edam
- smartened up comments |
141 |
@$(MAKE) -C $@ $(filter-out $(SUBDIRS),$(MAKECMDGOALS)) |
142 |
@echo |
|
8
by edam
- added SUBDIRS for recursing |
143 |
|
9
by edam
- combines sources in to one variable, SOURCES |
144 |
$(TARGET): $(OBJECTS) |
11
by edam
- smartened up comments |
145 |
ifdef MKSTATICLIB |
9
by edam
- combines sources in to one variable, SOURCES |
146 |
$(AR) rcs $(TARGET) $(OBJECTS) |
8
by edam
- added SUBDIRS for recursing |
147 |
else |
11
by edam
- smartened up comments |
148 |
$(LD) $(if $(MKSHAREDLIB),-shared) -o $(TARGET) $(LDFLAGS) $(OBJECTS) $(LDPOSTFLAGS) |
8
by edam
- added SUBDIRS for recursing |
149 |
endif |
150 |
||
11
by edam
- smartened up comments |
151 |
%.o %_d.o %_p.o: %.c |
152 |
$(CC) -c $(CPPFLAGS) $(DEPFLAGS) $(CFLAGS) -o $@ $< |
|
153 |
$(FIXUP_DEPENDANCY_FILES) |
|
154 |
||
155 |
%.o %_d.o %_p.o: %.cc |
|
156 |
$(CXX) -c $(CPPFLAGS) $(DEPFLAGS) $(CXXFLAGS) -o $@ $< |
|
157 |
$(FIXUP_DEPENDANCY_FILES) |
|
158 |
%.o %_d.o %_p.o: %.C |
|
159 |
$(CXX) -c $(CPPFLAGS) $(DEPFLAGS) $(CXXFLAGS) -o $@ $< |
|
160 |
$(FIXUP_DEPENDANCY_FILES) |
|
161 |
%.o %_d.o %_p.o: %.cpp |
|
162 |
$(CXX) -c $(CPPFLAGS) $(DEPFLAGS) $(CXXFLAGS) -o $@ $< |
|
163 |
$(FIXUP_DEPENDANCY_FILES) |
|
164 |
||
165 |
%.o %_d.o %_p.o: %.s |
|
166 |
$(AS) $(ASFLAGS) -o $@ $< |
|
167 |
%.o %_d.o %_p.o: %.S |
|
168 |
$(AS) $(ASFLAGS) -o $@ $< |
|
169 |
%.o %_d.o %_p.o: %.asm |
|
170 |
$(AS) $(ASFLAGS) -o $@ $< |
|
171 |
||
172 |
%.d: %.s |
|
173 |
$(AS) $(ASFLAGS) -M $< > $@ |
|
174 |
$(FIXUP_DEPENDANCY_FILES) |
|
175 |
%.d: %.S |
|
176 |
$(AS) $(ASFLAGS) -M $< > $@ |
|
177 |
$(FIXUP_DEPENDANCY_FILES) |
|
178 |
%.d: %.asm |
|
179 |
$(AS) $(ASFLAGS) -M $< > $@ |
|
180 |
$(FIXUP_DEPENDANCY_FILES) |
|
8
by edam
- added SUBDIRS for recursing |
181 |
|
9
by edam
- combines sources in to one variable, SOURCES |
182 |
#_______________________________________________________________________________ |