1#! make -f
2#----------------------------------------------------------------------------
3#  Project:  TwlSDK
4#  File:     modulerules.cctype.CW
5#
6#  Copyright 2007-2008 Nintendo. All rights reserved.
7#
8# These coded instructions, statements, and computer programs contain
9# proprietary information of Nintendo of America Inc. and/or Nintendo
10# Company Ltd., and are protected by Federal copyright law. They may
11# not be disclosed to third parties or copied or duplicated in any form,
12# in whole or in part, without the prior written consent of Nintendo.
13#
14# $Date:: 2009-01-22#$
15# $Rev: 9911 $
16# $Author: okubata_ryoma $
17#----------------------------------------------------------------------------
18
19.PRECIOUS:	$(OBJDIR)/%.o $(BINDIR)/%.$(TWL_ELF_EXT) $(LCFILE) $(PCHDR_H) $(PCHDR_PCH)
20
21# .c
22$(OBJS_CC):%.o:
23ifdef SILENT
24	echo $(TWLSDK_MSG_COMPILE) $(notdir $<)
25endif
26	$(CC) $(CCFLAGS) $(INCLUDES) $(PCHDR_CCFLAGS) -c $(call empath,$<) -MD -o $(dir $(call empath,$@))
27	@$(MOVE_SRC_DEPEND)
28
29# .cpp
30$(OBJS_CXX):%.o:
31ifdef SILENT
32	echo $(TWLSDK_MSG_COMPILE) $(notdir $<)
33endif
34	$(CC) $(CXXFLAGS) $(INCLUDES) $(PCHDR_CXXFLAGS) -c $(call empath,$<) -MD -o $(dir $(call empath,$@))
35	@$(MOVE_SRC_DEPEND)
36
37# .s
38$(OBJS_AS):%.o:
39ifdef SILENT
40	echo $(TWLSDK_MSG_ASSEMBLE) $(notdir $<)
41endif
42	$(AS) $(ASFLAGS) $(INCLUDES) -c $(call empath,$<) -MD -o $(dir $(call empath,$@))
43	@$(MOVE_SRC_DEPEND)
44
45# .lcf .par
46ifdef	LCFILE_SPEC
47
48ADDRESS_STATIC		?= $(DEFAULT_ADDRESS_STATIC)
49ADDRESS_ITCM		?= $(DEFAULT_ADDRESS_ITCM)
50ADDRESS_DTCM		?= $(DEFAULT_ADDRESS_DTCM)
51
52# Exporting
53GLIBRARIES_LINK		 = $(filter-out $(LIBRARIES_UNLINK) $(GLIBRARIES_EX),$(ELIBRARIES) $(GLIBRARIES))
54GLIBRARIES_EX_LINK	 =	$(filter-out $(LIBRARIES_UNLINK),$(GLIBRARIES_EX))
55LLIBRARIES_LINK		 = $(filter-out $(LIBRARIES_UNLINK) $(LLIBRARIES_EX),$(LLIBRARIES))
56LLIBRARIES_EX_LINK	 =	$(filter-out $(LIBRARIES_UNLINK),$(LLIBRARIES_EX))
57
58# Convert Unix and Windows format paths
59OBJS_STATIC_M		:= $(if $(filter-out 	,$(OBJS_STATIC)), $(call cygpathm_multi,$(OBJS_STATIC)))
60OBJS_AUTOLOAD_M		:= $(if $(filter-out 	,$(OBJS_AUTOLOAD)),$(call cygpathm_multi,$(OBJS_AUTOLOAD)))
61OBJS_OVERLAY_M		:= $(if $(filter-out 	,$(OBJS_OVERLAY)),$(call cygpathm_multi,$(OBJS_OVERLAY)))
62OBJS_LTDAUTOLOAD_M	:= $(if $(filter-out 	,$(OBJS_LTDAUTOLOAD)),$(call cygpathm_multi,$(OBJS_LTDAUTOLOAD)))
63OBJS_LTDOVERLAY_M	:= $(if $(filter-out 	,$(OBJS_LTDOVERLAY)),$(call cygpathm_multi,$(OBJS_LTDOVERLAY)))
64OBJDIR_M			:= $(call empath,$(OBJDIR))
65LIBDIR_M			:= $(call empath,$(LIBDIR))
66BINDIR_M			:= $(call empath,$(BINDIR))
67LCFILE_TEMPLATE_M	:= $(call empath,$(LCFILE_TEMPLATE))
68LDRES_TEMPLATE_M	:= $(call empath,$(LDRES_TEMPLATE))
69LDRES_FILE_M		:= $(call empath,$(LDRES_FILE))
70LCFILE_M			:= $(call empath,$(LCFILE))
71OBJS_M				 = $(if $(filter-out 	,$(OBJS)),$(call cygpathm_multi,$(OBJS)))
72
73# CODEGEN and LIBSUFFIX are set to TWL_LIBSUFFIX because both variables are currently used to determine whether to link the ARM or Thumb library in the LSF file
74#
75MAKELCF_DEFS	= -DTWLSDK_ROOT='$(ROOT_M)'									\
76		  -DTARGET_NAME='$(TARGET_NAME)'									\
77		  -DOBJS_STATIC='$(foreach OBJ,$(OBJS_STATIC_M),$(OBJ))'			\
78		  -DOBJS_AUTOLOAD='$(foreach OBJ,$(OBJS_AUTOLOAD_M),$(OBJ))'		\
79		  -DOBJS_OVERLAY='$(foreach OBJ,$(OBJS_OVERLAY_M),$(OBJ))'			\
80		  -DOBJS_LTDAUTOLOAD='$(foreach OBJ,$(OBJS_LTDAUTOLOAD_M),$(OBJ))'	\
81		  -DOBJS_LTDOVERLAY='$(foreach OBJ,$(OBJS_LTDOVERLAY_M),$(OBJ))'	\
82		  -DGLIBS='$(GLIBRARIES_LINK)'										\
83		  -DGLIBS_EX='$(GLIBRARIES_EX_LINK)'								\
84		  -DLLIBS='$(LLIBRARIES_LINK)'										\
85		  -DLLIBS_EX='$(LLIBRARIES_EX_LINK)'								\
86		  -DCC_LIBS='$(CC_LIBS)'											\
87		  -DCW_LIBS='$(CC_LIBS)'											\
88		  -DOBJDIR='$(OBJDIR_M)'											\
89		  -DLIBDIR='$(LIBDIR_M)'											\
90		  -DBINDIR='$(BINDIR_M)'											\
91		  -DCRT0_O='$(CRT0_O)'												\
92		  -DPROC='$(CODEGEN_PROC)'											\
93		  -DPLATFORM='$(TWL_PLATFORM)'										\
94		  -DCODEGEN='$(TWL_LIBSUFFIX)'										\
95		  -DARCHGEN='$(ARCHGEN_TYPE)'										\
96		  -DLIBSUFFIX='$(TWL_LIBSUFFIX)'									\
97		  -DBUILD='$(TWL_BUILD_DIR)'										\
98		  -DADDRESS_STATIC='$(ADDRESS_STATIC)'								\
99		  -DADDRESS_ITCM='$(ADDRESS_ITCM)'									\
100		  -DADDRESS_DTCM='$(ADDRESS_DTCM)'
101
102MAKELCF_FORMAT	?= -V$(CW_MAJOR_VER)
103
104MAKELCF_OPTS	 = $(MAKELCF_FLAGS) $(MAKELCF_DEFS) $(MAKELCF_FORMAT)
105
106$(LCFILE_AUTOGEN): $(LCFILE_SPEC) $(LCFILE_TEMPLATE) $(MAKEFILE) $(TWL_BUILDTOOLSDIR)/commondefs
107ifdef SILENT
108	echo $(TWLSDK_MSG_MAKE_LCF) $(notdir $@)
109endif
110	$(MAKELCF) $(MAKELCF_OPTS)  $(call empath,$<) $(LCFILE_TEMPLATE_M) $(call empath,$@)
111
112$(LDRES_AUTOGEN):  $(LCFILE_SPEC) $(LDRES_TEMPLATE)  $(MAKEFILE) $(TWL_BUILDTOOLSDIR)/commondefs
113ifdef SILENT
114	echo $(TWLSDK_MSG_MAKE_LCF) $(notdir $@)
115endif
116	@$(MAKELCF) $(MAKELCF_OPTS)  $(call empath,$<) $(LDRES_TEMPLATE_M)  $(call empath,$@)
117
118endif
119
120#----------------------------------------------------------------------------
121# Compress/digest
122
123ifeq    ($(CODEGEN_PROC),ARM9)
124# Always add digests into binary files if ARM9
125#ifdef	TWL_DIGEST
126COMPSTATIC_CMDS    +=   -a
127#endif
128ifdef   TWL_COMPRESS
129        COMPSTATIC_LTDSTATIC_FLAG   ?=  -S0
130        COMPSTATIC_CMDS +=  -9 -c -C $(COMPSTATIC_LTDSTATIC_FLAG)
131endif
132endif
133
134ifdef	COMPSTATIC_CMDS
135COMPSUFFIX		?= $(DEFAULT_COMPSUFFIX)
136ifneq	($(COMPSUFFIX),)
137COMPSTATIC_FLAGS	+= -e$(COMPSUFFIX)
138endif
139endif
140
141
142# libcxx workaround
143ifdef	SDK_CW_WA_LIBCXX
144CW_LIBCXX	= $(CW_LIBCXX_DIR)/$(CW_LIBCXX_ARM)
145$(CW_LIBCXX):	$(ROOT)/build/buildsetup/libcxx/Makefile
146	+$(MAKE) -f $<
147endif
148
149
150# .$(TWL_ELF_EXT)
151ifndef	USE_MY_RULE_NEF
152ifneq	($(TWL_MAKEROM),)
153$(BINDIR)/$(TARGET_BIN_BASENAME).$(TWL_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(LDRES_FILE) $(CW_LIBCXX)
154ifdef SILENT
155	echo $(TWLSDK_MSG_LINK) $(notdir $@)
156endif
157	$(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE_M) $(LCFILE_M) -o $(call empath,$@)
158ifdef	COMPSTATIC_CMDS
159	$(COMPSTATIC) $(COMPSTATIC_CMDS) $(COMPSTATIC_FLAGS) -f $(BINDIR)/component.files $(STDOUT)
160endif
161else
162$(BINDIR)/$(TARGET_BIN_BASENAME).$(TWL_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(CW_LIBCXX)
163ifdef SILENT
164	echo $(TWLSDK_MSG_LINK) $(notdir $@)
165endif
166	$(LD) $(LDFLAGS) $(LIBRARY_DIRS) $(foreach OBJ,$(OBJS_M),$(OBJ)) $(LIBRARIES) $(LCFILE_M) -o $(call empath,$@)
167endif
168endif
169
170# .a
171ifndef	USE_MY_RULE_A
172$(LIBDIR)/$(TARGET_LIB): $(OBJS)
173ifdef SILENT
174	echo $(TWLSDK_MSG_ARCHIVE) $(notdir $@)
175endif
176	$(AR) $(ARFLAGS) $(foreach OBJ,$(OBJS_M),$(OBJ)) -o $(call empath,$@)
177endif
178
179#----- End of modulerules.cctype.CW -----
180