1#! make -f 2#---------------------------------------------------------------------------- 3# Project: TwlSDK 4# File: modulerules 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:: 2008-12-12#$ 15# $Rev: 9649 $ 16# $Author: okubata_ryoma $ 17#---------------------------------------------------------------------------- 18ifndef TWLSDK_MODULERULES_ 19 20ifneq ($(FORCE_BUILD),) 21 22ifeq ($(filter clean clobber,$(MAKECMDGOALS)),) 23include $(BUILDTOOLSDIR)/modulerules.cctype.$(TWL_CCTYPE) 24include $(TWL_BUILDTOOLSDIR)/modulerules.cctype.$(TWL_CCTYPE) 25endif 26 27# Common Rules 28 29# .bin .srl 30ifdef TWL_MAKEROM 31# 32# MAKEROM 33# 34 35ROM_SPEC ?= $(DEFAULT_ROM_SPEC) 36MAKEROM_ARM9 ?= $(DEFAULT_MAKEROM_ARM9) 37MAKEROM_ARM7_BASE ?= $(DEFAULT_MAKEROM_ARM7_BASE) 38MAKEROM_ARM7 ?= $(DEFAULT_MAKEROM_ARM7) 39MAKEROM_ROMROOT ?= $(DEFAULT_MAKEROM_ROMROOT) 40MAKEROM_ROMFILES ?= $(DEFAULT_MAKEROM_ROMFILES) 41MAKEROM_ROMSPEED ?= $(DEFAULT_MAKEROM_ROMSPEED) 42MAKEROM_FLAGS ?= 43MAKEROM_FLAGS += $(if $(TWL_FINALROM),,-F) 44 45MAKEROM_CERT_PRIV ?= $(DEFAULT_MAKEROM_CERT_PRIV) 46MAKEROM_CERT_PRIV_M := $(call cygpathm,$(MAKEROM_CERT_PRIV)) 47 48# Convert Unix and Windows format paths 49ROOT_M := $(call empath,$(ROOT)) 50MAKEROM_ROMROOT_M := $(call empath,$(MAKEROM_ROMROOT)) 51BINDIR_M := $(call empath,$(BINDIR)) 52TWL_COMPONENTSDIR_M := $(ROOT_M)/components 53 54MAKEROM_ARM7_BASE_M := $(call empath,$(MAKEROM_ARM7_BASE)) 55MAKEROM_ARM7_M := $(call empath,$(basename $(MAKEROM_ARM7))) 56MAKEROM_ARM9_M := $(call empath,$(basename $(MAKEROM_ARM9))) 57ROM_SPEC_M := $(call empath,$(ROM_SPEC)) 58 59MAKEROM_DEFS = -DTWLSDK_ROOT='$(ROOT_M)' \ 60 -DTARGET_NAME='$(TARGET_NAME)' \ 61 -DMAKEROM_ROMROOT='$(MAKEROM_ROMROOT_M)' \ 62 -DMAKEROM_ROMFILES='$(MAKEROM_ROMFILES)' \ 63 -DMAKEROM_ROMSPEED='$(MAKEROM_ROMSPEED)' \ 64 -DBINDIR='$(BINDIR_M)' \ 65 -DCOMPDIR='$(TWL_COMPONENTSDIR_M)' \ 66 -DCOMPTYPE9='$(TWL_BUILDTYPE_ARM9)' \ 67 -DCOMPTYPE7='$(TWL_BUILDTYPE_ARM7)' \ 68 -DPROC='$(CODEGEN_PROC)' \ 69 -DPLATFORM='$(TWL_PLATFORM)' \ 70 -DCODEGEN='$(TWL_LIBSUFFIX)' \ 71 -DARCHGEN='$(ARCHGEN_TYPE)' \ 72 -DLIBSUFFIX='$(TWL_LIBSUFFIX)' \ 73 -DBUILD='$(TWL_BUILD_DIR)' \ 74 -DCOMPSUFFIX9='$(COMPSUFFIX)' \ 75 -DCOMPSUFFIX7='' 76 77ifeq ($(TWL_ARCHGEN),HYBRID) 78MAKEROM_DEFS += -DTARGET_PLATFORM='TWL-HYB' \ 79 -DMAKEROM_WRAM_MAPPING='MAP2_$(TWL_PLATFORM)_HYB' \ 80 -DMAKEROM_CODEC_MODE=$(MAKEROM_CODEC_MODE) 81else 82ifeq ($(TWL_ARCHGEN),LIMITED) 83MAKEROM_DEFS += -DTARGET_PLATFORM='TWL-LTD' \ 84 -DMAKEROM_WRAM_MAPPING='MAP2_$(TWL_PLATFORM)_LTD' \ 85 -DMAKEROM_CODEC_MODE=$(MAKEROM_CODEC_MODE) 86else 87ifeq ($(TWL_ARCHGEN),LIMITED_ferret) 88MAKEROM_DEFS += -DTARGET_PLATFORM='TWL-LTD' \ 89 -DMAKEROM_WRAM_MAPPING='MAP2_$(TWL_PLATFORM)_LTD' \ 90 -DMAKEROM_CODEC_MODE=$(MAKEROM_CODEC_MODE) 91endif 92endif 93endif 94 95TARGET_ROM = $(strip $(findstring .srl,$(TARGET_BIN)) \ 96 $(findstring .bin,$(TARGET_BIN)) \ 97 $(findstring .tad,$(TARGET_BIN)) ) 98 99ifneq ($(strip $(OBJS) $(LLIBRARIES)),) # Any object? 100ifeq ($(CODEGEN_PROC),ARM9) 101SDEPENDS_BIN = $(BINDIR)/%.$(TWL_ELF_EXT) $(MAKEROM_ARM7) 102MAKEROM_DEFS += -DMAKEROM_ARM9='$(BINDIR)/$(TARGET_NAME)' \ 103 -DMAKEROM_ARM7_BASE='$(MAKEROM_ARM7_BASE_M)' \ 104 -DMAKEROM_ARM7='$(MAKEROM_ARM7_M)' 105else # !ARM9 106SDEPENDS_BIN = $(BINDIR)/%.$(TWL_ELF_EXT) $(MAKEROM_ARM9) 107MAKEROM_DEFS += -DMAKEROM_ARM9='$(MAKEROM_ARM9_M)' \ 108 -DMAKEROM_ARM7_BASE='$(call empath,$(basename $@))' \ 109 -DMAKEROM_ARM7='$(call empath,$(basename $@))' 110endif # -ARM9 111else # !OBJS !LLIBRARIES 112SDEPENDS_BIN = $(MAKEROM_ARM9) $(MAKEROM_ARM7) 113MAKEROM_DEFS += -DMAKEROM_ARM9='$(MAKEROM_ARM9_M)' \ 114 -DMAKEROM_ARM7_BASE='$(MAKEROM_ARM7_BASE_M)' \ 115 -DMAKEROM_ARM7='$(MAKEROM_ARM7_M)' 116endif # -OBJS -LLIBRARIES 117 118ifndef USE_MY_RULE_BIN 119#special rule for %bin 120#$(BINDIR)/%.bin $(BINDIR)/%.srl: $(OBJS) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES) $(LDRES_FILE) $(CW_LIBCXX) $(LCFILE_AUTOGEN) 121# $(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE) $(LCFILE) -o $@ 122 123$(BINDIR)/%.bin $(BINDIR)/%.$(INT_ROM_EXT) $(BINDIR)/%.srl: $(SDEPENDS_BIN) $(ROM_SPEC) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 124ifdef SILENT 125 echo $(TWLSDK_MSG_MAKE_SRL) $(notdir $@) 126endif 127 $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_DEFS) $(ROM_SPEC_M) $(call empath,$@) 128endif # -USE_MY_RULE_BIN 129 130$(BINDIR)/$(TARGET_SIGN_BIN): $(BINDIR)/$(TARGET_BIN) 131ifdef SILENT 132 echo $(TWLSDK_MSG_SIGN) $(notdir $@) 133endif 134 $(ATTACHSIGN) -D $(addprefix $(BINDIR)/,$(TARGET_BIN)) 135 136else # !TWL_MAKEROM 137# 138# ELFTOBIN 139# 140ifndef USE_MY_RULE_BIN 141ifeq ($(CODEGEN_PROC),ARM9) 142$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.$(TWL_ELF_EXT) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 143 $(ELFTOBIN) $< $(ELFTOBIN_ARM7) $(ELFTOBIN_ROMHEADER) -o $@ 144else # !ARM9 145$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.$(TWL_ELF_EXT) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 146 $(ELFTOBIN) $(ELFTOBIN_ARM9) $< $(ELFTOBIN_ROMHEADER) -o $@ 147endif # -ARM9 148endif # -USE_MY_RULE_BIN 149endif # -TWL_MAKEROM 150 151endif # -FORCE_BUILD 152 153# .bnr .bsf 154%.bnr: %.bsf 155ifdef SILENT 156 echo $(TWLSDK_MSG_MAKE_BNR) $(notdir $@) 157endif 158 $(MAKEBANNER) $(MAKEBANNER_FLAGS) $< $@ 159 160%.nbfs %.nbfc %.nbfp: %.bmp 161 $(NTEXCONV) -no -bg -bgb -bgnc $(NTEXCONV_FLAGS) $< >/dev/null 162 163%.ban: $(BANNERCVTR_SRCS) 164 $(BANNERCVTR) -o $@ $< 165 166# rsf rules 167 168ifneq ($(ROM_SPEC),$(DEFAULT_ROM_SPEC)) 169ifneq ($(ROM_SPEC_TEMPLATE),) 170ifneq ($(ROM_SPEC_PARAM),) 171 172LDIRT_CLEAN += $(ROM_SPEC) 173 174$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) $(MAKERSF) $(MAKEFILE) 175ifdef SILENT 176 echo " make rsf:" $@ 177endif 178 $(MAKERSF) $< $@ $(ROM_SPEC_PARAM) 179 180endif # ifneq ($(ROM_SPEC_PARAM),) 181endif # ifneq ($(ROM_SPEC_TEMPLATE),) 182endif # ifneq ($(ROM_SPEC),$(DEFAULT_ROM_SPEC)) 183 184 185# .sbin 186# The SBIN files are created by the linker at the same time as $(TWL_ELF_EXT) 187%.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 188%_defs.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 189%_table.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 190%.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 191%_defs.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 192%_table.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 193 194#---------------------------------------------------------------------------- 195# MAKE TARGETS 196#---------------------------------------------------------------------------- 197 198%_for_ltd_arm %_for_hyb_arm: CODEGEN_ARCH= 199%_for_ltd_arm %_for_hyb_arm: BUILD_CODEGEN=ARM 200%_for_ltd_thumb %_for_hyb_thumb: CODEGEN_ARCH=.thumb 201%_for_ltd_thumb %_for_hyb_thumb: BUILD_CODEGEN=THUMB 202%_for_ltd_arm %_for_ltd_thumb: ARCHGEN_TYPE=.LTD 203%_for_ltd_arm %_for_ltd_thumb: BUILD_ARCHGEN=LIMITED 204%_for_hyb_arm %_for_hyb_thumb: ARCHGEN_TYPE=.HYB 205%_for_hyb_arm %_for_hyb_thumb: BUILD_ARCHGEN=HYBRID 206 207# In the case of a nightly build, also build LIMITED ROMs that use the ferret component 208ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 209%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: ARCHGEN_TYPE=.LTD 210%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: COMP_TYPE=.ferret 211%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: BUILD_ARCHGEN=LIMITED_ferret 212%_for_ltd_ferret_arm: CODEGEN_ARCH= 213%_for_ltd_ferret_arm: BUILD_CODEGEN=ARM 214%_for_ltd_ferret_thumb: CODEGEN_ARCH=.thumb 215%_for_ltd_ferret_thumb: BUILD_CODEGEN=THUMB 216endif 217#---------------------------------------------------------------------------- 218# Make build 219#---------------------------------------------------------------------------- 220.PHONY: do-build build_and_install 221.PHONY: build_for_% build_platform 222 223ifeq ($(PARALLEL_BUILD),TRUE) 224build_platform: build_for_hyb_thumb build_for_hyb_arm build_for_ltd_thumb build_for_ltd_arm 225else 226build_platform: build_for_hyb_thumb 227build_for_hyb_thumb: build_for_hyb_arm 228build_for_hyb_arm: build_for_ltd_thumb 229build_for_ltd_thumb: build_for_ltd_arm 230endif 231 232ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 233ifeq ($(PARALLEL_BUILD),TRUE) 234build_platform: build_for_ltd_ferret_arm build_for_ltd_ferret_thumb 235else 236build_for_ltd_arm: build_for_ltd_ferret_arm 237build_for_ltd_ferret_arm: build_for_ltd_ferret_thumb 238endif 239endif 240 241build_for_%: 242 +$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 243 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 244 @$(ECHO_CURDIR) \ 245 $(DO_MAKEDIR) \ 246 $(REMAKE) TWL_ARCHGEN=$(BUILD_ARCHGEN) TARGET_CODEGEN=$(BUILD_CODEGEN) SKIP_SUBDIR=TRUE INSTALL_DEPENDS=do-build INSTALL_FOR=$* build_and_install )) 247 248build_and_install: install_for_$(INSTALL_FOR) 249 250#---------------------------------------------------------------------------- 251# Make install 252#---------------------------------------------------------------------------- 253 254.PHONY: install_for_% install_platform 255 256ifeq ($(PARALLEL_BUILD),TRUE) 257install_platform: install_for_hyb_thumb install_for_hyb_arm install_for_ltd_thumb install_for_ltd_arm 258else 259install_platform: install_for_hyb_thumb 260install_for_hyb_thumb: install_for_hyb_arm 261install_for_hyb_arm: install_for_ltd_thumb 262install_for_ltd_thumb: install_for_ltd_arm 263endif 264 265ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 266ifeq ($(PARALLEL_BUILD),TRUE) 267install_platform: install_for_ltd_ferret_arm install_for_ltd_ferret_thumb 268else 269install_for_ltd_arm: install_for_ltd_ferret_arm 270install_for_ltd_ferret_arm: install_for_ltd_ferret_thumb 271endif 272endif 273 274install_for_%: $(INSTALL_DEPENDS) 275 +$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 276 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 277 $(if $(INSTALL_TARGETS), \ 278 @$(ECHO_CURDIR) \ 279 $(DO_INSTALL) ))) 280 281#---------------------------------------------------------------------------- 282# Autotest using IS-TWL-EMULATOR 283#---------------------------------------------------------------------------- 284ifdef IS_TWL_DIR 285 286AUTOTESTLOG := $(ROOT)/autotest.log 287 288.PHONY: autotest do-autotest do-autotest-test 289 290autotest: 291 @+$(REMAKE) clobber 292 @+$(REMAKE) build TWL_AUTOTEST=TRUE 293 @$(RM) $(AUTOTESTLOG) 294 @+$(REMAKE) do-autotest 295 @$(SED) -e 's/\r//g;s/$$/\r/g;' $(AUTOTESTLOG) > $(AUTOTESTLOG).tmp 296 @$(MV) $(AUTOTESTLOG).tmp $(AUTOTESTLOG) 297 298do-autotest: make-sub 299 @$(ECHO_CURDIR) 300ifneq ($(TARGET_ROM),) 301 @+$(REMAKE) test-run 302endif 303endif 304 305 306#---------------------------------------------------------------------------- 307# Make clobber & clean 308#---------------------------------------------------------------------------- 309.PHONY: clobber-installed 310.PHONY: clobber_for_% 311 312clobber-installed: clobber_for_hyb_thumb 313clobber_for_hyb_thumb: clobber_for_hyb_arm 314clobber_for_hyb_arm: clobber_for_ltd_thumb 315clobber_for_ltd_thumb: clobber_for_ltd_arm 316 317clobber_for_%: 318 +-$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 319 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 320 $(RM) $(GDIRT_INSTALLED) )) 321 322#---------------------------------------------------------------------------- 323 324 325#---------------------------------------------------------------------------- 326# Source file dependencies 327#---------------------------------------------------------------------------- 328 329# 330# Dynamic dependency generation 331# Like as $(OBJDIR)/main.o: main.c 332# 333DEP_SRCS_ALL = $(SRCS) $(SRCS_AUTOLOAD) $(SRCS_OVERLAY) $(SRCS_LTDAUTOLOAD) $(SRCS_LTDOVERLAY) 334 335define RuleCtoObj 336$$(OBJDIR)/$$(notdir $$(basename $(1))).o: $(1) 337 338endef 339endif # TWLSDK_MODULERULES_ 340 341# Put this sentence out of include-guard to avoid $(eval xxx) limitation 342$(foreach FILE,$(DEP_SRCS_ALL),$(eval $(call RuleCtoObj,$(FILE)))) 343 344 345ifndef TWLSDK_MODULERULES_ 346# 347# Include dependencies file 348# 349ifneq ($(filter build_and_install,$(MAKECMDGOALS)),) 350ifdef SRCS 351-include $(DEPENDDIR)/*.d 352endif 353endif 354 355#---------------------------------------------------------------------------- 356# For IS-TWL-EMULATOR 357#---------------------------------------------------------------------------- 358ifdef IS_TWL_DIR 359-include $(TWL_BUILDTOOLSDIR)/modulerules.emtype.IS 360endif 361 362#---------------------------------------------------------------------------- 363# Load add-ins' modulerules 364#---------------------------------------------------------------------------- 365-include $(TWL_BUILDTOOLSDIR)/modulerules.add-ins.* 366 367#---------------------------------------------------------------------------- 368TWLSDK_MODULERULES_ = TRUE 369endif # TWLSDK_MODULERULES_ 370#----- End of modulerules ----- 371