scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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