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