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