rules.mk - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
rules.mk (4763B)
---
1 # Define the target all as default
2 all:
3
4 PREFIX = /usr/local
5 LIBPREFIX = $(PREFIX)
6 LIBPROFILE = scc
7 CONF = amd64-linux
8 TOOL = unix
9 HOST = posix
10 ROFF = gnu
11 include $(PROJECTDIR)/config.mk
12
13 # Define helper macros for project directories
14 DOCDIR = $(PROJECTDIR)/doc
15 INCDIR = $(PROJECTDIR)/include/scc
16 BINDIR = $(PROJECTDIR)/bin
17 SRCDIR = $(PROJECTDIR)/src
18 SCRIPTDIR = $(PROJECTDIR)/scripts
19 LIBDIR = $(PROJECTDIR)/lib
20 LIBEXEC = $(PROJECTDIR)/libexec
21 BUILDDIR = $(PROJECTDIR)/scripts/build
22 CRTDIR = $(PROJECTDIR)/lib/scc
23 LIBCDIR = $(CRTDIR)/$(ARCH)-$(SYS)
24 MKDEP = $(SCRIPTDIR)/mkdep
25 SRCDIR = $(PROJECTDIR)/src
26 CMDDIR = $(SRCDIR)/cmd
27
28 # library dependences helpers
29 LIBMACH = $(LIBDIR)/scc/libmach.a
30 LIBSCC = $(LIBDIR)/scc/libscc.a
31
32 # Include configuration definitions
33 include $(BUILDDIR)/conf/$(CONF).mk
34 include $(BUILDDIR)/tool/$(TOOL).mk
35 include $(BUILDDIR)/host/$(HOST).mk
36
37 # Locations for -I or -L in compiler, assembler or linker
38 CPPINCLUDES = -I$(INCDIR)/bits
39 ASINCLUDES = -I$(INCDIR)/bits
40 LDINCLUDES = -L$(LIBDIR)/scc
41
42 # Definition of command line for cc, as, ld and emu
43 PROJ_CPPFLAGS =\
44 $(CPPINCLUDES)\
45 $(HOST_CPPFLAGS)\
46 $(MORE_CPPFLAGS)
47
48 PROJ_CFLAGS =\
49 $(PROJ_CPPFLAGS)\
50 $(MORE_CFLAGS)\
51 $(HOST_CFLAGS)\
52 $(SYS_CFLAGS)\
53 $(TOOL_CFLAGS)\
54 $(CFLAGS)
55
56 PROJ_LDFLAGS =\
57 $(MORE_LDFLAGS)\
58 $(HOST_LDFLAGS)\
59 $(SYS_LDFLAGS)\
60 $(TOOL_LDFLAGS)\
61 $(LDINCLUDES)\
62 $(LDFLAGS)
63
64 PROJ_ASFLAGS =\
65 $(MORE_ASFLAGS)\
66 $(HOST_ASFLAGS)\
67 $(SYS_ASFLAGS)\
68 $(TOOL_ASFLAGS)\
69 $(ASINCLUDES)\
70 $(ASFLAGS)
71
72 PROJ_ARFLAGS =\
73 $(MORE_ARFLAGS)\
74 $(HOST_ARFLAGS)\
75 $(SYS_ARFLAGS)\
76 $(TOOL_ARFLAGS)\
77 $(ARFLAGS)
78
79 PROJ_RLFLAGS =\
80 $(MORE_RLFLAGS)\
81 $(HOST_RLFLAGS)\
82 $(SYS_RLFLAGS)\
83 $(TOOL_RLFLAGS)\
84 $(RLFLAGS)
85
86 PROJ_LDLIBS =\
87 $(MORE_LDLIBS)\
88 $(HOST_LDLIBS)\
89 $(SYS_LDLIBS)\
90 $(TOOL_LDLIBS)\
91 $(LIBS)
92
93 # Definition of tools
94 CC = $(CROSS_COMPILE)$(COMP)
95 AS = $(CROSS_COMPILE)$(ASM)
96 LD = $(CROSS_COMPILE)$(LINKER)
97 OC = $(CROSS_COMPILE)$(OBJCOPY)
98 OD = $(CROSS_COMPILE)$(OBJDUMP)
99 RL = $(CROSS_COMPILE)$(RANLIB)
100 AR = $(CROSS_COMPILE)$(ARCHIVE)
101 CPP = $(CROSS_COMPILE)$(PRECOMP)
102 GS = gs
103
104 $(DIRS) DUMMY : FORCE
105 +@cd $@ && $(MAKE)
106
107 # Generic rules
108 .SUFFIXES:
109 .SUFFIXES: .c .map .dump .elf .bin\
110 .i .a .o .s .S .ko .ld .tmpl\
111 .pdf .ps .eps .puml\
112 .ms .1 .2 .3 .4 .5 .6 .7\
113
114 .c:
115 $(CC) $(PROJ_CFLAGS) $(PROJ_LDFLAGS) -o $@ $< $(PROJ_LDLIBS)
116
117 .s.o:
118 $(AS) $(PROJ_ASFLAGS) $< -o $@
119
120 .s.ko:
121 $(AS) $(PROJ_ASFLAGS) $< -o $@
122
123 .c.o:
124 $(CC) $(PROJ_CFLAGS) -o $@ -c $<
125
126 .c.s:
127 $(CC) $(PROJ_CFLAGS) -S -o $@ $<
128
129 .c.i:
130 $(CPP) $(PROJ_CPPFLAGS) -o $@ $<
131
132 .elf.bin:
133 $(OC) -O binary $< $@
134
135 .o.dump:
136 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\
137 $(OD) -D $< > $$$$.dump && mv $$$$.dump $@
138
139 .elf.map:
140 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\
141 $(LD) -Map=$@ $< -o /dev/null
142
143 .puml.eps:
144 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\
145 plantuml -p -teps < $< > $$$$.eps && mv $$$$.eps $@
146
147 .ms.ps:
148 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
149 $(SOELIM) $< | $(GRAP) | $(PIC) | $(EQN) | $(TBL) |\
150 $(TROFF) -ms | $(DPOST) > $$$$.ps &&\
151 mv $$$$.ps $@
152 .1.ps:
153 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
154 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
155
156 .2.ps:
157 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
158 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
159
160 .3.ps:
161 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
162 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
163
164 .4.ps:
165 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
166 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
167
168 .5.ps:
169 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
170 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
171
172 .6.ps:
173 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
174 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
175
176 .7.ps:
177 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\
178 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@
179
180 .ps.pdf:
181 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
182 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<"
183
184 .eps.pdf:
185 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
186 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<"
187 FORCE:
188
189 clean: clean-files clean-dirs
190
191 clean-dirs:
192 +@set -e; \
193 for i in $(DIRS); \
194 do \
195 cd $$i; \
196 $(MAKE) clean; \
197 cd -; \
198 done
199
200 clean-files:
201 rm -f *.i *.d *.o *.a *.elf $(TARGET)
202
203 dep: add-makefile recursive-dep
204
205 add-makefile: FORCE
206 test -n "$(NODEP)" || $(MKDEP)
207
208 recursive-dep: FORCE
209 +@set -e; \
210 for i in $(DIRS); \
211 do \
212 test $$i = tests && continue;\
213 cd $$i; \
214 $(MAKE) dep; \
215 cd -; \
216 done
217
218 distclean: recursive-distclean
219
220 del-makefile: FORCE
221 rm -f makefile
222
223 recursive-distclean: del-makefile FORCE
224 +@set -e;\
225 for i in $(DIRS); \
226 do\
227 test $$i = tests && continue;\
228 cd $$i;\
229 $(MAKE) distclean;\
230 cd -;\
231 done