Home
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 (4570B) --- 1 # Define the target all as default 2 all: 3 4 # Define default configuration variables 5 PREFIX = /usr/local 6 LIBPREFIX = $(PREFIX) 7 LIBPROFILE = scc 8 CONF = amd64-linux 9 TOOL = unix 10 HOST = posix 11 ROFF = gnu 12 13 # Define helper macros for project directories 14 DOCDIR = $(PROJECTDIR)/doc 15 INCDIR = $(PROJECTDIR)/include 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 # C standard for the target compiler 43 STD = c99 44 45 # Definition of command line for cc, as, ld and emu 46 PROJ_CPPFLAGS =\ 47 $(CPPINCLUDES)\ 48 $(HOST_CPPFLAGS)\ 49 $(MORE_CPPFLAGS) 50 51 PROJ_CFLAGS =\ 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_CPPFLAGS) $(PROJ_CFLAGS) -o $@ $< 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_CPPFLAGS) $(PROJ_CFLAGS) -o $@ -c $< 127 128 .c.s: 129 $(CC) $(PROJ_CPPFLAGS) $(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 $$$$.eps" EXIT QUIT INT TERM;\ 139 $(OD) -D $< > $$$$.dump && mv $$$$.dump $@ 140 141 .elf.map: 142 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\ 143 $(LD) -Map=$@ $< -o /dev/null 144 145 .puml.eps: 146 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\ 147 plantuml -p -teps < $< > $$$$.eps && mv $$$$.eps $@ 148 149 .ms.ps: 150 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 151 $(SOELIM) $< | $(GRAP) | $(PIC) | $(EQN) | $(TBL) |\ 152 $(TROFF) -ms | $(DPOST) > $$$$.ps &&\ 153 mv $$$$.ps $@ 154 .1.ps: 155 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 156 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 157 158 .2.ps: 159 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 160 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 161 162 .3.ps: 163 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 164 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 165 166 .4.ps: 167 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 168 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 169 170 .5.ps: 171 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 172 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 173 174 .6.ps: 175 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 176 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 177 178 .7.ps: 179 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 180 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 181 182 .ps.pdf: 183 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 184 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 185 186 .eps.pdf: 187 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 188 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 189 FORCE: 190 191 clean: clean-files clean-dirs 192 193 clean-dirs: 194 +@set -e; \ 195 for i in $(DIRS); \ 196 do \ 197 cd $$i; \ 198 $(MAKE) clean; \ 199 cd -; \ 200 done 201 202 clean-files: 203 rm -f *.i *.d *.o *.a *.elf $(TARGET) 204 205 dep: inc-dep 206 @set -e; \ 207 for i in $(DIRS); \ 208 do \ 209 test $$i = qbe && continue;\ 210 test $$i = tests && continue;\ 211 cd $$i; \ 212 $(MAKE) $@; \ 213 cd -; \ 214 done 215 216 inc-dep: FORCE 217 test -n "$(NODEP)" || $(MKDEP)