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