rules.mk (4125B)
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 $$$$.dump" EXIT;\ 137 trap "exit 1" HUP INT TERM;\ 138 $(OD) -D $< > $$$$.dump && mv $$$$.dump $@ 139 140 .elf.map: 141 $(LD) -Map=$@ $< -o /dev/null 142 143 .puml.eps: 144 trap "rm -f $$$$.eps" EXIT;\ 145 trap "exit 1" HUP INT TERM;\ 146 plantuml -p -teps < $< > $$$$.eps && mv $$$$.eps $@ 147 148 .ms.ps: 149 trap "rm -f $$$$.ps" EXIT;\ 150 trap "exit 1" HUP INT TERM;\ 151 $(SOELIM) $< | $(GRAP) | $(PIC) | $(EQN) | $(TBL) |\ 152 $(TROFF) -ms | $(DPOST) > $$$$.ps &&\ 153 mv $$$$.ps $@ 154 155 .1.ps .2.ps .3.ps .4.ps .5.ps .6.ps .7.ps: 156 trap "rm -f $$$$.ps" EXIT;\ 157 trap "exit 1" HUP INT TERM;\ 158 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 159 160 .ps.pdf: 161 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 162 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 163 164 .eps.pdf: 165 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 166 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 167 FORCE: 168 169 clean: clean-files clean-dirs 170 171 clean-dirs: 172 +@set -e; \ 173 for i in $(DIRS); \ 174 do \ 175 cd $$i; \ 176 $(MAKE) clean; \ 177 cd -; \ 178 done 179 180 clean-files: 181 rm -f *.i *.d *.o *.a *.elf $(TARGET) 182 183 dep: add-makefile recursive-dep 184 185 add-makefile: FORCE 186 test -n "$(NODEP)" || $(MKDEP) 187 188 recursive-dep: FORCE 189 +@set -e; \ 190 for i in $(DIRS); \ 191 do \ 192 test $$i = tests && continue;\ 193 cd $$i; \ 194 $(MAKE) dep; \ 195 cd -; \ 196 done 197 198 distclean: recursive-distclean 199 200 del-makefile: FORCE 201 rm -f makefile 202 203 recursive-distclean: del-makefile FORCE 204 +@set -e;\ 205 for i in $(DIRS); \ 206 do\ 207 test $$i = tests && continue;\ 208 cd $$i;\ 209 $(MAKE) distclean;\ 210 cd -;\ 211 done