/make/edam-mk

To get this branch, use:
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
#_______________________________________________________________________________