mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@2 b871894f-2f95-9b40-918c-086798483c85
396 lines
12 KiB
Makefile
396 lines
12 KiB
Makefile
#! make -f
|
|
#----------------------------------------------------------------------------
|
|
# Project: CtrSDK - 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.
|
|
#
|
|
# $Log: $
|
|
# $NoKeywords: $
|
|
#----------------------------------------------------------------------------
|
|
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 -----
|