ctr_firmware/trunk/build/buildtools/modulerules
nakasima f8c5b37b14 SVNファイル属性設定。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@53 b871894f-2f95-9b40-918c-086798483c85
2008-12-01 10:32:04 +00:00

397 lines
12 KiB
Makefile

#! make -f
#----------------------------------------------------------------------------
# Project: CtrFirm - modulerules - common rules for build system
# File: modulerules
#
# Copyright 2008 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev$
# $Author$
#----------------------------------------------------------------------------
ifndef CTRSDK_MODULERULES_
#----------------------------------------------------------------------------
# Implicit RULES
#----------------------------------------------------------------------------
.SUFFIXES: # Delete all suffix rules
ifneq ($(CTR_FORCE_BUILD),)
VPATH = $(SRCDIR)
SSRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS)))
ASRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_AUTOLOAD)))
VSRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_OVERLAY)))
SOBJS_CC = $(filter %.o,$(SSRCFILES:.c=.o))
SOBJS_AS = $(filter %.o,$(SSRCFILES:.s=.o))
SOBJS_CXX = $(filter %.o,$(SSRCFILES:.cpp=.o))
AOBJS_CC = $(filter %.o,$(ASRCFILES:.c=.o))
AOBJS_AS = $(filter %.o,$(ASRCFILES:.s=.o))
AOBJS_CXX = $(filter %.o,$(ASRCFILES:.cpp=.o))
VOBJS_CC = $(filter %.o,$(VSRCFILES:.c=.o))
VOBJS_AS = $(filter %.o,$(VSRCFILES:.s=.o))
VOBJS_CXX = $(filter %.o,$(VSRCFILES:.cpp=.o))
OBJS_CC = $(SOBJS_CC) $(AOBJS_CC) $(VOBJS_CC)
OBJS_AS = $(SOBJS_AS) $(AOBJS_AS) $(VOBJS_AS)
OBJS_CXX = $(SOBJS_CXX) $(AOBJS_CXX) $(VOBJS_CXX)
OBJS_STATIC = $(SOBJS_CC) $(SOBJS_AS) $(SOBJS_CXX) $(EXT_OBJS)
OBJS_AUTOLOAD = $(AOBJS_CC) $(AOBJS_AS) $(AOBJS_CXX) $(EXT_OBJS_AUTOLOAD)
OBJS_OVERLAY = $(VOBJS_CC) $(VOBJS_AS) $(VOBJS_CXX) $(EXT_OBJS_OVERLAY)
OBJS = $(OBJS_STATIC) $(OBJS_AUTOLOAD) $(OBJS_OVERLAY)
-include $(CTR_BUILDTOOLSDIR)/modulerules.cctype.$(CTR_CCTYPE)
# Common Rules
# .bin .srl
ifdef CTR_MAKEROM
#
# MAKEROM
#
ROM_SPEC ?= $(DEFAULT_ROM_SPEC)
MAKEROM_ARM11 ?= $(DEFAULT_MAKEROM_ARM11)
MAKEROM_ARM9 ?= $(DEFAULT_MAKEROM_ARM9)
MAKEROM_ROMROOT ?= $(DEFAULT_MAKEROM_ROMROOT)
MAKEROM_ROMFILES ?= $(DEFAULT_MAKEROM_ROMFILES)
MAKEROM_ROMSPEED ?= $(DEFAULT_MAKEROM_ROMSPEED)
MAKEROM_FLAGS ?=
MAKEROM_FLAGS += $(if $(CTR_FINALROM),,-F)
MAKEROM_DEFS = -DCTRSDK_ROOT='$(ROOT)' \
-DTARGET_NAME='$(TARGET_NAME)' \
-DMAKEROM_ROMROOT='$(MAKEROM_ROMROOT)' \
-DMAKEROM_ROMFILES='$(MAKEROM_ROMFILES)' \
-DMAKEROM_ROMSPEED='$(MAKEROM_ROMSPEED)' \
-DBINDIR='$(BINDIR)' \
-DCOMPDIR='$(CTR_COMPONENTSDIR)' \
-DCOMPTYPE11='$(CTR_BUILDTYPE_ARM11)' \
-DCOMPTYPE9='$(CTR_BUILDTYPE_ARM9)' \
-DPROC='$(CODEGEN_PROC)' \
-DPLATFORM='$(CTR_PLATFORM)' \
-DCODEGEN='$(CODEGEN_ARCH)' \
-DBUILD='$(CTR_BUILD_DIR)' \
-DCOMPSUFFIX9='$(COMPSUFFIX)' \
-DCOMPSUFFIX7=''
TARGET_ROM = $(strip $(findstring .srl,$(TARGET_BIN)) \
$(findstring .bin,$(TARGET_BIN)))
ifneq ($(strip $(OBJS) $(LLIBRARIES)),) # any object?
ifeq ($(CODEGEN_PROC),ARM11)
SDEPENDS_BIN = $(BINDIR)/%.nef $(MAKEROM_ARM11)
MAKEROM_DEFS += -DMAKEROM_ARM11='$(basename $@)' \
-DMAKEROM_ARM9='$(basename $(MAKEROM_ARM9))'
else # !ARM11
SDEPENDS_BIN = $(BINDIR)/%.nef $(MAKEROM_ARM11)
MAKEROM_DEFS += -DMAKEROM_ARM11='$(basename $(MAKEROM_ARM11))' \
-DMAKEROM_ARM9='$(basename $@)'
endif # -ARM11
else # !OBJS !LLIBRARIES
SDEPENDS_BIN = $(MAKEROM_ARM11) $(MAKEROM_ARM7)
MAKEROM_DEFS += -DMAKEROM_ARM11='$(basename $(MAKEROM_ARM11))' \
-DMAKEROM_ARM9='$(basename $(MAKEROM_ARM9))'
endif # -OBJS -LLIBRARIES
ifndef USE_MY_RULE_BIN
$(BINDIR)/%.bin $(BINDIR)/%.srl: $(SDEPENDS_BIN) $(ROM_SPEC) $(LDEPENDS_BIN) $(EDEPENDS_BIN)
$(MAKEROM) $(MAKEROM_FLAGS) $(MAKEROM_DEFS) $(ROM_SPEC) $@
endif # -USE_MY_RULE_BIN
$(BINDIR)/$(TARGET_SIGN_BIN): $(BINDIR)/$(TARGET_BIN)
$(CTRSDK_ROOT)/tools/bin/attachsign.exe -D $(addprefix $(BINDIR)/,$(TARGET_BIN))
else # !CTR_MAKEROM
#
# ELFTOBIN
#
ifndef USE_MY_RULE_BIN
ifeq ($(CODEGEN_PROC),ARM11)
$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.nef $(LDEPENDS_BIN) $(EDEPENDS_BIN)
$(ELFTOBIN) $< $(ELFTOBIN_ARM7) $(ELFTOBIN_ROMHEADER) -o $@
else # !ARM11
$(BINDIR)/%.bin $(BINDIR)/%.srl: $(BINDIR)/%.nef $(LDEPENDS_BIN) $(EDEPENDS_BIN)
$(ELFTOBIN) $(ELFTOBIN_ARM9) $< $(ELFTOBIN_ROMHEADER) -o $@
endif # -ARM11
endif # -USE_MY_RULE_BIN
endif # -CTR_MAKEROM
endif # -CTR_FORCE_BUILD
# .bnr .bsf
%.bnr: %.bsf
$(MAKEBANNER) $(MAKEBANNER_FLAGS) $< $@
%.nbfc %.nbfp: %.bmp
$(NTEXCONV) -no -bg -bgb -bgnc $< >/dev/null
#----------------------------------------------------------------------------
# MAKE TARGETS
#----------------------------------------------------------------------------
.PHONY: all default build install clean clobber full super-full
BUILDCMDS = all default build
#----------------------------------------------------------------------------
SUBDIR_FLAGS += $(if $(CTR_CODEGEN_ALL),CTR_CODEGEN_ALL=False)
define MAKE_SUBDIR
+$(foreach DIR,$(SUBDIRS),$(MAKE) $(SUBDIR_FLAGS) -C $(DIR) $(MAKECMDGOALS) $(AND)) true
+$(foreach FILE,$(SUBMAKES),$(MAKE) $(SUBDIR_FLAGS) -C $(dir $(FILE)) -f $(notdir $(FILE)) $(MAKECMDGOALS) $(AND)) true
endef
ifeq ($(MAKEFILE),Makefile)
MAKEFILE_ =
else
MAKEFILE_ = /$(MAKEFILE)
endif
define ECHO_CURDIR
$(ECHO) "==== $(CURDIR)$(MAKEFILE_)";
endef
define DO_INSTALL_FILES
$(INSTALL) -d $(1) $(AND) \
$(foreach FILE, $(2), \
if [ ! -e $(1)/$(notdir $(FILE)) -o \
$(FILE) -nt $(1)/$(notdir $(FILE)) ]; \
then \
$(ECHO) " install: $(FILE) -> $(1)" $(AND) \
$(INSTALL) $(FILE) $(1)/$(notdir $(FILE)); \
fi $(AND) ) true
endef
DO_INSTALL = $(call DO_INSTALL_FILES,$(INSTALL_DIR),$(INSTALL_TARGETS))
INSTALL_INDEX_SRC = $(firstword $(INSTALL_TARGETS))
INSTALL_INDEX_DEST = $(INSTALL_DIR)/$(notdir $(INSTALL_INDEX_SRC))
define DO_INSTALL_WILDCARD
$(INSTALL) -d $(INSTALL_DIR) $(AND) \
if [ ! -e $(INSTALL_INDEX_DEST) -o \
$(INSTALL_INDEX_SRC) -nt $(INSTALL_INDEX_DEST) ]; \
then \
$(foreach FILE, $(INSTALL_TARGETS), \
$(ECHO) " install: $(FILE) -> $(INSTALL_DIR)" $(AND) \
$(INSTALL) $(FILE) $(INSTALL_DIR) $(AND) ) true; \
fi
endef
#----------------------------------------------------------------------------
# make parallelly
#----------------------------------------------------------------------------
SUBDIRS_PREFIX = make-subdir-p-
SUBDIRS_PARALLEL = $(addprefix $(SUBDIRS_PREFIX),$(SUBDIRS_P))
$(SUBDIRS_PARALLEL):$(SUBDIRS_PREFIX)%:
$(MAKE) -C $(*F) $(MAKECMDGOALS)
#----------------------------------------------------------------------------
# make build
#----------------------------------------------------------------------------
.PHONY: do-build
build:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
ifneq ($(strip $(NEWDIRS)),)
@$(MKDIRP) $(NEWDIRS)
endif
@+$(REMAKE) do-build
ifdef INSTALL_TARGETS
@$(DO_INSTALL)
endif
ifeq ($(CTR_CODEGEN_ALL),True)
ifeq ($(CTR_CODEGEN),ARM)
@+$(REMAKE) CTR_CODEGEN_ALL=False CTR_CODEGEN=THUMB build
endif
endif
#----------------------------------------------------------------------------
# make install
#----------------------------------------------------------------------------
install:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
ifdef INSTALL_TARGETS
@$(DO_INSTALL)
endif
ifeq ($(CTR_CODEGEN_ALL),True)
ifeq ($(CTR_CODEGEN),ARM)
@+$(REMAKE) CTR_CODEGEN_ALL=False CTR_CODEGEN=THUMB install
endif
endif
#----------------------------------------------------------------------------
# make full
#----------------------------------------------------------------------------
define makefull
@echo [[[ make full $(1) $(CURDIR) ]]]
@+unset CTR_DEBUG CTR_RELEASE CTR_FINALROM CTR_CODEGEN_ALL; \
$(foreach b,FINALROM RELEASE DEBUG, \
$(foreach a,ARM THUMB, \
date "+::: %Y/%m/%d %H:%M:%S $a-$b" $(AND) \
$(REMAKE) CTR_$b=TRUE CTR_CODEGEN=$a CTR_CODEGEN_ALL=False $(1) $(AND) \
) \
) true
endef
full:
$(call makefull,build)
full-install:
$(call makefull,install)
#----------------------------------------------------------------------------
# make super-full
#----------------------------------------------------------------------------
define makesuperfull
@echo [[[ make super-full $(1) $(CURDIR) ]]]
@+unset CTR_DEBUG CTR_RELEASE CTR_FINALROM CTR_CODEGEN_ALL; \
$(foreach p,TS TEG, \
$(foreach b,FINALROM RELEASE DEBUG, \
$(foreach a,ARM THUMB, \
date "+::: %Y/%m/%d %H:%M:%S $a-$b" $(AND) \
$(REMAKE) CTR_$b=TRUE CTR_PLATFORM=$p CTR_CODEGEN=$a CTR_CODEGEN_ALL=False $(1) $(AND) \
)\
)\
) true
endef
super-full:
$(call makesuperfull,build)
super-full-install:
$(call makesuperfull,install)
#----------------------------------------------------------------------------
# Autotest using IS-NITRO-EMULATOR
#----------------------------------------------------------------------------
ifdef IS_CTR_DIR
AUTOTESTLOG := $(ROOT)/autotest.log
.PHONY: autotest do-autotest do-autotest-test
autotest:
@+$(REMAKE) clobber
@+$(REMAKE) build CTR_AUTOTEST=TRUE
@$(RM) $(AUTOTESTLOG)
@+$(REMAKE) do-autotest
@$(SED) -e 's/\r//g;s/$$/\r/g;' $(AUTOTESTLOG) > $(AUTOTESTLOG).tmp
@$(MV) $(AUTOTESTLOG).tmp $(AUTOTESTLOG)
do-autotest:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
ifneq ($(TARGET_ROM),)
@+$(REMAKE) test-run
endif
endif
#----------------------------------------------------------------------------
# make clobber & clean
#----------------------------------------------------------------------------
.PHONY: clobber-installed
clobber:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
-$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN)
-$(RM) $(GDIRT_CLOBBER) $(LDIRT_CLOBBER) $(EDIRT_CLOBBER)
ifneq ($(GDIRT_INSTALLED),)
ifneq ($(CTR_FORCE_BUILD),)
$(call makefull,clobber-installed)
else
@+$(REMAKE) clobber-installed
endif
endif
clobber-installed:
-$(RM) $(GDIRT_INSTALLED)
#----------------------------------------------------------------------------
super-clobber:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
-$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN)
-$(RM) $(GDIRT_CLOBBER) $(LDIRT_CLOBBER) $(EDIRT_CLOBBER)
ifneq ($(GDIRT_INSTALLED),)
$(call makesuperfull,clobber-installed)
endif
#----------------------------------------------------------------------------
clean:
@$(MAKE_SUBDIR)
@$(ECHO_CURDIR)
-$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN)
#----------------------------------------------------------------------------
# source file dependancies
#----------------------------------------------------------------------------
#
# dynamic dependancy generation
# like as $(OBJDIR)/main.o: main.c
#
DEP_SRCS_ALL = $(SRCS) $(SRCS_AUTOLOAD) $(SRCS_OVERLAY)
define RuleCtoObj
$$(OBJDIR)/$$(notdir $$(basename $(1))).o: $(1)
endef
endif # CTRSDK_MODULERULES_
# Put this sentance out of include-guard to avoid $(eval xxx) limitation
$(foreach FILE,$(DEP_SRCS_ALL),$(eval $(call RuleCtoObj,$(FILE))))
ifndef CTRSDK_MODULERULES_
#
# include dependancies file
#
ifeq ($(MAKECMDGOALS),do-build)
ifdef SRCS
-include $(DEPENDDIR)/*.d
endif
endif
#----------------------------------------------------------------------------
# for IS-NITRO-EMULATOR
#----------------------------------------------------------------------------
ifdef IS_CTR_DIR
-include $(CTR_BUILDTOOLSDIR)/modulerules.emtype.ISD
endif
#----------------------------------------------------------------------------
# Load add-ins' modulerules
#----------------------------------------------------------------------------
-include $(CTR_BUILDTOOLSDIR)/modulerules.add-ins.*
#----------------------------------------------------------------------------
CTRSDK_MODULERULES_ = TRUE
endif # CTRSDK_MODULERULES_
#----- End of modulerules -----