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)/%.$(NITRO_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),$(ELIBRARIES) $(GLIBRARIES))
54LLIBRARIES_LINK		 = $(filter-out $(LIBRARIES_UNLINK),$(LLIBRARIES))
55
56# Convert Unix and Windows format paths
57OBJS_STATIC_M		:= $(if $(filter-out 	,$(OBJS_STATIC)),$(call cygpathm_multi,$(OBJS_STATIC)))
58OBJS_AUTOLOAD_M		:= $(if $(filter-out 	,$(OBJS_AUTOLOAD)),$(call cygpathm_multi,$(OBJS_AUTOLOAD)))
59OBJS_OVERLAY_M		:= $(if $(filter-out 	,$(OBJS_OVERLAY)),$(call cygpathm_multi,$(OBJS_OVERLAY)))
60OBJDIR_M			:= $(call empath,$(OBJDIR))
61LIBDIR_M			:= $(call empath,$(LIBDIR))
62BINDIR_M			:= $(call empath,$(BINDIR))
63LCFILE_TEMPLATE_M	:= $(call empath,$(LCFILE_TEMPLATE))
64LDRES_TEMPLATE_M	:= $(call empath,$(LDRES_TEMPLATE))
65LDRES_FILE_M		:= $(call empath,$(LDRES_FILE))
66LCFILE_M        	:= $(call empath,$(LCFILE))
67OBJS_M				 = $(if $(filter-out 	,$(OBJS)),$(call cygpathm_multi,$(OBJS)))
68
69# CODEGEN and LIBSUFFIX are set to NITRO_LIBSUFFIX because both variables are currently used to determine whether to link the ARM or Thumb library in the LSF file
70#
71MAKELCF_DEFS		 = -DNITROSDK_ROOT='$(ROOT_M)'									\
72					   -DTARGET_NAME='$(TARGET_NAME)'								\
73					   -DOBJS_STATIC='$(foreach OBJ,$(OBJS_STATIC_M),$(OBJ))'		\
74					   -DOBJS_AUTOLOAD='$(foreach OBJ,$(OBJS_AUTOLOAD_M),$(OBJ))'	\
75					   -DOBJS_OVERLAY='$(foreach OBJ,$(OBJS_OVERLAY_M),$(OBJ))'		\
76					   -DGLIBS='$(GLIBRARIES_LINK)'									\
77					   -DLLIBS='$(LLIBRARIES_LINK)'									\
78					   -DCC_LIBS='$(CC_LIBS)'										\
79					   -DCW_LIBS='$(CC_LIBS)'										\
80					   -DOBJDIR='$(OBJDIR_M)'										\
81					   -DLIBDIR='$(LIBDIR_M)'										\
82					   -DBINDIR='$(BINDIR_M)'										\
83					   -DCRT0_O='$(CRT0_O)'											\
84					   -DPROC='$(CODEGEN_PROC)'										\
85					   -DPLATFORM='$(NITRO_PLATFORM)'								\
86					   -DCODEGEN='$(NITRO_LIBSUFFIX)'								\
87					   -DLIBSUFFIX='$(NITRO_LIBSUFFIX)'								\
88					   -DBUILD='$(NITRO_BUILD_DIR)'									\
89					   -DADDRESS_STATIC='$(ADDRESS_STATIC)'							\
90					   -DADDRESS_ITCM='$(ADDRESS_ITCM)'								\
91					   -DADDRESS_DTCM='$(ADDRESS_DTCM)'
92
93MAKELCF_FORMAT	?= -V$(CW_MAJOR_VER)
94
95MAKELCF_OPTS	 = $(MAKELCF_FLAGS) $(MAKELCF_DEFS) $(MAKELCF_FORMAT)
96
97$(LCFILE_AUTOGEN): $(LCFILE_SPEC) $(LCFILE_TEMPLATE) $(MAKEFILE) $(NITRO_BUILDTOOLSDIR)/commondefs
98ifdef SILENT
99	echo $(TWLSDK_MSG_MAKE_LCF) $(notdir $@)
100endif
101	$(MAKELCF) $(MAKELCF_OPTS)  $(call empath,$<) $(call empath,$(LCFILE_TEMPLATE_M)) $(call empath,$@)
102
103$(LDRES_AUTOGEN):  $(LCFILE_SPEC) $(LDRES_TEMPLATE)  $(MAKEFILE) $(NITRO_BUILDTOOLSDIR)/commondefs
104ifdef SILENT
105	echo $(TWLSDK_MSG_MAKE_LCF) $(notdir $@)
106endif
107	@$(MAKELCF) $(MAKELCF_OPTS)  $(call empath,$<) $(call empath,$(LDRES_TEMPLATE_M))  $(call empath,$@)
108
109endif
110
111# Compress/digest
112ifeq	($(CODEGEN_PROC),ARM9)
113ifdef	NITRO_COMPRESS
114COMPSTATIC_CMDS		= -9 -c
115#COMPSTATIC_CMDS	= -7 -c
116endif
117ifdef	NITRO_DIGEST
118COMPSTATIC_CMDS		+= -a
119endif
120endif
121
122ifdef	COMPSTATIC_CMDS
123COMPSUFFIX		?= $(DEFAULT_COMPSUFFIX)
124ifneq	($(COMPSUFFIX),)
125COMPSTATIC_FLAGS	+= -e$(COMPSUFFIX)
126endif
127endif
128
129
130# libcxx workaround
131ifdef	SDK_CW_WA_LIBCXX
132CW_LIBCXX	= $(CW_LIBCXX_DIR)/$(CW_LIBCXX_ARM)
133$(CW_LIBCXX):	$(ROOT)/build/buildsetup/libcxx/Makefile
134	+$(MAKE) -f $<
135endif
136
137
138# .$(NITRO_ELF_EXT)
139ifndef	USE_MY_RULE_NEF
140ifneq	($(NITRO_MAKEROM),)
141$(BINDIR)/$(TARGET_BIN_BASENAME).$(NITRO_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(LDRES_FILE) $(CW_LIBCXX)
142ifdef SILENT
143	echo $(TWLSDK_MSG_LINK) $(notdir $@)
144endif
145	$(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE_M) $(LCFILE_M) -o $(call empath,$@)
146ifdef	COMPSTATIC_CMDS
147	$(COMPSTATIC) $(COMPSTATIC_CMDS) $(COMPSTATIC_FLAGS) -f $(BINDIR)/component.files $(STDOUT)
148endif
149else
150$(BINDIR)/$(TARGET_BIN_BASENAME).$(NITRO_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(CW_LIBCXX)
151ifdef SILENT
152	echo $(TWLSDK_MSG_LINK) $(notdir $@)
153endif
154	$(LD) $(LDFLAGS) $(LIBRARY_DIRS) $(foreach OBJ,$(OBJS_M),$(OBJ)) $(LIBRARIES) $(LCFILE_M) -o $(call empath,$@)
155endif
156endif
157
158# .a
159ifndef	USE_MY_RULE_A
160$(LIBDIR)/$(TARGET_LIB): $(OBJS)
161ifdef SILENT
162	echo $(TWLSDK_MSG_ARCHIVE) $(notdir $@)
163endif
164	$(AR) $(ARFLAGS) $(foreach OBJ,$(OBJS_M),$(OBJ)) -o $(call empath,$@)
165endif
166
167#----- End of modulerules.cctype.CW -----
168