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