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