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 %.c, %.cif, $(CFILES) $(EXCFILES) $(TESTCFILES)) \
85 $(patsubst %.$(ASMEXT), %.lst, $(AFILES) $(EXAFILES) $(TESTAFILES)) \
86 $(patsubst %.sa, %.asm, $(LINAFILES) $(TESTLINASMFILES)) \
87 $(patsubst %.sa, %.lst, $(LINAFILES) $(TESTLINASMFILES)) \
88 $(DFULLPATH))
90 # Compute FLATFILES, if necessary
91 ifndef FLATFILES
92 FLATFILES =$(patsubst %,$(ECODIR)/%,$(CSRC) $(ASMSRC) $(HDR) $(LINASMSRC) $(BIOSASMSRC) )
93 endif
95 # If FLATGGDIR isnt set, and we make flat, then we are making flat for test prg
96 ifndef FLATGGDIR
97 # This has two magical effects: 1) causes FLATGGDIR to be set now, and
98 # causes recursive makefiles to set the correct FLAT directory even during
99 # recursion.
100 FLATFILES +=$(patsubst %,$(ECODIR)/%,$(TESTCSRC) $(TESTASMSRC) $(TESTHDR))
101 ifdef ECONAME
102 export FLATGGDIR = $(ECONAME)/c64x/make/flat
103 else
104 export FLATGGDIR = $(notdir $(ECODIR))/c64x/make/flat
105 endif
106 endif
108 FLATDIR =$(ROMROOT)/$(FLATGGDIR)
110 ifneq ($(findstring $(FLAT),yes YES),)
111 FLAT_TARGET =$(REFTGT) flat
112 else
113 FLAT_TARGET =$(REFTGT)
114 endif
116 .PHONY: clean flat gen_flatdir
118 # standard targets
119 clean:
120 -$(RM) $(OBJS) $(EXOBJS) $(TESTOBJS) $(CLEAN_TARGETS) $(CLEAN_INTERMEDIATES) $(REFTGT)
121 -$(RM) -r flat
123 ifneq ($(findstring $(FLAT),yes YES),)
124 flat:
125 -mkdir $(subst /,\,$(FLATDIR))
126 -$(CP) -u $(FLATFILES) $(FLATDIR)
128 # Define command to copy targets to flat
129 CPFLATCMD = $(CP) $@ $(FLATDIR)
131 else
133 CPFLATCMD =
135 endif
137 # Copy targets to delivery directory
138 # The variables STDDLV and BOOTLD should be set by calling makefile
139 ifneq ($(BOOTLD),none)
140 CPBOOTLD=$(CP) $(BOOTPATH)/$(BOOTLD) $(DELIVERY)/boot_$(OUTFILE).out
141 CPBOOTLD2=
142 else
143 ifeq ($(GGDSP_CPU),12)
144 CPBOOTLD=$(CP) $(BOOTPATH)/boot5560_pg10_20.out $(DELIVERY)/bootpg10_20_$(OUTFILE).out
145 CPBOOTLD2=
146 else
147 CPBOOTLD=
148 CPBOOTLD2=
149 endif
150 endif
152 # how to build .c and .s files on c64x
153 FNAMEDEF = -dTNFNAME=$(notdir $<)
154 GGCCOMPILE = $(CC) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $(FUNCOPTS) $< -eo.$(COBJEXT)
155 GGLCOMPILE = $(CC) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $< -eo.$(LOBJEXT)
156 GGACOMPILE = $(AS) $(AFLAGS) $(ADEFS) $< -eo.$(AOBJEXT)
157 GGCMAKEDEP = $(CC) $(PPDEP_FLAGS) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $(FUNCOPTS) $<
158 GGLMAKEDEP = $(CC) $(PPDEP_FLAGS) $(CFLAGS) $(DCFLAGS) $(CDEFS) $(FNAMEDEF) $<
159 GGAMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(ADEPINC) -a -e$(AOBJEXT) -o$$.$(ADEPEXT) $<
160 GGALMAKEDEP = $(MAKEDEP) $(MAKEDEP_OPT) $(ALDEPINC) -a -e$(ALOBJEXT) -o$$.$(ALDEPEXT) $<
162 #Two options of invoking blockexpn:
163 # 1)Passing NUMCH for implicit expansion
164 # 2)Explicitly giving the number of expansions in the .bex file
165 GGBLOCKEXPN = $(BLOCKEXPN) $< $@
166 GGBLOCKEXPNNUMCH = $(BLOCKEXPN) $< $@ $(NUMCH)
168 %.$(COBJEXT): %.c
169 $(GGCCOMPILE)
171 # Compilation of Linear Assembly files
172 %.$(LOBJEXT): %.$(LASMEXT)
173 $(GGLCOMPILE)
175 %.$(AOBJEXT): %.$(ASMEXT)
176 $(GGACOMPILE)
178 # Special compilation for BIOS
179 %.$(AOBJEXT): %.s62
180 $(GGACOMPILE)
182 CDEPINC = $(subst \,/,-I$(subst ;, -I,$(C6X_C_DIR)))
183 ADEPINC = $(subst \,/,-I$(subst ;, -I,$(C6X_A_DIR)))
186 %.$(CDEPEXT): %.c
187 $(GGCMAKEDEP)
188 sed -e 's/$(notdir $*).obj[ ]*:[ ]*/$(notdir $*).oc $(subst /,\/,$@): /' < $(patsubst %.$(CDEPEXT),%.$(CDEPEXT)_TMP,$@) > $(patsubst %.$(CDEPEXT),%.$(CDEPEXT)_TMP_2,$@)
189 sed -e "s/\\/\//g" < $(patsubst %.$(CDEPEXT),%.$(CDEPEXT)_TMP_2,$@) > $@
190 @$(RM) $(patsubst %.$(CDEPEXT),%.$(CDEPEXT)_TMP,$@) $(patsubst %.$(CDEPEXT),%.$(CDEPEXT)_TMP_2,$@)
192 # dependency for .sa files
193 %.$(LDEPEXT): %.sa
194 $(GGLMAKEDEP)
196 %.$(ADEPEXT): %.s
197 $(GGAMAKEDEP)
199 %.$(ADEPEXT): %.s62
200 $(GGAMAKEDEP)
202 # Preprocessing via blockexpn.pl
203 # ggmbuf.bec and ggmheap.bec are not build specific but common.They need to use the
204 # NUMCH parameter
205 %.c: %.bec
206 $(GGBLOCKEXPNNUMCH)
208 #Numch parameter not passed to linker command file / memmap as the number of expansion
209 #required may be different from num channels in the build
210 %.h: %.beh
211 $(GGBLOCKEXPN)
213 %.cmd: %.becmd
214 $(GGBLOCKEXPN)
216 # Reflection page symbol tables
217 # %.oc is included so we inherit the dependancies from the .dc file
218 # Set GGREFDBG=-v# on command line to debug
219 %.ref: %.c %.oc $(REFPAGEDEP)
220 $(REFPAGE) $(GGREFDBG) -iC6X_C_DIR $< -s$@ $(CDEFS) -dGG_REF_PAGE -d6416 -t$(REFSYM)
222 ifneq ($(DOMAKEDEP),no)
223 # include generated dependancies.
224 sinclude $(DFULLPATH)
225 endif
227 # Nothing past this point