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