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