1 #*******************************************************************************
2 #* FILE PURPOSE: Perform standard variable computation and targets for ECOs
3 #*******************************************************************************
4 #* FILE NAME: makeeco.mk
5 #*
6 #* DESCRIPTION: Make include file which computes some variables and defines
7 #* standard targets for DSP ECOs.
8 #*
9 #* Input variables:
10 #* CSRC : List of C Source files
11 #* ASMSRC : List of assembly source files
12 #* Output variables:
13 #* OBJS : List of all object files
14 #*
15 #*
16 #* (C) Copyright 1999-2001 TELOGY Networks, Inc.
17 #*******************************************************************************
19 # get definitions
20 include $(IBL_ROOT)/make/$(ARCH)/makedefs.mk
22 # If ECODIR is not defined, derive it from ECONAME
23 ifndef ECODIR
24 ECODIR = $(IBL_ROOT)/$(ECONAME)
25 endif
27 # VPATH tells make how to find sources in other directories
28 vpath %.$(ASMEXT) $(ECODIR)/$(CPUDIR)
29 #The vpath below is needed to compile the dsp/memory folder properly
30 vpath %.c $(ECODIR)/$(CPUDIR)/$(CPUTYPEDIR)
31 vpath %.c $(ECODIR)/$(CPUDIR)
32 vpath %.sa $(ECODIR)/$(CPUDIR)
33 vpath %.s62 $(ECODIR)/$(CPUDIR)
34 vpath % $(ECODIR)
36 # Get filenames w/o paths
38 CFILES = $(foreach file, $(CSRC), $(notdir $(file)))
39 AFILES = $(foreach file, $(ASMSRC), $(notdir $(file)))
40 LINAFILES = $(foreach file, $(LINASMSRC), $(notdir $(file)))
41 BIOSSFILES = $(foreach file, $(BIOSASMSRC), $(notdir $(file)))
42 EXCFILES = $(foreach file, $(EXCSRC), $(notdir $(file)))
43 EXAFILES = $(foreach file, $(EXASMSRC), $(notdir $(file)))
44 TESTCFILES = $(foreach file, $(TESTCSRC), $(notdir $(file)))
45 TESTAFILES = $(foreach file, $(TESTASMSRC), $(notdir $(file)))
46 TESTLINASMFILES = $(foreach file, $(TESTLINASMSRC), $(notdir $(file)))
49 DFULLPATH = $(patsubst %.s62, %.$(ADEPEXT),$(BIOSSFILES) \
50 $(patsubst %.c, %.$(CDEPEXT), $(CFILES) $(EXCFILES) $(TESTCFILES)) \
51 $(patsubst %.$(ASMEXT), %.$(ADEPEXT), $(AFILES) $(EXAFILES) $(TESTAFILES) $(BIOSSFILES)) \
52 $(patsubst %.sa, %.$(LDEPEXT), $(LINAFILES) $(TESTLINASMFILES)))
55 OBJS = $(COBJS) $(AOBJS)
56 COBJS = $(patsubst %.c, %.$(COBJEXT), $(CFILES))
57 AOBJS = $(patsubst %.s62, %.$(AOBJEXT), $(BIOSSFILES) \
58 $(patsubst %.$(ASMEXT), %.$(AOBJEXT), $(AFILES)) \
59 $(patsubst %.sa, %.$(LOBJEXT), $(LINAFILES)))
60 REFTGT =
62 DCS = $(CDCS) $(ADCS)
63 CDCS = $(patsubst %.c, %.$(CDEPEXT), $(CFILES))
64 ADCS = $(patsubst %.s62, %.$(CDEPEXT), $(BIOSSFILES) \
65 $(patsubst %.$(ASMEXT), %.$(CDEPEXT), $(AFILES)) \
66 $(patsubst %.sa, %.$(CDEPEXT), $(LINAFILES)))
69 # extra objects (not built by builtin rules)
70 EXOBJS = $(patsubst %.s62, %.$(AOBJEXT), $(BIOSSFILES) \
71 $(patsubst %.c, %.$(COBJEXT), $(EXCFILES)) \
72 $(patsubst %.$(ASMEXT), %.$(AOBJEXT), $(EXAFILES)))
74 # extra objects (used for test code)
75 TESTOBJS = $(patsubst %.s62, %.$(AOBJEXT), $(BIOSSFILES) \
76 $(patsubst %.c, %.$(COBJEXT), $(TESTCFILES)) \
77 $(patsubst %.$(ASMEXT), %.$(AOBJEXT), $(TESTAFILES)) \
78 $(patsubst %.$(LASMEXT), %.$(LOBJEXT), $(TESTLINASMFILES)))
80 # intermediate files
81 CLEAN_INTERMEDIATES = $(patsubst %.s62, %.lst, $(BIOSSFILES) \
82 $(patsubst %.c, %.asm, $(CFILES) $(EXCFILES) $(TESTCFILES)) \
83 $(patsubst %.c, %.lst, $(CFILES) $(EXCFILES) $(TESTCFILES)) \
84 $(patsubst %.$(ASMEXT), %.lst, $(AFILES) $(EXAFILES) $(TESTAFILES)) \
85 $(patsubst %.sa, %.asm, $(LINAFILES) $(TESTLINASMFILES)) \
86 $(patsubst %.sa, %.lst, $(LINAFILES) $(TESTLINASMFILES)) \
87 $(DFULLPATH))
89 # Compute FLATFILES, if necessary
90 ifndef FLATFILES
91 FLATFILES =$(patsubst %,$(ECODIR)/%,$(CSRC) $(ASMSRC) $(HDR) $(LINASMSRC) $(BIOSASMSRC) )
92 endif
94 # If FLATGGDIR isnt set, and we make flat, then we are making flat for test prg
95 ifndef FLATGGDIR
96 # This has two magical effects: 1) causes FLATGGDIR to be set now, and
97 # causes recursive makefiles to set the correct FLAT directory even during
98 # recursion.
99 FLATFILES +=$(patsubst %,$(ECODIR)/%,$(TESTCSRC) $(TESTASMSRC) $(TESTHDR))
100 ifdef ECONAME
101 export FLATGGDIR = $(ECONAME)/c64x/make/flat
102 else
103 export FLATGGDIR = $(notdir $(ECODIR))/c64x/make/flat
104 endif
105 endif
107 FLATDIR =$(ROMROOT)/$(FLATGGDIR)
109 ifneq ($(findstring $(FLAT),yes YES),)
110 FLAT_TARGET =$(REFTGT) flat
111 else
112 FLAT_TARGET =$(REFTGT)
113 endif
115 .PHONY: clean flat gen_flatdir
117 # standard targets
118 clean:
119 -$(RM) $(OBJS) $(EXOBJS) $(TESTOBJS) $(CLEAN_TARGETS) $(CLEAN_INTERMEDIATES) $(REFTGT)
120 -$(RM) -r flat
122 ifneq ($(findstring $(FLAT),yes YES),)
123 flat:
124 -mkdir $(subst /,\,$(FLATDIR))
125 -$(CP) -u $(FLATFILES) $(FLATDIR)
127 # Define command to copy targets to flat
128 CPFLATCMD = $(CP) $@ $(FLATDIR)
130 else
132 CPFLATCMD =
134 endif
136 # Copy targets to delivery directory
137 # The variables STDDLV and BOOTLD should be set by calling makefile
138 ifneq ($(BOOTLD),none)
139 CPBOOTLD=$(CP) $(BOOTPATH)/$(BOOTLD) $(DELIVERY)/boot_$(OUTFILE).out
140 CPBOOTLD2=
141 else
142 ifeq ($(GGDSP_CPU),12)
143 CPBOOTLD=$(CP) $(BOOTPATH)/boot5560_pg10_20.out $(DELIVERY)/bootpg10_20_$(OUTFILE).out
144 CPBOOTLD2=
145 else
146 CPBOOTLD=
147 CPBOOTLD2=
148 endif
149 endif
151 # how to build .c and .s files on c64x
152 FNAMEDEF = -dTNFNAME=$(notdir $<)
153 GGCCOMPILE = $(CC) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $< -eo.$(COBJEXT)
154 GGLCOMPILE = $(CC) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $< -eo.$(LOBJEXT)
155 GGACOMPILE = $(AS) $(AFLAGS) $(ADEFS) $< $@ -eo.$(AOBJEXT)
156 GGCMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(CDEPINC) -e$(COBJEXT) -o$$.$(CDEPEXT) $<
157 GGLMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(ADEPINC) -a -e$(AOBJEXT) -o$$.$(LDEPEXT) $<
158 GGAMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(ADEPINC) -a -e$(AOBJEXT) -o$$.$(ADEPEXT) $<
159 GGALMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(ALDEPINC) -a -e$(ALOBJEXT) -o$$.$(ALDEPEXT) $<
161 #Two options of invoking blockexpn:
162 # 1)Passing NUMCH for implicit expansion
163 # 2)Explicitly giving the number of expansions in the .bex file
164 GGBLOCKEXPN = $(BLOCKEXPN) $< $@
165 GGBLOCKEXPNNUMCH = $(BLOCKEXPN) $< $@ $(NUMCH)
167 %.$(COBJEXT): %.c
168 $(GGCCOMPILE)
170 # Compilation of Linear Assembly files
171 %.$(LOBJEXT): %.$(LASMEXT)
172 $(GGLCOMPILE)
174 %.$(AOBJEXT): %.$(ASMEXT)
175 $(GGACOMPILE)
177 # Special compilation for BIOS
178 %.$(AOBJEXT): %.s62
179 $(GGACOMPILE)
181 CDEPINC = $(subst \,/,-I$(subst ;, -I,$(C6X_C_DIR)))
182 ADEPINC = $(subst \,/,-I$(subst ;, -I,$(C6X_A_DIR)))
185 %.$(CDEPEXT): %.c
186 $(GGCMAKEDEP)
188 # dependency for .sa files
189 %.$(LDEPEXT): %.sa
190 $(GGLMAKEDEP)
192 %.$(ADEPEXT): %.s
193 $(GGAMAKEDEP)
195 %.$(ADEPEXT): %.s62
196 $(GGAMAKEDEP)
198 # Preprocessing via blockexpn.pl
199 # ggmbuf.bec and ggmheap.bec are not build specific but common.They need to use the
200 # NUMCH parameter
201 %.c: %.bec
202 $(GGBLOCKEXPNNUMCH)
204 #Numch parameter not passed to linker command file / memmap as the number of expansion
205 #required may be different from num channels in the build
206 %.h: %.beh
207 $(GGBLOCKEXPN)
209 %.cmd: %.becmd
210 $(GGBLOCKEXPN)
212 # Reflection page symbol tables
213 # %.oc is included so we inherit the dependancies from the .dc file
214 # Set GGREFDBG=-v# on command line to debug
215 %.ref: %.c %.oc $(REFPAGEDEP)
216 $(REFPAGE) $(GGREFDBG) -iC6X_C_DIR $< -s$@ $(CDEFS) -dGG_REF_PAGE -d6416 -t$(REFSYM)
218 ifneq ($(DOMAKEDEP),no)
219 # include generated dependancies.
220 sinclude $(DFULLPATH)
221 endif
223 # Nothing past this point