1#! make -f 2#---------------------------------------------------------------------------- 3# Project: TwlSDK 4# File: modulerules.cctype.CW 5# 6# Copyright 2007-2009 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-10-20#$ 15# $Rev: 11102 $ 16# $Author: mizutani_nakaba $ 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_SPEC_FILE ?= $(BINDIR)/compspec.list 131 COMPSTATIC_CMDS += -9 -c -C $(COMPSTATIC_LTDSTATIC_FLAG) 132endif 133endif 134 135ifdef COMPSTATIC_CMDS 136COMPSUFFIX ?= $(DEFAULT_COMPSUFFIX) 137ifneq ($(COMPSUFFIX),) 138COMPSTATIC_FLAGS += -e$(COMPSUFFIX) 139endif 140ifneq ($(COMPSTATIC_SPEC_FILE),) 141COMPSTATIC_FLAGS += -l$(COMPSTATIC_SPEC_FILE) 142endif 143endif 144 145 146# libcxx workaround 147ifdef SDK_CW_WA_LIBCXX 148CW_LIBCXX = $(CW_LIBCXX_DIR)/$(CW_LIBCXX_ARM) 149$(CW_LIBCXX): $(ROOT)/build/buildsetup/libcxx/Makefile 150 +$(MAKE) -f $< 151endif 152 153 154# .$(TWL_ELF_EXT) 155ifndef USE_MY_RULE_NEF 156ifneq ($(TWL_MAKEROM),) 157$(BINDIR)/$(TARGET_BIN_BASENAME).$(TWL_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(LDRES_FILE) $(CW_LIBCXX) 158ifdef SILENT 159 echo $(TWLSDK_MSG_LINK) $(notdir $@) 160endif 161 $(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE_M) $(LCFILE_M) -o $(call empath,$@) 162ifdef COMPSTATIC_CMDS 163 $(COMPSTATIC) $(COMPSTATIC_CMDS) $(COMPSTATIC_FLAGS) -f $(BINDIR)/component.files $(STDOUT) 164endif 165else 166$(BINDIR)/$(TARGET_BIN_BASENAME).$(TWL_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(CW_LIBCXX) 167ifdef SILENT 168 echo $(TWLSDK_MSG_LINK) $(notdir $@) 169endif 170 $(LD) $(LDFLAGS) $(LIBRARY_DIRS) $(foreach OBJ,$(OBJS_M),$(OBJ)) $(LIBRARIES) $(LCFILE_M) -o $(call empath,$@) 171endif 172endif 173 174# .a 175ifndef USE_MY_RULE_A 176$(LIBDIR)/$(TARGET_LIB): $(OBJS) 177ifdef SILENT 178 echo $(TWLSDK_MSG_ARCHIVE) $(notdir $@) 179endif 180 $(AR) $(ARFLAGS) $(foreach OBJ,$(OBJS_M),$(OBJ)) -o $(call empath,$@) 181endif 182 183#----- End of modulerules.cctype.CW ----- 184