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:: 2009-08-28#$ 15# $Rev: 11023 $ 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 118# Unnecessary during clean or clobber (supports make3.80) 119ifneq ($(filter clean clobber,$(MAKECMDGOALS)),) 120else 121ifndef USE_MY_RULE_BIN 122#special rule for %bin 123#$(BINDIR)/%.bin $(BINDIR)/%.srl: $(OBJS) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES) $(LDRES_FILE) $(CW_LIBCXX) $(LCFILE_AUTOGEN) 124# $(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE) $(LCFILE) -o $@ 125 126$(BINDIR)/%.bin $(BINDIR)/%.$(INT_ROM_EXT) $(BINDIR)/%.srl: $(SDEPENDS_BIN) $(ROM_SPEC) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 127ifdef SILENT 128 echo $(TWLSDK_MSG_MAKE_SRL) $(notdir $@) 129endif 130 $(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_DEFS) $(ROM_SPEC_M) $(call empath,$@) 131endif # -USE_MY_RULE_BIN 132endif # not clean/clobber 133 134$(BINDIR)/$(TARGET_SIGN_BIN): $(BINDIR)/$(TARGET_BIN) 135ifdef SILENT 136 echo $(TWLSDK_MSG_SIGN) $(notdir $@) 137endif 138 $(ATTACHSIGN) -D $(addprefix $(BINDIR)/,$(TARGET_BIN)) 139 140else # !TWL_MAKEROM 141# 142# ELFTOBIN 143# 144ifndef USE_MY_RULE_BIN 145ifeq ($(CODEGEN_PROC),ARM9) 146$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.$(TWL_ELF_EXT) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 147 $(ELFTOBIN) $< $(ELFTOBIN_ARM7) $(ELFTOBIN_ROMHEADER) -o $@ 148else # !ARM9 149$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.$(TWL_ELF_EXT) $(LDEPENDS_BIN) $(EDEPENDS_BIN) 150 $(ELFTOBIN) $(ELFTOBIN_ARM9) $< $(ELFTOBIN_ROMHEADER) -o $@ 151endif # -ARM9 152endif # -USE_MY_RULE_BIN 153endif # -TWL_MAKEROM 154 155ifeq ($(TWL_NANDAPP),TRUE) 156ifndef USE_MY_RULE_TAD 157.PRECIOUS: $(BINDIR)/%.$(INT_ROM_EXT) 158 159MAKETAD_OPTION += -v $(TITLE_VERSION_LO) 160 161ifeq ($(CODEGEN_PROC),ARM9) 162%.tad: %.$(INT_ROM_EXT) $(MAKETAD) 163ifdef SILENT 164 echo $(TWLSDK_MSG_MAKE_TAD) $(notdir $@) 165endif 166 $(MAKETAD) $< $(MAKETAD_OPTION) -o $@ 167endif # -ARM9 168endif # -USE_MY_RULE_TAD 169endif # -TWL_NANDAPP 170 171endif # -FORCE_BUILD 172 173# .bnr .bsf 174%.bnr: %.bsf 175ifdef SILENT 176 echo $(TWLSDK_MSG_MAKE_BNR) $(notdir $@) 177endif 178 $(MAKEBANNER) $(MAKEBANNER_FLAGS) $< $@ 179 180%.nbfs %.nbfc %.nbfp: %.bmp 181 $(NTEXCONV) -no -bg -bgb -bgnc $(NTEXCONV_FLAGS) $< >/dev/null 182 183%.ban: $(BANNERCVTR_SRCS) 184 $(BANNERCVTR) -o $@ $< 185 186# rsf rules 187 188ifneq ($(ROM_SPEC),$(DEFAULT_ROM_SPEC)) 189ifneq ($(ROM_SPEC_TEMPLATE),) 190ifneq ($(ROM_SPEC_PARAM),) 191 192LDIRT_CLEAN += $(ROM_SPEC) 193 194$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) $(MAKERSF) $(MAKEFILE) 195ifdef SILENT 196 echo " make rsf:" $@ 197endif 198 $(MAKERSF) $< $@ $(ROM_SPEC_PARAM) 199 200endif # ifneq ($(ROM_SPEC_PARAM),) 201endif # ifneq ($(ROM_SPEC_TEMPLATE),) 202endif # ifneq ($(ROM_SPEC),$(DEFAULT_ROM_SPEC)) 203 204 205# .sbin 206# The SBIN files are created by the linker at the same time as $(TWL_ELF_EXT) 207%.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 208%_defs.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 209%_table.TWL.FLX.sbin: %.$(TWL_ELF_EXT); 210%.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 211%_defs.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 212%_table.TWL.LTD.sbin: %.$(TWL_ELF_EXT); 213 214#---------------------------------------------------------------------------- 215# MAKE TARGETS 216#---------------------------------------------------------------------------- 217 218%_for_ltd_arm %_for_hyb_arm: CODEGEN_ARCH= 219%_for_ltd_arm %_for_hyb_arm: BUILD_CODEGEN=ARM 220%_for_ltd_thumb %_for_hyb_thumb: CODEGEN_ARCH=.thumb 221%_for_ltd_thumb %_for_hyb_thumb: BUILD_CODEGEN=THUMB 222%_for_ltd_arm %_for_ltd_thumb: ARCHGEN_TYPE=.LTD 223%_for_ltd_arm %_for_ltd_thumb: BUILD_ARCHGEN=LIMITED 224%_for_hyb_arm %_for_hyb_thumb: ARCHGEN_TYPE=.HYB 225%_for_hyb_arm %_for_hyb_thumb: BUILD_ARCHGEN=HYBRID 226 227# In the case of a nightly build, also build LIMITED ROMs that use the ferret component 228ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 229%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: ARCHGEN_TYPE=.LTD 230%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: COMP_TYPE=.ferret 231%_for_ltd_ferret_arm %_for_ltd_ferret_thumb: BUILD_ARCHGEN=LIMITED_ferret 232%_for_ltd_ferret_arm: CODEGEN_ARCH= 233%_for_ltd_ferret_arm: BUILD_CODEGEN=ARM 234%_for_ltd_ferret_thumb: CODEGEN_ARCH=.thumb 235%_for_ltd_ferret_thumb: BUILD_CODEGEN=THUMB 236endif 237#---------------------------------------------------------------------------- 238# Make build 239#---------------------------------------------------------------------------- 240.PHONY: do-build build_and_install 241.PHONY: build_for_% build_platform 242 243ifeq ($(PARALLEL_BUILD),TRUE) 244build_platform: build_for_hyb_thumb build_for_hyb_arm build_for_ltd_thumb build_for_ltd_arm 245else 246build_platform: build_for_hyb_thumb 247build_for_hyb_thumb: build_for_hyb_arm 248build_for_hyb_arm: build_for_ltd_thumb 249build_for_ltd_thumb: build_for_ltd_arm 250endif 251 252ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 253ifeq ($(PARALLEL_BUILD),TRUE) 254build_platform: build_for_ltd_ferret_arm build_for_ltd_ferret_thumb 255else 256build_for_ltd_arm: build_for_ltd_ferret_arm 257build_for_ltd_ferret_arm: build_for_ltd_ferret_thumb 258endif 259endif 260 261build_for_%: 262 +$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 263 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 264 @$(ECHO_CURDIR) \ 265 $(DO_MAKEDIR) \ 266 $(REMAKE) TWL_ARCHGEN=$(BUILD_ARCHGEN) TARGET_CODEGEN=$(BUILD_CODEGEN) SKIP_SUBDIR=TRUE INSTALL_DEPENDS=do-build INSTALL_FOR=$* build_and_install )) 267 268build_and_install: install_for_$(INSTALL_FOR) 269 270#---------------------------------------------------------------------------- 271# Make install 272#---------------------------------------------------------------------------- 273 274.PHONY: install_for_% install_platform 275 276ifeq ($(PARALLEL_BUILD),TRUE) 277install_platform: install_for_hyb_thumb install_for_hyb_arm install_for_ltd_thumb install_for_ltd_arm 278else 279install_platform: install_for_hyb_thumb 280install_for_hyb_thumb: install_for_hyb_arm 281install_for_hyb_arm: install_for_ltd_thumb 282install_for_ltd_thumb: install_for_ltd_arm 283endif 284 285ifeq ($(SDK_NIGHTLY_BUILD),TRUE) 286ifeq ($(PARALLEL_BUILD),TRUE) 287install_platform: install_for_ltd_ferret_arm install_for_ltd_ferret_thumb 288else 289install_for_ltd_arm: install_for_ltd_ferret_arm 290install_for_ltd_ferret_arm: install_for_ltd_ferret_thumb 291endif 292endif 293 294install_for_%: $(INSTALL_DEPENDS) 295 +$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 296 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 297 $(if $(INSTALL_TARGETS), \ 298 @$(ECHO_CURDIR) \ 299 $(DO_INSTALL) ))) 300 301#---------------------------------------------------------------------------- 302# Autotest using IS-TWL-EMULATOR 303#---------------------------------------------------------------------------- 304ifdef IS_TWL_DIR 305 306AUTOTESTLOG := $(ROOT)/autotest.log 307 308.PHONY: autotest do-autotest do-autotest-test 309 310autotest: 311 @+$(REMAKE) clobber 312 @+$(REMAKE) build TWL_AUTOTEST=TRUE 313 @$(RM) $(AUTOTESTLOG) 314 @+$(REMAKE) do-autotest 315 @$(SED) -e 's/\r//g;s/$$/\r/g;' $(AUTOTESTLOG) > $(AUTOTESTLOG).tmp 316 @$(MV) $(AUTOTESTLOG).tmp $(AUTOTESTLOG) 317 318do-autotest: make-sub 319 @$(ECHO_CURDIR) 320ifneq ($(TARGET_ROM),) 321 @+$(REMAKE) test-run 322endif 323endif 324 325 326#---------------------------------------------------------------------------- 327# Make clobber & clean 328#---------------------------------------------------------------------------- 329.PHONY: clobber-installed 330.PHONY: clobber_for_% 331 332clobber-installed: clobber_for_hyb_thumb 333clobber_for_hyb_thumb: clobber_for_hyb_arm 334clobber_for_hyb_arm: clobber_for_ltd_thumb 335clobber_for_ltd_thumb: clobber_for_ltd_arm 336 337clobber_for_%: 338 +-$(if $(filter $(BUILD_CODEGEN),$(TARGET_CODEGEN_LIST)), \ 339 $(if $(filter $(BUILD_ARCHGEN),$(TWL_ARCHGEN_LIST)), \ 340 $(RM) $(GDIRT_INSTALLED) )) 341 342#---------------------------------------------------------------------------- 343 344 345#---------------------------------------------------------------------------- 346# Source file dependencies 347#---------------------------------------------------------------------------- 348 349# 350# Dynamic dependency generation 351# Like as $(OBJDIR)/main.o: main.c 352# 353DEP_SRCS_ALL = $(SRCS) $(SRCS_AUTOLOAD) $(SRCS_OVERLAY) $(SRCS_LTDAUTOLOAD) $(SRCS_LTDOVERLAY) 354 355define RuleCtoObj 356$$(OBJDIR)/$$(notdir $$(basename $(1))).o: $(1) 357 358endef 359endif # TWLSDK_MODULERULES_ 360 361# Put this sentence out of include-guard to avoid $(eval xxx) limitation 362$(foreach FILE,$(DEP_SRCS_ALL),$(eval $(call RuleCtoObj,$(FILE)))) 363 364 365ifndef TWLSDK_MODULERULES_ 366# 367# Include dependencies file 368# 369ifneq ($(filter build_and_install,$(MAKECMDGOALS)),) 370ifdef SRCS 371-include $(DEPENDDIR)/*.d 372endif 373endif 374 375#---------------------------------------------------------------------------- 376# For IS-TWL-EMULATOR 377#---------------------------------------------------------------------------- 378ifdef IS_TWL_DIR 379-include $(TWL_BUILDTOOLSDIR)/modulerules.emtype.IS 380endif 381 382#---------------------------------------------------------------------------- 383# Load add-ins' modulerules 384#---------------------------------------------------------------------------- 385-include $(TWL_BUILDTOOLSDIR)/modulerules.add-ins.* 386 387#---------------------------------------------------------------------------- 388TWLSDK_MODULERULES_ = TRUE 389endif # TWLSDK_MODULERULES_ 390#----- End of modulerules ----- 391