1 #
2 # Copyright (c) 2018 Texas Instruments Incorporated - http://www.ti.com
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 #
9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 #
12 # * Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
15 #
16 # * Neither the name of Texas Instruments Incorporated nor the names of
17 # its contributors may be used to endorse or promote products derived
18 # from this software without specific prior written permission.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #
33 #
34 # ======== Makefile ========
35 #
37 EXBASE = ../..
38 include $(EXBASE)/products.mak
40 .PHONY: all paf_libs debug release
42 # Source directories
43 COMMON_SRC_DIR_CMP = ../common/components
44 COMMON_SRC_DIR_PFP = ../common/pfp
45 COMMON_SRC_DIR_COMMON = ../common
46 LOCAL_SRC_DIR_ITOPO = framework/itopo
47 LOCAL_SRC_DIR_FWK = framework
48 LOCAL_SRC_DIR_APP = application
49 # Source files
50 COMMON_SRCS_CMP = $(wildcard $(COMMON_SRC_DIR_CMP)/*.c)
51 COMMON_SRCS_PFP = $(wildcard $(COMMON_SRC_DIR_PFP)/*.c)
52 COMMON_SRCS_COMMON = $(wildcard $(COMMON_SRC_DIR_COMMON)/*.c)
53 LOCAL_SRCS_ITOPO = $(wildcard $(LOCAL_SRC_DIR_ITOPO)/*.c)
54 LOCAL_SRCS_FWK = $(wildcard $(LOCAL_SRC_DIR_FWK)/*.c)
55 LOCAL_SRCS_APP = $(wildcard $(LOCAL_SRC_DIR_APP)/*.c)
57 # Object file base directory
58 OBJ_DIR_BASE = bin/$(PROFILE)/obj
60 # Object & dependency file directories
61 COMMON_OBJ_DIR_CMP = $(addsuffix /$(subst ../,,$(COMMON_SRC_DIR_CMP)),$(OBJ_DIR_BASE))
62 COMMON_OBJ_DIR_PFP = $(addsuffix /$(subst ../,,$(COMMON_SRC_DIR_PFP)),$(OBJ_DIR_BASE))
63 COMMON_OBJ_DIR_COMMON = $(addsuffix /$(subst ../,,$(COMMON_SRC_DIR_COMMON)),$(OBJ_DIR_BASE))
64 LOCAL_OBJ_DIR_ITOPO = $(addsuffix /$(LOCAL_SRC_DIR_ITOPO),$(OBJ_DIR_BASE))
65 LOCAL_OBJ_DIR_FWK = $(addsuffix /$(LOCAL_SRC_DIR_FWK),$(OBJ_DIR_BASE))
66 LOCAL_OBJ_DIR_APP = $(addsuffix /$(LOCAL_SRC_DIR_APP),$(OBJ_DIR_BASE))
67 OBJ_DIRS = $(COMMON_OBJ_DIR_CMP) \
68 $(COMMON_OBJ_DIR_PFP) \
69 $(COMMON_OBJ_DIR_COMMON) \
70 $(LOCAL_OBJ_DIR_ITOPO) \
71 $(LOCAL_OBJ_DIR_FWK) \
72 $(LOCAL_OBJ_DIR_APP)
74 # Object files
75 COMMON_OBJS_CMP = $(addprefix $(COMMON_OBJ_DIR_CMP)/,$(patsubst %.c,%.oa15fg,$(notdir $(COMMON_SRCS_CMP))))
76 COMMON_OBJS_PFP = $(addprefix $(COMMON_OBJ_DIR_PFP)/,$(patsubst %.c,%.oa15fg,$(notdir $(COMMON_SRCS_PFP))))
77 COMMON_OBJS_COMMON = $(addprefix $(COMMON_OBJ_DIR_COMMON)/,$(patsubst %.c,%.oa15fg,$(notdir $(COMMON_SRCS_COMMON))))
78 LOCAL_OBJS_ITOPO = $(addprefix $(LOCAL_OBJ_DIR_ITOPO)/,$(patsubst %.c,%.oa15fg,$(notdir $(LOCAL_SRCS_ITOPO))))
79 LOCAL_OBJS_FWK = $(addprefix $(LOCAL_OBJ_DIR_FWK)/,$(patsubst %.c,%.oa15fg,$(notdir $(LOCAL_SRCS_FWK))))
80 LOCAL_OBJS_APP = $(addprefix $(LOCAL_OBJ_DIR_APP)/,$(patsubst %.c,%.oa15fg,$(notdir $(LOCAL_SRCS_APP))))
81 OBJS = $(COMMON_OBJS_CMP) \
82 $(COMMON_OBJS_PFP) \
83 $(COMMON_OBJS_COMMON) \
84 $(LOCAL_OBJS_ITOPO) \
85 $(LOCAL_OBJS_FWK) \
86 $(LOCAL_OBJS_APP)
88 CONFIG = bin/$(PROFILE)/configuro
90 # Package repositories
91 PKGPATH := $(BIOS_INSTALL_DIR)/packages
92 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
93 PKGPATH := $(PKGPATH)+$(UIA_INSTALL_DIR)/packages
94 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
96 # Include generated dependency files
97 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_CMP))
98 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_PFP))
99 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_COMMON))
100 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_ITOPO))
101 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_FWK))
102 -include $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_APP))
104 .PRECIOUS: %/compiler.opt %/linker.cmd
106 all: paf_libs debug release
109 # ======== rule to generate PAF libraries ========
110 paf_libs:
111 $(MAKE) -C $(PAF_INSTALL_DIR)/pa/build install ARCH=a15
113 # ======== rule for debug build configuration ========
114 debug:
115 $(MAKE) PROFILE=debug test_arm.x
117 # ======== rule for release build configuration ========
118 release:
119 $(MAKE) PROFILE=release test_arm.x
122 # ======== rule for link ========
123 test_arm.x: bin/$(PROFILE)/test_arm.xa15fg
124 bin/$(PROFILE)/test_arm.xa15fg: $(OBJS) $(libs) $(CONFIG)/linker.cmd
125 @$(ECHO) "#"
126 @$(ECHO) "# Making $@ ..."
127 $(LD) -o $@ $(LDFLAGS) $(OBJS) $(libs) -Wl,-T,$(CONFIG)/linker.cmd \
128 -Wl,-T,application/app_noip.cmd \
129 -lgcc -lc -lm -lnosys $(LDLIBS)
131 #
132 # ======== rules for compilations of source files ========
133 #
134 $(COMMON_OBJ_DIR_CMP)/%.oa15fg: $(COMMON_SRC_DIR_CMP)/%.c $(CONFIG)/compiler.opt | $(COMMON_OBJ_DIR_CMP)
135 @$(ECHO) "#"
136 @$(ECHO) "# Making $< $@ ..."
137 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
139 $(COMMON_OBJ_DIR_PFP)/%.oa15fg: $(COMMON_SRC_DIR_PFP)/%.c $(CONFIG)/compiler.opt | $(COMMON_OBJ_DIR_PFP)
140 @$(ECHO) "#"
141 @$(ECHO) "# Making $< $@ ..."
142 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
144 $(COMMON_OBJ_DIR_COMMON)/%.oa15fg: $(COMMON_SRC_DIR_COMMON)/%.c $(CONFIG)/compiler.opt | $(COMMON_OBJ_DIR_COMMON)
145 @$(ECHO) "#"
146 @$(ECHO) "# Making $< $@ ..."
147 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
149 $(LOCAL_OBJ_DIR_ITOPO)/%.oa15fg: $(LOCAL_SRC_DIR_ITOPO)/%.c $(CONFIG)/compiler.opt | $(LOCAL_OBJ_DIR_ITOPO)
150 @$(ECHO) "#"
151 @$(ECHO) "# Making $< $@ ..."
152 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
154 $(LOCAL_OBJ_DIR_FWK)/%.oa15fg: $(LOCAL_SRC_DIR_FWK)/%.c $(CONFIG)/compiler.opt | $(LOCAL_OBJ_DIR_FWK)
155 @$(ECHO) "#"
156 @$(ECHO) "# Making $< $@ ..."
157 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
159 $(LOCAL_OBJ_DIR_APP)/%.oa15fg: $(LOCAL_SRC_DIR_APP)/%.c $(CONFIG)/compiler.opt | $(LOCAL_OBJ_DIR_APP)
160 @$(ECHO) "#"
161 @$(ECHO) "# Making $< $@ ..."
162 $(CC) $(CPPFLAGS) $(CFLAGS) $(CINCDIRS) -o $@ $<
164 # ======== rule for creation of output directories ========
165 $(OBJ_DIRS):
166 @echo "mkdir $@"
167 $(shell $(MKDIR) -p $@)
169 # ======== rule for XDC tools, configuro ========
170 %/compiler.opt: %/linker.cmd ;
171 %/linker.cmd: application/app.cfg ../shared/config.bld
172 @$(ECHO) "#"
173 @$(ECHO) "# Making $@ ..."
174 $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))" \
175 xdc.tools.configuro -o $(CONFIG) \
176 -t gnu.targets.arm.A15F \
177 -c $(gnu.targets.arm.A15F) \
178 -p ti.platforms.evmTCI66AK2G02:host \
179 -b ../shared/config.bld -r release \
180 --cfgArgs "{ \
181 profile: \"$(PROFILE)\" \
182 }" \
183 $(XDCFLAGS) \
184 application/app.cfg
186 install:
187 @$(ECHO) "#"
188 @$(ECHO) "# Making $@ ..."
189 @$(MKDIR) $(EXEC_DIR)/debug
190 $(CP) bin/debug/test_arm.xa15fg $(EXEC_DIR)/debug
191 @$(MKDIR) $(EXEC_DIR)/release
192 $(CP) bin/release/test_arm.xa15fg $(EXEC_DIR)/release
194 help:
195 @$(ECHO) "make # build executable"
196 @$(ECHO) "make clean # clean everything"
198 clean::
199 $(MAKE) -C $(PAF_INSTALL_DIR)/pa/build clean ARCH=a15
200 $(RMDIR) bin
203 # ======== install validation ========
204 ifeq (install,$(MAKECMDGOALS))
205 ifeq (,$(EXEC_DIR))
206 $(error must specify EXEC_DIR)
207 endif
208 endif
210 # ======== misc macros ========
211 XDCFLAGS = -Dxdc.platform.custom.check=false -DProjName=pa_i13_evmk2g_arm -DHsDevBuild=0
213 # ======== tool chain macros ========
214 CC = $(gnu.targets.arm.A15F)/bin/arm-none-eabi-gcc -c -MD -MF $@.dep
215 LD = $(gnu.targets.arm.A15F)/bin/arm-none-eabi-gcc
217 CPPFLAGS = -Dfar= -D__DYNAMIC_REENT__
218 CFLAGS = -mcpu=cortex-a15 -mtune=cortex-a15 -marm -mfloat-abi=hard $(CPREDEFS) -Wall -Wunused -Wunknown-pragmas -ffunction-sections -fdata-sections $(CCPROFILE_$(PROFILE)) @$(CONFIG)/compiler.opt $(CINCDIRS)
220 CPREDEFS = -Dk2g02 -Darm0 -DARMCOMPILE -DPAF_DEVICE=0xDA000000 -DNON_CACHE_STATUS
222 CINCDIRS = -I"$(gnu.targets.arm.A15F)/arm-none-eabi/include" \
223 -I"$(gnu.targets.arm.A15F)/arm-none-eabi/include/newlib-nano" \
224 -I"$(PDK_INSTALL_DIR)/packages" \
225 -I"$(XDAIS_INSTALL_DIR)/packages" \
226 -I"$(PAF_INSTALL_DIR)/pa/asp/com" \
227 -I"$(PAF_INSTALL_DIR)/pa/asp/std" \
228 -I"$(PAF_INSTALL_DIR)/pa/dec/com" \
229 -I"$(PAF_INSTALL_DIR)/pa/dec/pcm1/alg" \
230 -I"$(PAF_INSTALL_DIR)/pa/dec/pcm1/include" \
231 -I"$(PAF_INSTALL_DIR)/pa/sio/acp1" \
232 -I"$(PAF_INSTALL_DIR)/pa/sio/paf" \
233 -I"$(PAF_INSTALL_DIR)/pa/f/s3" \
234 -I"$(PAF_INSTALL_DIR)/pa/f/include" \
235 -I"$(PAF_INSTALL_DIR)/pa/f/alpha" \
236 -I"$(PAF_INSTALL_DIR)/pa/util/c67x_cintrins" \
237 -I"$(PAF_INSTALL_DIR)/pa/util/statusop_common" \
238 -I"$(PASDK_INSTALL_DIR)/common" \
239 -I"$(PASDK_INSTALL_DIR)/test_arm/framework" \
240 -I"$(PASDK_INSTALL_DIR)/test_arm/framework/itopo" \
241 -I"$(PASDK_INSTALL_DIR)/test_dsp/sio" \
242 -I"$(PASDK_INSTALL_DIR)/test_dsp/sio_dev2"
244 CCPROFILE_debug = -g -gdwarf-3 -gstrict-dwarf
245 CCPROFILE_release = -O2
247 LDFLAGS = $(LDPROFILE_$(PROFILE)) -mfloat-abi=hard -nostartfiles -Wl,-static -Wl,--gc-sections -Wl,-Map=$(@D)/obj/$(@F).map $(LDSYMS)
248 LDSYMS = -Wl,--defsym,STACKSIZE=0x10000 -Wl,--defsym,HEAPSIZE=0x400
250 LDLIBS = -L$(BIOS_INSTALL_DIR)/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/hard --specs=nano.specs \
251 -L$(PAF_INSTALL_DIR)/pa/build/a15/release
253 LDPROFILE_debug = -g -gdwarf-3 -gstrict-dwarf
254 LDPROFILE_release =
256 # ======== standard macros ========
257 ifneq (,$(wildcard $(XDC_INSTALL_DIR)/bin/echo.exe))
258 # use these on Windows
259 CP = $(XDC_INSTALL_DIR)/bin/cp
260 ECHO = $(XDC_INSTALL_DIR)/bin/echo
261 MKDIR = $(XDC_INSTALL_DIR)/bin/mkdir -p
262 RM = $(XDC_INSTALL_DIR)/bin/rm -f
263 RMDIR = $(XDC_INSTALL_DIR)/bin/rm -rf
264 else
265 # use these on Linux
266 CP = cp
267 ECHO = echo
268 MKDIR = mkdir -p
269 RM = rm -f
270 RMDIR = rm -rf
271 endif
273 # ======== debug, rule to show build variables ========
274 .show_build_vars:
275 @echo Object file base directory:
276 @echo $(OBJ_DIR_BASE)
277 @echo #
278 @echo Common, component vars
279 @echo $(COMMON_SRC_DIR_CMP)
280 @echo $(COMMON_SRCS_CMP)
281 @echo $(COMMON_OBJ_DIR_CMP)
282 @echo $(COMMON_OBJS_CMP)
283 @echo #
284 @echo Common, PFP vars
285 @echo $(COMMON_SRC_DIR_PFP)
286 @echo $(COMMON_SRCS_PFP)
287 @echo $(COMMON_OBJ_DIR_PFP)
288 @echo $(COMMON_OBJS_PFP)
289 @echo #
290 @echo Common vars
291 @echo $(COMMON_SRC_DIR_COMMON)
292 @echo $(COMMON_SRCS_COMMON)
293 @echo $(COMMON_OBJ_DIR_COMMON)
294 @echo $(COMMON_OBJS_COMMON)
295 @echo #
296 @echo Framework, itopo vars
297 @echo $(LOCAL_SRC_DIR_ITOPO)
298 @echo $(LOCAL_SRCS_ITOPO)
299 @echo $(LOCAL_OBJ_DIR_ITOPO)
300 @echo $(LOCAL_OBJS_ITOPO)
301 @echo #
302 @echo Framework vars
303 @echo $(LOCAL_SRC_DIR_FWK)
304 @echo $(LOCAL_SRCS_FWK)
305 @echo $(LOCAL_OBJ_DIR_FWK)
306 @echo $(LOCAL_OBJS_FWK)
307 @echo #
308 @echo Applications vars
309 @echo $(LOCAL_SRC_DIR_APP)
310 @echo $(LOCAL_SRCS_APP)
311 @echo $(LOCAL_OBJ_DIR_APP)
312 @echo $(LOCAL_OBJS_APP)
313 @echo #
314 @echo Dependency vars
315 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_CMP))
316 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_PFP))
317 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(COMMON_OBJS_COMMON))
318 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_ITOPO))
319 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_FWK))
320 @echo $(patsubst %.oa15fg,%.oa15fg.dep,$(LOCAL_OBJS_APP))