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_TOP_MODULERULES_ 19TWLSDK_TOP_MODULERULES_ = TRUE 20 21ifdef TWLSDK_TOP_COMMONDEFS_ 22#---------------------------------------------------------------------------- 23 24-include $(BUILDTOOLSDIR)/commondefs.compat.post 25 26#---------------------------------------------------------------------------- 27# Implicit RULES 28#---------------------------------------------------------------------------- 29.SUFFIXES: # Delete all suffix rules 30 31 32TWLSDK_MSG_ASSEMBLE = " assemble:" 33TWLSDK_MSG_COMPILE = " compile:" 34TWLSDK_MSG_ARCHIVE = " archive:" 35TWLSDK_MSG_LINK = " link:" 36TWLSDK_MSG_MAKE_LCF = " make lcf:" 37TWLSDK_MSG_MAKE_MCH = " make mch:" 38TWLSDK_MSG_MAKE_SRL = " make srl:" 39TWLSDK_MSG_MAKE_TAD = " make tad:" 40TWLSDK_MSG_SIGN = " sign:" 41TWLSDK_MSG_MAKE_BNR = " make bnr:" 42TWLSDK_MSG_VERSION = " make ver:" 43 44ifneq ($(FORCE_BUILD),) 45VPATH = $(SRCDIR) 46 47SSRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS))) 48ASRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_AUTOLOAD))) 49VSRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_OVERLAY))) 50LASRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_LTDAUTOLOAD))) 51LVSRCFILES = $(addprefix $(OBJDIR)/,$(notdir $(SRCS_LTDOVERLAY))) 52 53SOBJS_CC = $(filter %.o,$(SSRCFILES:.c=.o)) 54SOBJS_AS = $(filter %.o,$(SSRCFILES:.s=.o)) 55SOBJS_CXX = $(filter %.o,$(SSRCFILES:.cpp=.o)) 56AOBJS_CC = $(filter %.o,$(ASRCFILES:.c=.o)) 57AOBJS_AS = $(filter %.o,$(ASRCFILES:.s=.o)) 58AOBJS_CXX = $(filter %.o,$(ASRCFILES:.cpp=.o)) 59VOBJS_CC = $(filter %.o,$(VSRCFILES:.c=.o)) 60VOBJS_AS = $(filter %.o,$(VSRCFILES:.s=.o)) 61VOBJS_CXX = $(filter %.o,$(VSRCFILES:.cpp=.o)) 62LAOBJS_CC = $(filter %.o,$(LASRCFILES:.c=.o)) 63LAOBJS_AS = $(filter %.o,$(LASRCFILES:.s=.o)) 64LAOBJS_CXX = $(filter %.o,$(LASRCFILES:.cpp=.o)) 65LVOBJS_CC = $(filter %.o,$(LVSRCFILES:.c=.o)) 66LVOBJS_AS = $(filter %.o,$(LVSRCFILES:.s=.o)) 67LVOBJS_CXX = $(filter %.o,$(LVSRCFILES:.cpp=.o)) 68 69OBJS_CC = $(SOBJS_CC) $(AOBJS_CC) $(VOBJS_CC) $(LAOBJS_CC) $(LVOBJS_CC) 70OBJS_AS = $(SOBJS_AS) $(AOBJS_AS) $(VOBJS_AS) $(LAOBJS_AS) $(LVOBJS_AS) 71OBJS_CXX = $(SOBJS_CXX) $(AOBJS_CXX) $(VOBJS_CXX) $(LAOBJS_CXX) $(LVOBJS_CXX) 72OBJS_STATIC = $(SOBJS_CC) $(SOBJS_AS) $(SOBJS_CXX) $(EXT_OBJS) 73OBJS_AUTOLOAD = $(AOBJS_CC) $(AOBJS_AS) $(AOBJS_CXX) $(EXT_OBJS_AUTOLOAD) 74OBJS_OVERLAY = $(VOBJS_CC) $(VOBJS_AS) $(VOBJS_CXX) $(EXT_OBJS_OVERLAY) 75OBJS_LTDAUTOLOAD = $(LAOBJS_CC) $(LAOBJS_AS) $(LAOBJS_CXX) $(EXT_OBJS_LTDAUTOLOAD) 76OBJS_LTDOVERLAY = $(LVOBJS_CC) $(LVOBJS_AS) $(LVOBJS_CXX) $(EXT_OBJS_LTDOVERLAY) 77OBJS += $(OBJS_STATIC) $(OBJS_AUTOLOAD) $(OBJS_OVERLAY) $(OBJS_LTDAUTOLOAD) $(OBJS_LTDOVERLAY) 78 79PCHDR_CACHE ?= $(ROOT)/cache/include 80GDIRT_CLOBBER += $(PCHDR_CACHE)/*.h* \ 81 $(BUILDTOOLSDIR)/*/verinfo.* 82endif 83 84 85#============================================================================ 86# 87# common rules 88# 89#============================================================================ 90 91.PHONY: dirs 92 93dirs: 94# @echo codegen=$(NITRO_CODEGEN), arch=$(ARCHGEN_TYPE) 95 @$(DO_MAKEDIR) 96 97 98#---------------------------------------------------------------------------- 99# make platform 100#---------------------------------------------------------------------------- 101 102.PHONY: build build-nitro build-twl 103 104ifeq ($(PARALLEL_BUILD),TRUE) 105build: build-nitro build-twl 106else 107build: build-nitro 108build-nitro: build-twl 109endif 110 111build-nitro: make-sub 112build-twl: make-sub 113 114build-nitro: 115 @+$(if $(filter NITRO,$(TARGET_PLATFORM_LIST)), $(REMAKE) REMAKE_TWLSDK_PLATFORM=NITRO build_platform) 116 117build-twl: 118 @+$(if $(filter TWL,$(TARGET_PLATFORM_LIST)), $(REMAKE) REMAKE_TWLSDK_PLATFORM=TWL build_platform) 119 120 121 122.PHONY: install install-nitro install-twl 123 124ifeq ($(PARALLEL_BUILD),TRUE) 125install: install-nitro install-twl 126else 127install: install-nitro 128install-nitro: install-twl 129endif 130 131install-nitro: make-sub 132install-twl: make-sub 133 134install-nitro: 135 @+$(if $(filter NITRO,$(TARGET_PLATFORM_LIST)), $(REMAKE) REMAKE_TWLSDK_PLATFORM=NITRO install_platform) 136 137install-twl: 138 @+$(if $(filter TWL,$(TARGET_PLATFORM_LIST)), $(REMAKE) REMAKE_TWLSDK_PLATFORM=TWL install_platform) 139 140 141#---------------------------------------------------------------------------- 142# make targets 143#---------------------------------------------------------------------------- 144 145.PHONY: all default build install clean clobber full super-full 146 147BUILDCMDS = all default build 148 149#---------------------------------------------------------------------------- 150 151ifdef SILENT 152DO_INSTALL_FILES_ECHO = $(ECHO) " install: $(notdir $(FILE)) -> $(subst $(subst \,/,$(TWLSDK_ROOT)),,$(1))" 153else 154DO_INSTALL_FILES_ECHO = $(ECHO) " install: $(FILE) -> $(1)" 155endif 156 157ifdef INSTALL_WORKAROUND 158define CMD_INSTALL 159install $(1) $(2) && touch -m -r $(1) $(2) 160endef 161else 162define CMD_INSTALL 163$(INSTALL) $(1) $(2) 164endef 165endif 166 167 168define DO_INSTALL_FILES 169 $(INSTALL) -d $(1) $(AND) \ 170 $(foreach FILE, $(2), \ 171 if [ ! -e $(1)/$(notdir $(FILE)) -o \ 172 $(FILE) -nt $(1)/$(notdir $(FILE)) ]; \ 173 then \ 174 $(call DO_INSTALL_FILES_ECHO,$(1)) $(AND) \ 175 $(call CMD_INSTALL,$(FILE),$(1)/$(notdir $(FILE))); \ 176 fi $(AND) ) $(TRUE) 177endef 178 179DO_INSTALL = $(call DO_INSTALL_FILES,$(INSTALL_DIR),$(INSTALL_TARGETS)) 180 181INSTALL_INDEX_SRC = $(firstword $(INSTALL_TARGETS)) 182INSTALL_INDEX_DEST = $(INSTALL_DIR)/$(notdir $(INSTALL_INDEX_SRC)) 183 184define DO_INSTALL_WILDCARD 185 $(INSTALL) -d $(INSTALL_DIR) $(AND) \ 186 if [ ! -e $(INSTALL_INDEX_DEST) -o \ 187 $(INSTALL_INDEX_SRC) -nt $(INSTALL_INDEX_DEST) ]; \ 188 then \ 189 $(foreach FILE, $(INSTALL_TARGETS), \ 190 $(call DO_INSTALL_FILES_ECHO,$(INSTALL_DIR)) $(AND) \ 191 $(INSTALL) $(FILE) $(INSTALL_DIR) $(AND) ) $(TRUE); \ 192 fi 193endef 194 195 196#---------------------------------------------------------------------------- 197# make parallelly 198#---------------------------------------------------------------------------- 199 200.PHONY: make-subdir-p-% make-submake-p-% make-sub make-sub-p-pre make-sub-p 201 202SUBDIRS_PREFIX = make-subdir-p- 203SUBDIRS_PARALLEL = $(addprefix $(SUBDIRS_PREFIX),$(SUBDIRS_P)) 204 205SUBMAKES_PREFIX = make-submake-p- 206SUBMAKES_PARALLEL = $(addprefix $(SUBMAKES_PREFIX),$(SUBMAKES_P)) 207 208$(SUBDIRS_PARALLEL):$(SUBDIRS_PREFIX)%: make-sub-p-pre 209 @+$(MAKE) $(SUBDIR_FLAGS) -C $* $(MAKECMDGOALS) 210 211$(SUBMAKES_PARALLEL):$(SUBMAKES_PREFIX)%: make-sub-p-pre 212 @+$(MAKE) $(SUBDIR_FLAGS) -C $(*D) -f $(*F) $(MAKECMDGOALS) 213 214make-sub-p-pre: 215 @+$(foreach DIR,$(SUBDIRS),$(MAKE) $(SUBDIR_FLAGS) -C $(DIR) $(MAKECMDGOALS) $(AND)) $(TRUE) 216 @+$(foreach FILE,$(SUBMAKES),$(MAKE) $(SUBDIR_FLAGS) -C $(dir $(FILE)) -f $(notdir $(FILE)) $(MAKECMDGOALS) $(AND)) $(TRUE) 217 218make-sub-p: make-sub-p-pre $(SUBDIRS_PARALLEL) $(SUBMAKES_PARALLEL) 219 220ifneq ($(SKIP_SUBDIR),TRUE) 221make-sub: make-sub-p 222else 223make-sub: 224endif 225 226#============================================================================ 227# 228# platform specific rules 229# 230#============================================================================ 231 232ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) 233include $(TWL_BUILDTOOLSDIR)/modulerules 234else 235ifneq ($(filter NITRO,$(TARGET_PLATFORM_LIST)),) 236include $(NITRO_BUILDTOOLSDIR)/modulerules 237else 238include $(BUILDTOOLSDIR)/modulerules.skip 239endif 240endif 241 242 243#---------------------------------------------------------------------------- 244# make full 245#---------------------------------------------------------------------------- 246 247define makefull 248 @echo [[[ make full $(1) $(CURDIR) ]]] 249 @+unset NITRO_DEBUG NITRO_RELEASE NITRO_FINALROM TWL_DEBUG TWL_RELEASE TWL_FINALROM; \ 250 $(foreach a,DEBUG RELEASE FINALROM, \ 251 date "+::: %Y/%m/%d %H:%M:%S $a" $(AND) \ 252 $(REMAKE) TARGET_$a=TRUE DEFAULT_CODEGEN=ALL DEFAULT_ARCHGEN=ALL DEFAULT_TARGET_PLATFORM=ALL $(1) $(AND) \ 253 ) $(TRUE) 254endef 255 256full: 257 $(call makefull,build) 258 259full-install: 260 $(call makefull,install) 261 262#---------------------------------------------------------------------------- 263# make testsrl 264#---------------------------------------------------------------------------- 265 266define maketestsrl 267 @echo [[[ make testsrl $(1) $(CURDIR) ]]] 268 @+unset NITRO_DEBUG NITRO_RELEASE NITRO_FINALROM TWL_DEBUG TWL_RELEASE TWL_FINALROM; \ 269 $(foreach a,DEBUG RELEASE, \ 270 date "+::: %Y/%m/%d %H:%M:%S $a" $(AND) \ 271 $(REMAKE) TARGET_$a=TRUE DEFAULT_CODEGEN=ALL DEFAULT_ARCHGEN=ALL DEFAULT_TARGET_PLATFORM=ALL $(1) $(AND) \ 272 ) $(TRUE) 273endef 274 275testsrl: 276 $(call maketestsrl,build) 277 278testsrl-install: 279 $(call maketestsrl,install) 280 281#---------------------------------------------------------------------------- 282# make super-full 283#---------------------------------------------------------------------------- 284 285define makesuperfull 286 @echo [[[ make super-full $(1) $(CURDIR) ]]] 287 @+unset NITRO_DEBUG NITRO_RELEASE NITRO_FINALROM TWL_DEBUG TWL_RELEASE TWL_FINALROM; \ 288 $(foreach b,TS TEG, \ 289 $(foreach a,DEBUG RELEASE FINALROM, \ 290 date "+::: %Y/%m/%d %H:%M:%S $a-$b" $(AND) \ 291 $(REMAKE) TARGET_$a=TRUE TWL_PLATFORM=$b NITRO_PLATFORM=$b DEFAULT_CODEGEN=ALL DEFAULT_ARCHGEN=ALL DEFAULT_TARGET_PLATFORM=ALL $(1) $(AND) \ 292 ) \ 293 ) $(TRUE) 294endef 295 296super-full: 297 $(call makesuperfull,build) 298 299super-full-install: 300 $(call makesuperfull,install) 301 302#---------------------------------------------------------------------------- 303# make clobber & clean 304#---------------------------------------------------------------------------- 305 306clobber: make-sub 307 @$(ECHO_CURDIR) 308 -$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN)\ 309 $(GDIRT_CLOBBER) $(LDIRT_CLOBBER) $(EDIRT_CLOBBER) 310ifneq ($(GDIRT_INSTALLED),) 311ifneq ($(FORCE_BUILD),) 312 $(call makefull,clobber-installed) 313else 314 @+$(REMAKE) clobber-installed 315endif 316endif 317 318 319super-clobber: make-sub 320 @$(ECHO_CURDIR) 321 -$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN) $(GDIRT_CLOBBER) $(LDIRT_CLOBBER) $(EDIRT_CLOBBER) 322ifneq ($(GDIRT_INSTALLED),) 323 $(call makesuperfull,clobber-installed) 324endif 325 326#---------------------------------------------------------------------------- 327 328clean: make-sub 329 @$(ECHO_CURDIR) 330 -$(RM) $(GDIRT_CLEAN) $(LDIRT_CLEAN) $(EDIRT_CLEAN) 331#---------------------------------------------------------------------------- 332endif # TWLSDK_TOP_COMMONDEFS_ 333 334endif # TWLSDK_TOP_MODULERULES_ 335#----- End of modulerules ----- 336