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