xref: /utopia/UTPA2-700.0.x/projects/project/k6_android/Makefile (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1
2################################################################################
3#
4# Copyright (c) 2008-2009 MStar Semiconductor, Inc.
5# All rights reserved.
6#
7# Unless otherwise stipulated in writing, any and all information contained
8# herein regardless in any format shall remain the sole proprietary of
9# MStar Semiconductor Inc. and be kept in strict confidence
10# ("MStar Confidential Information") by the recipient.
11# Any unauthorized act including without limitation unauthorized disclosure,
12# copying, use, reproduction, sale, distribution, modification, disassembling,
13# reverse engineering and compiling of the contents of MStar Confidential
14# Information is unlawful and strictly prohibited. MStar hereby reserves the
15# rights to any and all damages, losses, costs and expenses resulting therefrom.
16#
17#
18# Makefile used for building application.
19#
20#
21################################################################################
22
23export
24unexport VPATH
25unexport SRCDIR_CHIP SRCDIR_LIB SRCDIR_SYS
26unexport OBJ_C_CHIP0 OBJ_C_ASM0 OBJ_C_LIB0 OBJ_C_SYS0
27unexport LIB_INC
28
29# **********************************************
30# Environment
31# **********************************************
32PROJ        = $(CURDIR)
33ROOT        = $(PROJ)/../..
34ROOTLIB     = $(ROOT)/mxlib
35DDIAPI      = $(ROOTLIB)/api
36DDIDRV      = $(ROOTLIB)/drv
37DDIHAL      = $(ROOTLIB)/hal
38PUBINC      = $(ROOTLIB)/include
39
40export PUBINC
41# **********************************************
42# Import configure file
43# Required:
44#	$(ROOT), $(ROOTLIB)
45# **********************************************
46-include config
47
48
49# **********************************************
50# Project specific
51# **********************************************
52# Base Operating System
53OS_BUILT    =
54
55
56# **********************************************
57# Directories
58# **********************************************
59# Source files of specific chip in library
60SRCDIR_CHIP = \
61            $(ROOTLIB)/hal/$(CHIP)                                  \
62            $(ROOTLIB)/hal/$(CHIP)/bdma                             \
63            $(ROOTLIB)/hal/$(CHIP)/sem                              \
64            $(ROOTLIB)/hal/$(CHIP)/mmio                             \
65            $(ROOTLIB)/hal/$(CHIP)/uart                             \
66            $(ROOTLIB)/hal/$(CHIP)/irq                              \
67            $(ROOTLIB)/hal/$(CHIP)/sys                              \
68            $(ROOTLIB)/hal/$(CHIP)/miu                              \
69
70# Source files of library
71SRCDIR_LIB  = \
72            $(ROOTLIB)/drv/bdma                                     \
73            $(ROOTLIB)/drv/sem                                      \
74            $(ROOTLIB)/drv/mmio                                     \
75            $(ROOTLIB)/drv/mbx/$(OS_TYPE)                           \
76            $(ROOTLIB)/drv/uart                                     \
77            $(ROOTLIB)/drv/irq                                      \
78            $(ROOTLIB)/drv/sys                                      \
79            $(ROOTLIB)/drv/miu                                      \
80
81
82SRCDIR_SYS = \
83            $(ROOTLIB)/msos/$(MCU_TYPE)                             \
84            $(ROOTLIB)/msos/$(OS_TYPE)                              \
85            $(ROOTLIB)/hal/$(CHIP)/msos/$(OS_TYPE)                  \
86            $(ROOTLIB)/msos/common                                  \
87            $(ROOTLIB)/utopia_core/$(OS_TYPE)
88
89SRCDIR_FS = \
90            $(ROOTLIB)/msfs/$(OS_TYPE)                              \
91
92# Header file of specific chip
93INCDIR_CHIP = \
94            $(ROOTLIB)/hal/$(CHIP)                                  \
95            $(ROOTLIB)/hal/$(CHIP)/bdma                             \
96            $(ROOTLIB)/hal/$(CHIP)/sem                              \
97            $(ROOTLIB)/hal/$(CHIP)/mmio                             \
98            $(ROOTLIB)/hal/$(CHIP)/uart                             \
99            $(ROOTLIB)/hal/$(CHIP)/irq                              \
100            $(ROOTLIB)/hal/$(CHIP)/sys                              \
101            $(ROOTLIB)/hal/$(CHIP)/miu                              \
102
103# Header file of inline assembly in library
104INCDIR_ASM  = \
105
106# Header files of library
107INCDIR_LIB  = \
108            $(PROJ)                                                 \
109            $(ROOTLIB)                                              \
110            $(ROOTLIB)/drv/bdma                                     \
111            $(ROOTLIB)/drv/miu                                      \
112            $(ROOTLIB)/drv/mbx                                      \
113            $(ROOTLIB)/drv/mbx/$(OS_TYPE)                           \
114            $(ROOTLIB)/drv/sem                                      \
115            $(ROOTLIB)/drv/mmio                                     \
116            $(ROOTLIB)/drv/irq                                      \
117            $(ROOTLIB)/drv/sys                                      \
118            $(ROOTLIB)/drv/mmio                                     \
119            $(ROOTLIB)/drv/uart                                     \
120            $(ROOTLIB)/hal/$(CHIP)                                  \
121            $(ROOTLIB)/msos                                         \
122            $(ROOTLIB)/msos/$(OS_TYPE)                              \
123            $(ROOTLIB)/utopia_core/                                 \
124            $(ROOTLIB)/msfs                                         \
125            $(ROOTLIB)/drv/audio                                    \
126            $(ROOTLIB)/hal/$(CHIP)/msos/$(OS_TYPE)                  \
127
128INCDIR_LIB_H = \
129            $(ROOTLIB)/drv/miu                                      \
130
131# FW binary files of library
132BINDIR_LIB  = \
133            $(ROOTLIB)/hal/$(CHIP)/hvd                              \
134            $(ROOTLIB)/hal/$(CHIP)/mvd                              \
135            $(ROOTLIB)/hal/$(CHIP)/rvd                              \
136            $(ROOTLIB)/drv/$(CHIP)/rvd                              \
137            $(ROOTLIB)/hal/$(CHIP)/audsp                            \
138            $(ROOTLIB)/hal/$(CHIP)/tsp                              \
139
140BIN_PATH    = $(PROJ)/bin
141OBJ_PATH    = $(PROJ)/obj
142BSPLIB_PATH = $(PROJ)/bsp/lib
143BSPINC_PATH = $(PROJ)/bsp/include
144BSPBIN_PATH = $(PROJ)/bsp/bin
145
146
147# Search source file path
148VPATH       = $(SRCDIR_CHIP) $(SRCDIR_SYS) $(SRCDIR_FS) $(SRCDIR_ASM) $(SRCDIR_LIB)
149
150include $(ROOTLIB)/$(CHIP)_android.mk
151include $(ROOTLIB)/ddi.mk
152
153# **********************************************
154# Image file names
155# **********************************************
156IMAGE_BIN   = $(BIN_PATH)/$(IMAGENAME).bin
157IMAGE_REC   = $(BIN_PATH)/$(IMAGENAME).rec
158IMAGE_ELF   = $(BIN_PATH)/$(IMAGENAME).elf
159IMAGE_MAP   = $(BIN_PATH)/$(IMAGENAME).map
160IMAGE_DIS   = $(BIN_PATH)/$(IMAGENAME).dis
161IMAGE_SIZ   = $(BIN_PATH)/$(IMAGENAME).siz
162IMAGE_SYM   = $(BIN_PATH)/$(IMAGENAME).sym
163
164
165# **********************************************
166# Files to be compiled
167# **********************************************
168SRC_C_CHIP  = $(foreach dir, $(SRCDIR_CHIP),  $(wildcard $(dir)/*.c))
169SRC_C_ASM   = $(foreach dir, $(SRCDIR_ASM),   $(wildcard $(dir)/*.c))
170SRC_C_LIB   = $(foreach dir, $(SRCDIR_LIB),   $(wildcard $(dir)/*.c))
171SRC_C_SYS   = $(foreach dir, $(SRCDIR_SYS),   $(wildcard $(dir)/*.c))
172SRC_C_FS    = $(foreach dir, $(SRCDIR_FS),    $(wildcard $(dir)/*.c))
173
174OBJ_C_CHIP0 = $(notdir $(patsubst %.c, %.o,   $(SRC_C_CHIP)))
175OBJ_C_ASM0  = $(notdir $(patsubst %.c, %.o,   $(SRC_C_ASM) ))
176OBJ_C_LIB0  = $(notdir $(patsubst %.c, %.o,   $(SRC_C_LIB) ))
177OBJ_C_SYS0  = $(notdir $(patsubst %.c, %.o,   $(SRC_C_SYS) ))
178OBJ_C_FS0   = $(notdir $(patsubst %.c, %.o,   $(SRC_C_FS) ))
179OBJ_C_CHIP  = $(foreach file, $(OBJ_C_CHIP0), $(OBJ_PATH)/$(file))
180OBJ_C_ASM   = $(foreach file, $(OBJ_C_ASM0),  $(OBJ_PATH)/$(file))
181OBJ_C_LIB   = $(foreach file, $(OBJ_C_LIB0),  $(OBJ_PATH)/$(file))
182OBJ_C_SYS   = $(foreach file, $(OBJ_C_SYS0),  $(OBJ_PATH)/$(file))
183OBJ_C_FS    = $(foreach file, $(OBJ_C_FS0),   $(OBJ_PATH)/$(file))
184
185
186# **********************************************
187# Libraries
188# **********************************************
189
190DDI_PATH = $(ROOT)/lib/$(CHIP)_$(OS_TYPE)/$(MCU_TYPE)_$(BLT_TYPE)
191
192
193# Standard Libraries Path
194
195
196# Middleware Libraries Path
197
198
199# Libraries
200DDI_LIB = $(DDI_PATH)/lib$(OS_TYPE).$(LIB_EXT)
201
202# Include files of output library
203LIB_INC     =
204LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/asm*.h))
205LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/api*.h))
206LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/drv*.h))
207LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/Ms*.h))
208LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/regCHIP.h))
209LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/$(CFG_BOARD).h))
210LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/utopia.h))
211LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/utopia_dapi.h))
212LIB_INC    += $(foreach dir, $(INCDIR_LIB), $(wildcard $(dir)/utopia_driver_id.h))
213
214LIB_INC    += $(foreach dir, $(MXLIB), $(wildcard $(dir)/api*.h))
215LIB_INC    += $(foreach dir, $(MXLIB), $(wildcard $(dir)/drv*.h))
216
217# FW Binary files of output library
218LIB_FW_BIN  =
219LIB_FW_BIN += $(foreach dir, $(BINDIR_LIB), $(wildcard $(dir)/fw*.bin))
220LIB_FW_BIN += $(foreach dir, $(BINDIR_LIB), $(wildcard $(dir)/fw*.dat))
221LIB_FW_BIN += $(foreach dir, $(BINDIR_LIB), $(wildcard $(dir)/out_*.bin))
222LIB_FW_BIN += $(foreach dir, $(BINDIR_LIB), $(wildcard $(dir)/aucode_*.h))
223
224# Public include files
225PUB_INC    =
226PUB_INC    += $(foreach dir, $(PUBINC), $(wildcard $(dir)/*.h))
227
228# **********************************************
229# Compiler and linker options
230# **********************************************
231ANDROID_DIR = $(ANDROID_BUILD_TOP)
232OS_INC_DIR  = $(ANDROID_DIR)/bionic/libc/arch-arm/include \
233              $(ANDROID_DIR)/bionic/libc/include \
234              $(ANDROID_DIR)/bionic/libstdc++/include \
235              $(ANDROID_DIR)/bionic/libc/kernel/common \
236              $(ANDROID_DIR)/bionic/libc/kernel/arch-arm \
237              $(ANDROID_DIR)/bionic/libm/include \
238              $(ANDROID_DIR)/bionic/libm/include/arch/arm \
239              $(ANDROID_DIR)/bionic/libthread_db/include \
240              $(ANDROID_DIR)/system/core/include
241OS_LIB_DIR  =
242
243
244ALL_INC_DIR = $(INCDIR_ASM) $(INCDIR_CHIP) $(INCDIR_LIB) $(INCDIR_LIB_H) $(OS_INC_DIR)
245
246CC_INCS     = $(foreach dir, $(ALL_INC_DIR), -I$(dir) -I$(PUBINC))
247
248CC_DEFS     = $(CFG_CC_DEFS) -D'OS_LINUX' -D'LIB_NAME="$(IMAGENAME).lib"' -D'PWS_AUTOGEN' -D'SK_RELEASE' -D'MS_OPTIMIZE' -D'ANDROID' -D'TV_OS' -D'CONFIG_MANHATTAN'
249
250# GCC options:
251CC_OPTS     = $(CFG_CC_OPTS) -c
252
253#----------------------------------------------------------------
254# thum mode support, but use arm mode to build.
255ARCH_ARM_HAVE_THUMB_SUPPORT := true
256LOCAL_ARM_MODE := arm
257
258# $(1): os/arch
259define select-android-config-h
260$(ANDROID_DIR)/build/core/combo/include/arch/$(1)/AndroidConfig.h
261endef
262
263arch_variant_cflags := -march=armv7-a \
264                       -mfloat-abi=softfp \
265                       -mfpu=neon
266
267arch_variant_ldflags := -Wl,--fix-cortex-a8
268
269COMMON_GLOBAL_CFLAGS := -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith
270COMMON_GLOBAL_CPPFLAGS := $(COMMON_GLOBAL_CFLAGS) -Wsign-promo
271COMMON_RELEASE_CFLAGS := -DNDEBUG -UDEBUG
272COMMON_RELEASE_CPPFLAGS := $(COMMON_RELEASE_CFLAGS)
273
274TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
275TARGET_GLOBAL_CFLAGS := -fno-exceptions -Wno-multichar
276TARGET_GLOBAL_CPPFLAGS :=
277TARGET_RELEASE_CFLAGS := -O2 -g -fno-strict-aliasing
278TARGET_RELEASE_CPPFLAGS :=
279
280#----------------------------------------------------------------
281TARGET_arm_CFLAGS :=    -O2 \
282                        -fomit-frame-pointer \
283                        -fstrict-aliasing    \
284                        -funswitch-loops
285
286# Modules can choose to compile some source as thumb. As
287# non-thumb enabled targets are supported, this is treated
288# as a 'hint'. If thumb is not enabled, these files are just
289# compiled as ARM.
290ifeq ($(ARCH_ARM_HAVE_THUMB_SUPPORT),true)
291TARGET_thumb_CFLAGS :=  -mthumb \
292                        -Os \
293                        -fomit-frame-pointer \
294                        -fno-strict-aliasing
295else
296TARGET_thumb_CFLAGS := $(TARGET_arm_CFLAGS)
297endif
298
299# Set FORCE_ARM_DEBUGGING to "true" in your buildspec.mk
300# or in your environment to force a full arm build, even for
301# files that are normally built as thumb; this can make
302# gdb debugging easier.  Don't forget to do a clean build.
303#
304# NOTE: if you try to build a -O0 build with thumb, several
305# of the libraries (libpv, libwebcore, libkjs) need to be built
306# with -mlong-calls.  When built at -O0, those libraries are
307# too big for a thumb "BL <label>" to go from one end to the other.
308ifeq ($(FORCE_ARM_DEBUGGING),true)
309  TARGET_arm_CFLAGS += -fno-omit-frame-pointer -fno-strict-aliasing
310  TARGET_thumb_CFLAGS += -marm -fno-omit-frame-pointer
311endif
312
313ifeq ($(strip $(LOCAL_ARM_MODE)),)
314    TARGET_ARCH_CFLAGS := $(TARGET_thumb_CFLAGS)
315else
316    TARGET_ARCH_CFLAGS := $(TARGET_arm_CFLAGS)
317endif
318
319TARGET_GLOBAL_CFLAGS += \
320			-msoft-float -fpic -fPIE \
321			-ffunction-sections \
322			-fdata-sections \
323			-funwind-tables \
324			-fstack-protector \
325			-Wa,--noexecstack \
326			-Werror=format-security \
327			-D_FORTIFY_SOURCE=1 \
328			-fno-short-enums \
329			$(arch_variant_cflags)
330
331android_config_h := $(call select-android-config-h,linux-arm)
332TARGET_ANDROID_CONFIG_CFLAGS := -include $(android_config_h) -I $(dir $(android_config_h))
333TARGET_GLOBAL_CFLAGS += $(TARGET_ANDROID_CONFIG_CFLAGS)
334
335# This warning causes dalvik not to build with gcc 4.6.x and -Werror.
336# We cannot turn it off blindly since the option is not available
337# in gcc-4.4.x.  We also want to disable sincos optimization globally
338# by turning off the builtin sin function.
339ifneq ($(filter 4.6 4.6.%, $(shell $(CC) --version)),)
340TARGET_GLOBAL_CFLAGS += -Wno-unused-but-set-variable -fno-builtin-sin \
341			-fno-strict-volatile-bitfields
342endif
343
344# This is to avoid the dreaded warning compiler message:
345#   note: the mangling of 'va_list' has changed in GCC 4.4
346#
347# The fact that the mangling changed does not affect the NDK ABI
348# very fortunately (since none of the exposed APIs used va_list
349# in their exported C++ functions). Also, GCC 4.5 has already
350# removed the warning from the compiler.
351#
352TARGET_GLOBAL_CFLAGS += -Wno-psabi
353
354# We only need thumb interworking in cases where thumb support
355# is available in the architecture, and just to be sure, (and
356# since sometimes thumb-interwork appears to be default), we
357# specifically disable when thumb support is unavailable.
358ifeq ($(ARCH_ARM_HAVE_THUMB_SUPPORT),true)
359TARGET_GLOBAL_CFLAGS += -mthumb-interwork
360else
361TARGET_GLOBAL_CFLAGS += -mno-thumb-interwork
362endif
363
364TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden
365
366# More flags/options can be added here
367TARGET_RELEASE_CFLAGS := \
368			-DNDEBUG \
369			-g \
370			-Wstrict-aliasing=2 \
371			-fgcse-after-reload \
372			-frerun-cse-after-loop \
373			-frename-registers
374
375
376TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS)
377TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS)
378TARGET_RELEASE_CFLAGS += $(COMMON_RELEASE_CFLAGS)
379TARGET_RELEASE_CPPFLAGS += $(COMMON_RELEASE_CPPFLAGS)
380
381TARGET_GLOBAL_CFLAGS += $(TARGET_ERROR_FLAGS) $(TARGET_RELEASE_CFLAGS) $(TARGET_ARCH_CFLAGS)
382TARGET_GLOBAL_CPPFLAGS += $(TARGET_ERROR_FLAGS) $(TARGET_RELEASE_CPPFLAGS) $(TARGET_ARCH_CFLAGS)
383
384#----------------------------------------------------------------
385CC_OPTS     += $(TARGET_GLOBAL_CFLAGS)
386
387# AS options:
388AS_OPTS     = $(CFG_AS_OPTS) -G0 -O2
389
390
391# LD options:
392LD_SCRIPT   =
393LD_LIBS     = -L$(DDI_PATH) -L$(OS_LIB_DIR) -L$(CFG_STDLIB_DIR) -T$(LD_SCRIPT)
394LD_OPTS     = $(CFG_LD_OPTS)
395
396TARGET_GLOBAL_LDFLAGS += \
397			-Wl,-z,noexecstack \
398			-Wl,-z,relro \
399			-Wl,-z,now \
400			-Wl,--warn-shared-textrel \
401			-Wl,--icf=safe \
402			$(arch_variant_ldflags)
403
404LD_OPTS     += $(TARGET_GLOBAL_LDFLAGS)
405
406
407# **********************************************
408# C Helper Utilities
409# **********************************************
410# Generate relative path for Doxygen
411DXY_SRC     = $(subst $(PROJ)/,,$(LIB_INC) $(SRC_C_LIB) $(SRCDIR_SYS))
412DXY_SRC     += $(subst $(PROJ)/,,$(foreach dir,$(MXLIB),$(wildcard $(dir)/*.c)))
413
414# Generate options list for Lint
415ifeq ($(shell uname -o),Cygwin)                                     #TODO: revise cygwin related
416LINT_LOG    = $(shell cygpath -m $(CURDIR)/lint_test.log)
417LINT_FILES  = $(shell cygpath -m $(CURDIR)/lint_files.lnt)
418LINT_INC    = $(foreach dir,$(shell cygpath -m $(ALL_INC_DIR)),-i"$(dir)") -i"$(shell cygpath -m $(CFG_LINT))"
419else
420LINT_LOG    = $(CURDIR)/lint_test.log
421LINT_FILES  = $(CURDIR)/lint_files.lnt
422LINT_INC    = $(foreach dir,$(ALL_INC_DIR),-i"$(dir)") -i"$(CFG_LINT)"
423LINT_INC    += -i"$(CURDIR)/../../tools/lint/aeon_include"
424LINT_INC    += -i"$(CURDIR)/../../tools/lint/mips-linux-gnu_include"
425LINT_INC    += -i"$(CURDIR)/../../tools/lint/mips-sde-elf_include"
426endif
427
428
429# **********************************************
430# Rules
431# **********************************************
432.PHONY : all setup clean bsp depend docgen $(MXLIB)
433
434
435# Project Build
436all :  setup $(MXLIB) syslib
437
438# Library Package
439bsp :
440	@rm -f -r                               $(BSPLIB_PATH)
441	@rm -f -r                               $(BSPINC_PATH)
442	@rm -f -r                               $(BSPBIN_PATH)
443	-@mkdir -p                              $(BSPLIB_PATH) 2> /dev/null;
444	-@mkdir -p                              $(BSPINC_PATH) 2> /dev/null;
445	-@mkdir -p                              $(BSPBIN_PATH) 2> /dev/null;
446	@cp         $(DDI_PATH)/*.$(LIB_EXT)    $(BSPLIB_PATH)
447	@cp         $(LIB_INC)                  $(BSPINC_PATH)
448	@cp         $(PUB_INC)                  $(BSPINC_PATH)
449	@cp         $(LIB_FW_BIN)               $(BSPBIN_PATH)
450	@$(AR) crsP $(BSPLIB_PATH)/libutopia.a $(OBJ_PATH)/*
451	@echo "Make $(CHIP) $(PROJNAME) board support package...";
452
453# Library Document Auto Generation
454docgen :
455	rm -f -r                                dxy_files;
456	-mkdir -p                               dxy_files 2> /dev/null;
457	@echo 'INPUT += \ ' >                   dxy.infile;
458	@echo $(DXY_SRC) >>                     dxy.infile;
459	doxygen                                 $(IMAGENAME).dxyfile;
460#	rm -f                                   dxy.infile;
461#	@echo DXY_SRC = $(DXY_SRC)
462
463
464# Project Lint Report
465lint :
466	@echo "Generate $(CHIP) $(PROJNAME) lint report $(LINT_LOG)...";
467	@echo `grep 'Error' $(LINT_LOG) | wc -l` LINT Errors
468
469
470# Project Library Build
471SYS_MSG :
472	@echo [Makefile][$(notdir $(DDI_LIB))]
473
474SYS_LIB : $(OBJ_C_CHIP) $(OBJ_C_SYS) $(OBJ_C_ASM) $(OBJ_C_LIB)
475#Add section :MsOS
476	@$(OBJCOPY) --add-section .mmodule_version=$(ROOTLIB)/msos/version_info $(dir $<)MsOS_$(OS_TYPE).o
477ifneq ($(MAKE_TYPE),lint)
478ifeq ($(LINK_TYPE),dynamic)
479	@$(CC) $(CFG_CC_OPTS) $(LD_OPTS) -o $(DDI_LIB) $^;
480else
481	@$(AR) crsP $(DDI_LIB) $^;
482endif
483endif
484	@date;
485
486syslib : SYS_MSG SYS_LIB
487
488$(MXLIB) :
489	@echo [$(CHIP)_android.mk][$(notdir $@)]
490	@$(MAKE) -s -C $@ lib
491ifeq ($(PARA), 1)
492	@if [ ! -f $@/cpptestscan.bdf ]; then					\
493		echo ERROR! No $@/cpptestscan.bdf;					\
494	fi
495	@if [ -f $@/cpptestscan.bdf ]; then						\
496		cat $@/cpptestscan.bdf >> $(PROJ)/cpptestscan.bdf;	\
497		rm $@/cpptestscan.bdf;								\
498	fi
499endif
500
501# Project Source Build
502$(OBJ_C_CHIP) $(OBJ_C_ASM) $(OBJ_C_SYS) : $(OBJ_PATH)/%.o : %.c
503ifneq ($(MAKE_TYPE),lint)
504	@echo [CC] $(notdir $@)
505	@$(CC) $(CC_OPTS) $(CC_DEFS) $(CC_INCS) -o $@ $<;
506else
507	@echo [LINT] $(notdir $<)
508ifeq ($(shell uname -o),Cygwin)
509	@$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $(shell cygpath -m $<) >>$(LINT_LOG)
510	@echo $< >>$(LINT_FILES)
511else
512	@$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $< >>$(LINT_LOG)
513	@echo $< >>$(LINT_FILES)
514endif
515endif
516
517#	@$(AR) -cru $(DDI_LIB) $@;
518
519$(OBJ_C_LIB) $(OBJ_C_FS): $(OBJ_PATH)/%.o : %.c
520ifneq ($(MAKE_TYPE),lint)
521	@$(CC) $(CC_OPTS) $(CC_DEFS) $(CC_INCS) -o $@ $<;
522else
523	echo [LINT] $(notdir $<)
524ifeq ($(shell uname -o),Cygwin)
525	@$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $(shell cygpath -m $<) >>$(LINT_LOG)
526	echo $< >>$(LINT_FILES)
527else
528	@$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $< >>$(LINT_LOG)
529	echo $< >>$(LINT_FILES)
530endif
531endif
532#ifeq ($(OS_TYPE),$(notdir $(<D)))
533	@$(OBJCOPY) --add-section .mmodule_version=$(subst /$(OS_TYPE),,$(dir $<D))version_info $@
534
535# Single Driver Build
536$(DRV_DIR): setup
537	@echo [ddi.mk] $@
538	@$(MAKE) -s -C $(DDIDRV)/$@ clean lib
539
540$(API_DIR): setup
541	@echo [ddi.mk] $@
542	@$(MAKE) -s -C $(DDIAPI)/$@ clean lib
543
544msos_setup: setup
545	@echo [Makefile][libMsOS.$(LIB_EXT)]
546	@if	[	-f $(OBJ_PATH)/MsOS_$(OS_TYPE).o	];\
547		then\
548		rm $(OBJ_PATH)/MsOS_$(OS_TYPE).o;\
549	fi
550
551msos: msos_setup $(DDI_PATH)/libMsOS.$(LIB_EXT)
552ifneq ($(MAKE_TYPE),lint)
553ifeq ($(LINK_TYPE),dynamic)
554	@$(CC)  $(CFG_CC_OPTS) $(LD_OPTS) -o $(DDI_PATH)/libMsOS.$(LIB_EXT) $(OBJ_C_SYS);
555	@$(OBJCOPY) --add-section .mmodule_version=$(ROOTLIB)/msos/version_info $(DDI_PATH)/libMsOS.$(LIB_EXT)
556else
557	@$(AR) crsP $(DDI_PATH)/libMsOS.$(LIB_EXT) $(OBJ_C_SYS);
558endif
559endif
560
561$(DDI_PATH)/libMsOS.$(LIB_EXT) : $(OBJ_C_SYS)
562
563
564msfs_setup: setup
565	@echo [Makefile][libMsFS.$(LIB_EXT)]
566
567msfs: msfs_setup $(DDI_PATH)/libMsFS.$(LIB_EXT)
568ifneq ($(MAKE_TYPE),lint)
569ifeq ($(LINK_TYPE),dynamic)
570	@$(CC)  $(CFG_CC_OPTS) $(LD_OPTS) -o $(DDI_PATH)/libMsFS.$(LIB_EXT) $(OBJ_C_FS);
571else
572	@$(AR) crsP $(DDI_PATH)/libMsFS.$(LIB_EXT) $(OBJ_C_FS);
573endif
574endif
575
576$(DDI_PATH)/libMsFS.$(LIB_EXT) : $(OBJ_C_FS)
577
578# Project Setup
579setup :
580	-@mkdir -p $(OBJ_PATH) 2> /dev/null;
581	-@mkdir -p $(BIN_PATH) 2> /dev/null;
582	-@mkdir -p $(DDI_PATH) 2> /dev/null;
583	@echo "Make $(CHIP) $(PROJNAME) library...";
584	@date;
585ifeq ($(MAKE_TYPE),lint)
586	@rm -rf $(LINT_FILES)
587	@rm -rf $(LINT_LOG)
588endif
589
590
591# Project Clean
592clean :
593	@$(foreach dir, $(MXLIB), $(MAKE) -s -C $(dir) clean;)
594	@rm -rf $(OBJ_PATH)
595	@rm -rf $(BIN_PATH)
596	@rm -rf $(DDI_PATH)
597	@rm -rf $(PKG_DIR)/include/$(CHIP);
598	@rm -rf $(PKG_DIR)/os;
599	@rm -rf lint_files
600	@rm -rf dxy_files
601	@rm -rf bsp
602	@rm -f *.tgz
603	@rm -f dxy.*
604ifeq ($(PARA), 1)
605	@rm -f $(PROJ)/cpptestscan.bdf
606endif
607	@echo "Clean $(CHIP) $(PROJNAME) library..."
608
609
610# Project Dependence
611depend :
612	$(CC) $(CC_OPTS) $(CC_DEFS) $(CC_INCS) -M $(SRC_C_CHIP) $(SRC_C_ASM) $(SRC_C_LIB) > $(BIN_PATH)/depend.mk
613
614
615# Project Dependence Full version
616dep :
617	$(CC) $(CC_OPTS) $(CC_DEFS) $(CC_INCS) -M $(SRC_C_CHIP) $(SRC_C_ASM) $(SRC_C_LIB) > $(BIN_PATH)/depend.mk
618	cat $(BIN_PATH)/depend.mk | sed -e 's/\(.*\)\.o/\$$\(OBJ_PATH\)\/\1.o/g' > depend.mk
619
620
621-include depend.mk