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)/%.$(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 116COMPSTATIC_SPEC_FILE ?= $(BINDIR)/compspec.list 117endif 118ifdef NITRO_DIGEST 119COMPSTATIC_CMDS += -a 120endif 121endif 122 123ifdef COMPSTATIC_CMDS 124COMPSUFFIX ?= $(DEFAULT_COMPSUFFIX) 125ifneq ($(COMPSUFFIX),) 126COMPSTATIC_FLAGS += -e$(COMPSUFFIX) 127endif 128ifneq ($(COMPSTATIC_SPEC_FILE),) 129COMPSTATIC_FLAGS += -l$(COMPSTATIC_SPEC_FILE) 130endif 131endif 132 133 134# libcxx workaround 135ifdef SDK_CW_WA_LIBCXX 136CW_LIBCXX = $(CW_LIBCXX_DIR)/$(CW_LIBCXX_ARM) 137$(CW_LIBCXX): $(ROOT)/build/buildsetup/libcxx/Makefile 138 +$(MAKE) -f $< 139endif 140 141 142# .$(NITRO_ELF_EXT) 143ifndef USE_MY_RULE_NEF 144ifneq ($(NITRO_MAKEROM),) 145$(BINDIR)/$(TARGET_BIN_BASENAME).$(NITRO_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(LDRES_FILE) $(CW_LIBCXX) 146ifdef SILENT 147 echo $(TWLSDK_MSG_LINK) $(notdir $@) 148endif 149 $(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE_M) $(LCFILE_M) -o $(call empath,$@) 150ifdef COMPSTATIC_CMDS 151 $(COMPSTATIC) $(COMPSTATIC_CMDS) $(COMPSTATIC_FLAGS) -f $(BINDIR)/component.files $(STDOUT) 152endif 153else 154$(BINDIR)/$(TARGET_BIN_BASENAME).$(NITRO_ELF_EXT): $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES_DEPEND) $(CW_LIBCXX) 155ifdef SILENT 156 echo $(TWLSDK_MSG_LINK) $(notdir $@) 157endif 158 $(LD) $(LDFLAGS) $(LIBRARY_DIRS) $(foreach OBJ,$(OBJS_M),$(OBJ)) $(LIBRARIES) $(LCFILE_M) -o $(call empath,$@) 159endif 160endif 161 162# .a 163ifndef USE_MY_RULE_A 164$(LIBDIR)/$(TARGET_LIB): $(OBJS) 165ifdef SILENT 166 echo $(TWLSDK_MSG_ARCHIVE) $(notdir $@) 167endif 168 $(AR) $(ARFLAGS) $(foreach OBJ,$(OBJS_M),$(OBJ)) -o $(call empath,$@) 169endif 170 171#----- End of modulerules.cctype.CW ----- 172