rules.mk (4509B)
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)/scc 39 ASINCLUDES= -I$(INCDIR)/scc 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 # helper macro to run over all the directories 107 FORALL = +@set -e ;\ 108 for i in $(DIRS); \ 109 do \ 110 cd $$i; \ 111 $(MAKE) $@; \ 112 cd -; \ 113 done 114 115 $(DIRS): FORCE 116 +@cd $@ && $(MAKE) 117 118 # Generic rules 119 .SUFFIXES: 120 .SUFFIXES: .c .map .dump .elf .bin\ 121 .i .a .o .s .S .ko .ld .tmpl\ 122 .pdf .ps .eps .puml\ 123 .ms .1 .2 .3 .4 .5 .6 .7\ 124 125 .s.o: 126 $(AS) $(PROJ_ASFLAGS) $< -o $@ 127 128 .s.ko: 129 $(AS) $(PROJ_ASFLAGS) $< -o $@ 130 131 .c.o: 132 $(CC) $(PROJ_CPPFLAGS) $(PROJ_CFLAGS) -o $@ -c $< 133 134 .c.s: 135 $(CC) $(PROJ_CPPFLAGS) $(PROJ_CFLAGS) -S -o $@ $< 136 137 .c.i: 138 $(CPP) $(PROJ_CPPFLAGS) -o $@ $< 139 140 .elf.bin: 141 $(OC) -O binary $< $@ 142 143 .o.dump: 144 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\ 145 $(OD) -D $< > $$$$.dump && mv $$$$.dump $@ 146 147 .elf.map: 148 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\ 149 $(LD) -Map=$@ $< -o /dev/null 150 151 .puml.eps: 152 trap "rm -f $$$$.eps" EXIT QUIT INT TERM;\ 153 plantuml -p -teps < $< > $$$$.eps && mv $$$$.eps $@ 154 155 .ms.ps: 156 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 157 $(SOELIM) $< | $(GRAP) | $(PIC) | $(EQN) | $(TBL) |\ 158 $(TROFF) -ms | $(DPOST) > $$$$.ps &&\ 159 mv $$$$.ps $@ 160 .1.ps: 161 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 162 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 163 164 .2.ps: 165 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 166 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 167 168 .3.ps: 169 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 170 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 171 172 .4.ps: 173 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 174 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 175 176 .5.ps: 177 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 178 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 179 180 .6.ps: 181 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 182 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 183 184 .7.ps: 185 trap "rm -f $$$$.ps" EXIT QUIT INT TERM;\ 186 $(TBL) $< | $(TROFF) -man | $(DPOST) > $$$$.ps && mv $$$$.ps $@ 187 188 .ps.pdf: 189 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 190 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 191 192 .eps.pdf: 193 $(GS) -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ 194 -ssdout=%stderr "-sOutputFile=$@" -P- -dSAFER "$<" 195 FORCE: 196 197 clean: clean-files clean-dirs 198 199 clean-dirs: 200 +@set -e; \ 201 for i in $(DIRS); \ 202 do \ 203 cd $$i; \ 204 $(MAKE) clean; \ 205 cd -; \ 206 done 207 208 clean-files: 209 rm -f *.i *.d *.o *.a *.elf $(TARGET) 210 211 dep: inc-dep 212 $(FORALL) 213 214 inc-dep: FORCE 215 test -n "$(NODEP)" || $(MKDEP)