1#!/usr/bin/env omake 2#---------------------------------------------------------------------------- 3# Project: Horizon 4# File: commondefs.om 5# 6# Copyright 2007-2009 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:: 2010-09-24#$ 15# $Rev: 26596 $ 16# $Author: sasaki_yu $ 17#---------------------------------------------------------------------------- 18 19# OMake �̃f�t�H���g���C�u��������x�����ǂݍ��� 20open build/Common 21 22SCANNER_MODE=disabled 23 24# �f�B���N�g�����[�g ���ϐ��̎擾�i��`����Ă��Ȃ��Ă��r���h���͉̂\�j 25public.HORIZON_ROOT = 26if $(defined-env HORIZON_ROOT) 27 HORIZON_ROOT = $(absname $"$(getenv HORIZON_ROOT)") 28 export 29 30if $(defined-env CTRSDK_ROOT) 31 CTRSDK_ROOT = $(absname $"$(getenv CTRSDK_ROOT)") 32 if $(and $(defined-env HORIZON_ROOT), $(not $(equal $(HORIZON_ROOT), $(CTRSDK_ROOT)))) 33 eprintln(HORIZON_ROOT �� CTRSDK_ROOT ����v���܂���B�����p�X��ݒ肷�邩�A�ǂ��炩����������`���ĉ������B) 34 exit(1) 35 HORIZON_ROOT = $(CTRSDK_ROOT) 36 export 37 38if $(defined-env CTRSDK_TARGETS) 39 CTRSDK_TARGETS = $(absname $"$(getenv CTRSDK_TARGETS)") 40 if $(defined-env HORIZON_TARGETS) 41 eprintln(HORIZON_TARGETS �� CTRSDK_TARGETS �͓����Ɏg�p�ł��܂���̂ŁA�ǂ��炩����������`���ĉ������B) 42 exit(1) 43 HORIZON_TARGETS = $(CTRSDK_TARGETS) 44 export 45 46if $(not $(HORIZON_ROOT)) 47 eprintln($"$$CTRSDK_ROOT ����`����Ă��܂���") 48 HORIZON_ROOT = $(absname $(ROOT)) 49 export 50 51public.HORIZON_ADDINS_ROOT = 52if $(defined-env HORIZON_ADDINS_ROOT) 53 HORIZON_ADDINS_ROOT = $(absname $"$(getenv HORIZON_ADDINS_ROOT)") 54 export 55else 56 HORIZON_ADDINS_ROOT = $(absname $(HORIZON_ROOT)/../CTR/Addins) 57 export 58 if $(not $(file-exists $(HORIZON_ADDINS_ROOT))) 59 HORIZON_ADDINS_ROOT = 60 export 61 62# �f�B���N�g�����` 63public.SUBDIR_IMAGES = images 64public.SUBDIR_SD_IMAGES = sdimages 65public.SUBDIR_OBJECTS = objects 66public.SUBDIR_LIBRARIES = libraries 67public.SUBDIR_INCLUDE = include 68public.DIRSUFFIX_FEEDBACK = .__feedback__ 69public.SCANNER_PREFIX = scan 70 71public.AROOT = $(absname $(ROOT)) 72 73public.ROOT_IMAGES = $(absname $(ROOT)$(DIRSEP)$(SUBDIR_IMAGES)) 74public.ROOT_OBJECTS = $(absname $(ROOT)$(DIRSEP)$(SUBDIR_OBJECTS)) 75public.ROOT_LIBRARIES = $(absname $(HORIZON_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES)) 76public.ROOT_BUILD = $(absname $(HORIZON_ROOT)$(DIRSEP)build) 77public.ROOT_OMAKE = $(absname $(ROOT_BUILD)$(DIRSEP)omake) 78public.ROOT_INCLUDE = $(absname $(ROOT)$(DIRSEP)$(SUBDIR_INCLUDE)) 79public.ROOT_SOURCES = $(absname $(ROOT)$(DIRSEP)sources) 80public.ROOT_TOOLS = $(absname $(HORIZON_ROOT)$(DIRSEP)tools) 81public.ROOT_TARGETTOOLS = $(absname $(HORIZON_ROOT)$(DIRSEP)tools$(DIRSEP)TargetTools) 82public.ROOT_COMMANDS = $(absname $(ROOT_TOOLS)$(DIRSEP)CommandLineTools) 83public.ROOT_RESOURCES = $(absname $(HORIZON_ROOT)$(DIRSEP)resources) 84 85public.HORIZON_ROOT_INCLUDE = $(HORIZON_ROOT)$(DIRSEP)$(SUBDIR_INCLUDE) 86public.HORIZON_ROOT_IMAGES = $(HORIZON_ROOT)$(DIRSEP)$(SUBDIR_IMAGES) 87public.HORIZON_ROOT_LIBRARIES = $(HORIZON_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES) 88 89# �C���X�g�[�����ݒ� (���̏��ԂŗD��) 90# 1. ���ϐ� HORIZON_INSTALL_ROOT 91# 2. �ϐ� INSTALL_ROOT 92# 3. �ϐ� HORIZON_ROOT 93if $(defined-env HORIZON_INSTALL_ROOT) 94 HORIZON_INSTALL_ROOT = $(dir $"$(getenv HORIZON_INSTALL_ROOT)") 95 96declare public.INSTALL_ROOT 97if $(defined HORIZON_INSTALL_ROOT) 98 INSTALL_ROOT = $(dir $(HORIZON_INSTALL_ROOT)) 99 export 100else 101 if $(defined INSTALL_ROOT) 102 INSTALL_ROOT = $(dir $(INSTALL_ROOT)) 103 export 104 elseif $(equal $(AROOT), $(HORIZON_ROOT)) 105 INSTALL_ROOT = $(ROOT) 106 export 107 export 108 109if $(not $(defined INSTALL_IMAGES_DIR)) 110 INSTALL_IMAGES_DIR = $(SUBDIR_IMAGES) 111 export 112 113if $(defined INSTALL_ROOT) 114 INSTALL_ROOT_IMAGES = $(dir $(INSTALL_ROOT)$(DIRSEP)$(INSTALL_IMAGES_DIR)) 115 INSTALL_ROOT_LIBRARIES = $(dir $(INSTALL_ROOT)$(DIRSEP)$(SUBDIR_LIBRARIES)) 116 export 117 118public.HORIZON_PRIVATE_RULES = $(EMPTY) 119 120# Horizon �p���C�u���� 121include $(ROOT_OMAKE)/utildefs 122include $(ROOT_OMAKE)/commondefs.cctype 123include $(ROOT_OMAKE)/commondefs.gl 124include $(ROOT_OMAKE)/targetdefs 125include $(ROOT_OMAKE)/packagedefs 126include $(ROOT_OMAKE)/debuggerdefs.partner 127 128# �R���p�C���̑I�� (TODO: ��ւ��C���^�t�F�[�X�����) 129 130COMPILER = $(CompilerRVCT.new) 131 132# �g���q�̐ݒ� 133 134EXT_OBJ = .o 135EXT_LIB = .a 136EXT_ASM = .s 137EXT_C = .c 138 139EXT_EXE = $(EXE) 140EXT_ELF = .axf 141EXT_CCI = .cci # CTR Card Image 142EXT_CIP = .cip # CTR Initial Process 143EXT_CSU = .csu # CTR System Updater 144EXT_CXI = .cxi # CTR eXecutable Image 145EXT_CIA = .cia # CTR Importable Archive 146EXT_CDI = .cdi # CTR Development Image 147EXT_OLS = .ols.cia 148EXT_CFA = .cfa # CTR File Archive 149EXT_BANNER = .bnr 150EXT_ICON = .icn 151 152EXT_PUB = .pubbin 153EXT_PRI = .pribin 154 155# �A�v���P�[�V�����^�C�v�̐ݒ� 156 157APPTYPE_CARD = CARD 158APPTYPE_NAND = NAND 159APPTYPE_BOTH = BOTH 160 161# Horizon �p�c�[���̐ݒ� 162 163public.MAKEROM = $(ROOT_COMMANDS)$(DIRSEP)ctr_makerom32.exe 164public.MAKECIA = $(ROOT_COMMANDS)$(DIRSEP)ctr_makecia32.exe 165public.MAKEOLS = $(ROOT_COMMANDS)$(DIRSEP)ctr_makeols32.exe 166public.MAKEBANNER = $(ROOT_COMMANDS)$(DIRSEP)ctr_makebanner32.exe 167 168public.MAKEROMFLAGS = 169public.MAKECIAFLAGS = 170 171public.BIN2OBJ = $(file $(ROOT_COMMANDS)/ctr_bin2obj32$(EXE)) 172public.BIN2OBJ_FLAGS= 173public.RUNNER = $(file $(ROOT_BUILD)/runner/run.sh) 174public.RUNNER_LOCK = $(file $(ROOT_BUILD)/runner/.lock) 175 176# �p�����[�^�ϐ� 177 178if $(not $(defined SKIP_BUILD)) 179 public.SKIP_BUILD = false 180 export 181 182if $(not $(defined DEBUG_PRINT)) 183 public.DEBUG_PRINT = $`(DEBUG_PRINT_DEFAULT) 184 export 185 186if $(not $(defined DEBUG_PRINT_SDK)) 187 public.DEBUG_PRINT_SDK = $`(DEBUG_PRINT_SDK_DEFAULT) 188 export 189 190if $(not $(defined ASSERT_WARNING)) 191 public.ASSERT_WARNING = $`(ASSERT_WARNING_DEFAULT) 192 export 193 194if $(not $(defined ASSERT_WARNING_SDK)) 195 public.ASSERT_WARNING_SDK = $`(ASSERT_WARNING_SDK_DEFAULT) 196 export 197 198if $(not $(defined HOST_IO)) 199 public.HOST_IO = $`(HOST_IO_DEFAULT) 200 export 201 202public.SOURCES = 203public.OBJECTS = 204 205public.BUILD_APPLICATION = false 206public.BUILD_KERNEL = false 207 208public.FEEDBACK_1ST_STAGE = false 209public.FEEDBACK_2ND_STAGE = false 210 211public.EXCLUSION_SCATTER = false 212 213if $(not $(defined TRACE_PRODUCTCODE)) 214 public.TRACE_PRODUCTCODE = 215 export 216 217# �r���h�^�[�Q�b�g�ƃr���h�^�C�v�ɍ��킹���f�B���N�g�������[�U���Ŏw�肷�邽�߂̕ϐ� 218public.BUILD_TARGET_DIR = $`(TARGET.getFullnameWithSystem Process) 219public.BUILD_TYPE_DIR = $`(TARGET.buildtype) 220 221# ���[�e�B���e�B�� 222 223# �v���W�F�N�g���[�g����̑��p�X�����߂�B 224# ���[�g������ sources �ȉ��̃p�X�̏ꍇ�� sources ����� 225GetSubPath(path) = 226 apath = $(absname $(path)) 227 #println(target: $(apath)) 228 229 subpath = $(removeprefix $(AROOT)$(DIRSEP), $(apath)) 230 subpath = $(removeprefix sources$(DIRSEP), $(subpath)) 231 232 if $(and \ 233 $(or $(equal $(apath), $(subpath)), \ 234 $(and $(defined FORCE_REFERENCE_ROOT), \ 235 $(FORCE_REFERENCE_ROOT)), \ 236 $(defined SOURCES_REFERENCE_ROOT))) 237 subpath_refer = $(removeprefix $(absname $(SOURCES_REFERENCE_ROOT)), $(apath)) 238 #println(subpath_refer: $(subpath_refer)) 239 return $(subpath_refer) 240 else 241 if $(equal $(subpath), $(apath)) 242 eprintln($"�c���[�O�̃t�@�C�����r���h���悤�Ƃ��Ă��܂��B: $(apath)") 243 eprintln($"SOURCES_REFERENCE_ROOT �ɂĎ蓮�Ŋ�f�B���N�g�����w�肵�Ă��������B") 244 return $(basename $(apath)) 245 return $(subpath) 246 247# �f�B���N�g���̐e�q�W�ׂ� 248is_under(parent_path, child_path) = 249 parent_path = $(absname $(parent_path)) 250 child_path = $(absname $(child_path)) 251 if $(equal $(removeprefix $(parent_path), $(child_path)), $(child_path)) 252 return false 253 else 254 return true 255 256 257GetBuildGroup() = 258 return group$(mod $(random), 10) 259 260# �I�u�W�F�N�g�t�@�C�����쐬���� 261public.Object(config, files) = 262 if $(and $(FEEDBACK_1ST_STAGE), $(FEEDBACK_2ND_STAGE)) 263 eprintln(FEEDBACK error) 264 exit(1) 265 266 CCFLAGS += $(COMPILER.getCCFlags $(config)) $(config.getSystemCCFlags) 267 CCFLAGS_MACRO += $(COMPILER.getMacroFlags $(config)) -DNN_USE_MAKECCI 268 ASFLAGS += $(COMPILER.getASFlags $(config)) 269 270 INCLUDES = $(dir $(INCLUDES)) 271 272 DEPEND_FEEDBACK = false 273 if $(FEEDBACK_2ND_STAGE) 274 # �t�B�[�h�o�b�N�t�@�C�����g�p�����r���h�̏ꍇ 275 FEEDBACK = $(config.getFeedBackPath) 276 CCFLAGS_BUILD += --feedback=$(absname $(FEEDBACK)) 277 if $(test ! -e $(FEEDBACK)) 278 # ��Ɉˑ��W������ƁA.h �̕ύX���Ƀt�B�[�h�o�b�N�t�@�C���������Ƃ���� 279 # �r���h���I����Ă��܂����߁A����r���h�i�O�������t�B�[�h�o�b�N�t�@�C�������݂��Ȃ��j 280 # �ꍇ�ɂ݈̂ˑ��W���B 281 DEPEND_FEEDBACK = true 282 export 283 export 284 285 OFILES = 286 export OFILES 287 288 obj_dir_parent = $(config.getObjectDirectory) 289 290 CC = $,(CC) 291 CXX = $,(CXX) 292 CFLAGS = $,(CFLAGS) 293 CCFLAGS = $,(CCFLAGS) 294 CXXFLAGS = $,(CXXFLAGS) 295 296 .PHONY: build-random group1 group2 group3 group4 group5 group6 group7 group8 group9 group0 297 build-random: group1 group2 group3 group4 group5 group6 group7 group8 group9 group0 298 299 # �����I�Ɉ��̃t�@�C���ɑ��ă��[�����`���� 300 foreach(filename, $(files)) 301 if $(not $(equal $(filename), $(EMPTY))) 302 if $(not $(is_under $(CWD), $(filename))) 303 ONAME = $(rootname $(GetSubPath $(filename)))$(EXT_OBJ) 304 export 305 else 306 ONAME = $(rootname $(filename))$(EXT_OBJ) 307 export 308 309 OFILE = $(file $(obj_dir_parent)/$(ONAME)) 310 ODIR = $(makeDirectory $(dirname $(OFILE))) 311 312 $(OFILE): $(ODIR) 313 314 match $(filename) 315 case $"\($(EXT_C)\)$$" 316 scanner_name = $(SCANNER_PREFIX)-c-$(fullname $(rootname $(OFILE))) 317 .SCANNER: $(scanner_name): $(filename) .PHONY/$(ROOT)/build-setup :value: $(digest-in-path-optional $(INCLUDES), $&) 318 $(CC) $(CFLAGS) $(PREFIXED_INCLUDES) $(CSCANFLAGS) $(CCOUT)$(absname $(OFILE)) $(absname $<) 319 320 $(OFILE): $(filename) :scanner: $(scanner_name) 321 $(CC) $(CFLAGS) $(CCFLAGS_BUILD) $(PREFIXED_INCLUDES) -c $(CCOUT)$(absname $@) $(absname $<) 322 323 $(OFILE): $(nth 0, $(CC)) 324 325 $(GetBuildGroup): $(OFILE) 326 327 case $"\(\.cpp\)$$" 328 EXT = $1 329 scanner_name = $(SCANNER_PREFIX)-cxx-$(fullname $(rootname $(OFILE))) 330 .SCANNER: $(scanner_name): $(filename) .PHONY/$(ROOT)/build-setup :value: $(digest-in-path-optional $(INCLUDES), $&) 331 $(CXX) $(CXXFLAGS) $(PREFIXED_INCLUDES) $(CSCANFLAGS) $(CCOUT)$(absname $(OFILE)) $(absname $<) 332 333 $(OFILE): $(filename) :scanner: $(scanner_name) 334 $(CXX) $(CXXFLAGS) $(CCFLAGS_BUILD) $(PREFIXED_INCLUDES) -c $(CCOUT)$(absname $@) $(absname $<) 335 336 $(OFILE): $(nth 0, $(CXX)) 337 338 $(GetBuildGroup): $(OFILE) 339 340 case $"\($(EXT_ASM)\)$$" 341 $(OFILE): $(filename) :effects: asmlock 342 $(AS) $(ASFLAGS) $(CCFLAGS_BUILD) $(PREFIXED_INCLUDES) $(ASOUT)$(absname $@) $(absname $<) 343 344 $(OFILE): $(nth 0, $(AS)) 345 346 default 347 eprintln($"Unsupported source file: " '$(filename)') 348 exit(1) 349 350 # �t�B�[�h�o�b�N���g�p���ăR���p�C������ꍇ�̓t�B�[�h�o�b�N�t�@�C���Ɉˑ� 351 # �ʂɃ��[�����`����ꍇ�͈ˑ��W���ʂɎw�肷��K�v������ 352 if $(DEPEND_FEEDBACK) 353 $(OFILE): $(config.getFeedBackPath) 354 355 OFILES += $(OFILE) 356 357 clean: 358 rm -rf $(obj_dir_parent) $(SUBDIR_OBJECTS) 359 360 return $(OFILES) 361 362public.Bin2ObjDefaultSymbolFunction(filename) = 363 SYMBOL_PREFIX = $(uppercase $(removesuffix $(basename $(filename)))) 364 return $(SYMBOL_PREFIX)_BEGIN $(SYMBOL_PREFIX)_END 365 366public.Bin2ObjHashSymbolFunction(filename) = 367 SYMBOL_PREFIX = $(uppercase $(removesuffix $(basename $(filename)))) 368 return $(SYMBOL_PREFIX)_HASH_BEGIN $(SYMBOL_PREFIX)_HASH_END 369 370 371public.ObjectFromBinaryWithSymbol(config, files, symbol_function) = 372 OFILES = 373 374 obj_dir_parent = $(config.getObjectDirectory) 375 376 foreach(filename, $(files)) 377 OFILE = $(file $(obj_dir_parent)/$(basename $(filename))$(EXT_OBJ)) 378 OFILES += $(OFILE) 379 380 SYMBOL_PAIR = $(symbol_function $(filename)) 381 $(OFILE): $(filename) $(BIN2OBJ) 382 $(BIN2OBJ) $(BIN2OBJ_FLAGS) -b $(nth 0, $(SYMBOL_PAIR)) -e $(nth 1, $(SYMBOL_PAIR)) $< $@ 383 384 $(OFILE): $(obj_dir_parent) 385 386 export OFILES 387 return $(OFILES) 388 389 390public.ObjectFromBinary(config, files) = 391 return $(ObjectFromBinaryWithSymbol $(config), $(files), $(Bin2ObjDefaultSymbolFunction)) 392 393public.HashFromBinary(config, files) = 394 EXT_HASH = .hash 395 HFILES = 396 397 obj_dir_parent = $(config.getObjectDirectory) 398 foreach(filename, $(files)) 399 HFILE = $(file $(obj_dir_parent)/$(basename $(filename))$(EXT_HASH)$(EXT_OBJ)) 400 HFILES += $(HFILE) 401 402 SYMBOL_PAIR = $(Bin2ObjHashSymbolFunction $(filename)) 403 $(HFILE): $(filename) $(BIN2OBJ) 404 $(RUBY) -e "require 'Digest/md5'; STDOUT.binmode; print [Digest::SHA1.hexdigest(File.open('$(filename)', 'rb').read)].pack('H*');" > $@ 405 $(BIN2OBJ) $(BIN2OBJ_FLAGS) -b $(nth 0, $(SYMBOL_PAIR)) -e $(nth 1, $(SYMBOL_PAIR)) $@ $@ 406 407 $(HFILE): $(obj_dir_parent) 408 409 export HFILES 410 return $(HFILES) 411 412%.c: %.y 413 $(YACC) $< 414 415%.c: %.l 416 $(LEX) $< 417 418public.PreProcess(config, infile, outfile) = 419 CCFLAGS_MACRO += $(COMPILER.getMacroFlags $(config)) -DNN_USE_MAKECCI 420 421 scanner_name = $(SCANNER_PREFIX)-cpp-$(fullname $(rootname $(outfile))) 422 423 .SCANNER: $(scanner_name): $(infile) .PHONY/$(ROOT)/build-setup :value: $(digest-in-path-optional $(INCLUDES), $&) 424 $(CPP) $(CCFLAGS) $(PREFIXED_INCLUDES) $(CSCANFLAGS) $(CCOUT)$(absname $(outfile)) $(absname $<) 425 426 outdir = $(makeDirectory $(dirname $(outfile))) 427 428 $(outfile): $(infile) $(outdir) :scanner: $(scanner_name) 429 $(CPP) $(CCFLAGS) $(PREFIXED_INCLUDES) $(CCOUT)$(absname $@) $(absname $<) 430 return $(outfile) 431 432# 433# Default C scanner 434# 435 436.PHONY: CGeneratedFilesTarget 437 438public.CGeneratedFiles(files) = 439 CGeneratedFilesTarget: $(files) 440 441public.LocalCGeneratedFiles(files) = 442 .SCANNER: scan-c-%: $(files) 443 .SCANNER: scan-cxx-%: $(files) 444 .SCANNER: %$(EXT_OBJ): $(files) 445 export 446 447 448.PHONY: build-romfs 449 450public.StaticLibrary(config, name, files) = 451 private.LIBDIR = $(config.getLibraryDirectory true) 452 private.OFILES = $(Object $(config), $(filter-out %$(EXT_OBJ),$(files))) $(filter %$(EXT_OBJ),$(files)) 453 private.NORMALLIB = $(file $(LIBDIR)$(DIRSEP)$(config.getLibraryName $(name))) 454 455 $(NORMALLIB): $(LIBDIR) $(nth 0, $(AR)) 456 $(NORMALLIB): $(OFILES) 457 echo $(absname $^) > $@.res 458 rm -f $(absname $@) 459 $(AR) $(ARFLAGS) $(absname $@) --via $(absname $@.res) 460 rm -f $@.res 461 462 clean: 463 rm -f $(NORMALLIB) 464 465 .PHONY: build-random group1 group2 group3 group4 group5 group6 group7 group8 group9 group0 466 build-random: group1 group2 group3 group4 group5 group6 group7 group8 group9 group0 467 $(GetBuildGroup): $(NORMALLIB) 468 469 return $(NORMALLIB) 470 471 472public.StaticObject(config, files) = 473 private.LIBDIR = $(config.getLibraryDirectory true) 474 475 SOFILES = 476 foreach(filename, $(files)) 477 private.OFILE = $(Object $(config), $(filename)) 478 479 private.NORMALLIB = $(file $(LIBDIR)/$(config.getStaticObjectName $(rootname $(filename)))) 480 481 $(NORMALLIB): $(LIBDIR) 482 $(NORMALLIB): $(OFILE) 483 cp $< $@ 484 485 SOFILES += $(NORMALLIB) 486 export SOFILES 487 488 clean: 489 rm -f $(SOFILES) 490 491 return $(SOFILES) 492 493 494completeLibrarySuffix(config, libfiles) = 495 result = 496 foreach(libfile, $(libfiles)) 497 if $(findstring $(libfile), $'\.(small)|(fast)(\.|$)') 498 result += $(libfile) 499 export 500 else 501 result += $(libfile).$(config.effort) 502 export 503 export 504 return $(result) 505 506public.Program(config, name, files) = 507 FEEDBACK_FILE = $(config.getFeedBackPath) 508 private.IMAGE_DIR = $(config.getImageDirectory false) 509 LIBDIR = $(config.getLibraryDirectory false) 510 NAME = $(config.getBinaryPath $(name), $(EXT_EXE)) 511 LDFLAGS += $(COMPILER.getLDFlags $(config)) 512 513 MINIMUM_LIBS += $(config.getMinimumLibraries) 514 DEFAULT_LIBS += $(config.getDefaultLibraries) 515 if $(config.isHostIoEnable) 516 DEFAULT_LIBS += $(config.getHostIoLibraries) 517 export 518 519 OFILES = $(Object $(config), $(filter-out %$(EXT_OBJ) %$(EXT_ELF),$(files))) $(filter %$(EXT_OBJ) %$(EXT_ELF),$(files)) 520 DASM = $(file $(removesuffix $(NAME)).dasm) 521 522 if $(filter %$(EXT_LIB), $(LIBS)) 523 eprintln($""!!! WARNING: the LIBS variable should contain libraries _without_ extensions."") 524 LIBS = $(replacesuffixes $(EXT_LIB), $"$(EMPTY)", $(LIBS)) 525 export 526 527 if $(not $(and $(defined TOOL), $(TOOL))) 528 FILTERED_LFILES = $(filter-out $"$(EMPTY)",$(LIBS)) 529 LFILES = $(file $(addprefix $(LIBDIR)$(DIRSEP), $(addsuffix $(EXT_LIB), $(completeLibrarySuffix $(config), $(FILTERED_LFILES))))) 530 LFILES += $(file $(addsuffix $(EXT_LIB), $(completeLibrarySuffix $(config), $(replacesuffixes $(EXT_LIB), $"$(EMPTY)", $(LIBFILES))))) 531 LFILES += $(file $(addsuffix $(EXT_LIB), $(completeLibrarySuffix $(config), $(replacesuffixes $(EXT_LIB), $"$(EMPTY)", $(LIBFILES))))) 532 LFILES += $(file $(addsuffix $(EXT_LIB), $(completeLibrarySuffix $(config), $(replacesuffixes $(EXT_LIB), $"$(EMPTY)", $(LIBFILES))))) 533 534 if $(defined CRT_0_O) 535 LFILES += $(file $(addprefix $(LIBDIR)$(DIRSEP), $(addsuffix $(EXT_OBJ), $(completeLibrarySuffix $(config), $(removesuffix $(CRT_0_O)))))) 536 export 537 538 MAPFILE = $(config.getMapfilePath $(name)) 539 export MAPFILE 540 541 LDSCRIPT = $(PreProcess $(config), $(LDSCRIPT_TEMPLATE), $(config.getLdscriptPath $(name))) 542 export 543 544 $(LDSCRIPT): $(IMAGE_DIR) 545 546 if $(FEEDBACK_1ST_STAGE) 547 $(FEEDBACK_FILE): $(LDSCRIPT) 548 else 549 $(NAME): $(LDSCRIPT) :effects: $(MAPFILE) 550 551 else 552 LFILES = 553 554 $(NAME): $(IMAGE_DIR) 555 export 556 557 if $(equal $(LDRESP),$(EMPTY)) 558 $(NAME): $(OFILES) $(LFILES) :effects: $(DASM) 559 $(LD) $(LDOUT)$(absname $@) $(LDFLAGS) $^ 560 $(if $(DISAS), $(DISAS) -o$(absname $(DASM)) $(absname $@)) 561 562 if $(FEEDBACK_1ST_STAGE) 563 eprintln(feed back is not supported.) 564 else 565 if $(FEEDBACK_1ST_STAGE) 566 $(FEEDBACK_FILE): $(OFILES) $(LFILES) 567 echo $(absname $^) > $@.res 568 $(LD) $(LDOUT)$(absname $(NAME)) $(LDFLAGS) $(LDRESP) $(absname $@.res) 569 grep -v $"^;.+Last Updated:" $@.tmp > $@ 570 else 571 # FEEDBACK_1ST_STAGE �ł͎g�p���Ȃ����[���B 572 $(NAME): $(OFILES) $(LFILES) :effects: $(DASM) 573 echo $(absname $^) > $@.res 574 $(LD) $(LDOUT)$(absname $@) $(LDFLAGS) $(LDRESP) $(absname $@.res) 575 $(if $(DISAS), $(DISAS) -o$(absname $(DASM)) $(absname $@)) 576 577 $(NAME): $(nth 0, $(LD)) 578 579 clean: 580 rm -rf $(IMAGE_DIR) $(SUBDIR_IMAGES) 581 582 if $(FEEDBACK_1ST_STAGE) 583 return $(FEEDBACK_FILE) 584 else 585 return $(NAME) 586 587public.ProgramELF(config, name, files) = 588 EXT_EXE = $(EXT_ELF) 589 return $(Program $(config), $(name), $(files)) 590 591public.Tool(config, name, files) = 592 TOOL = true 593 return $(Program $(config), $(name), $(files)) 594 595public.InstallTool(files) = 596 install_files = 597 export install_files 598 foreach(filename, $(files)) 599 install_file = $(file $(ROOT_COMMANDS)$(DIRSEP)$(basename $(filename))) 600 $(install_file): $(filename) 601 cp -f $< $@ 602 install_files += $(install_file) 603 return $(install_files) 604 605public.GetMakeromUserVariables()= 606 if $(not $(defined ROMFS_ROOT)) 607 ROMFS_ROOT = 608 export 609 610 if $(not $(defined TITLE)) 611 TITLE = CtrApp 612 export 613 614 FLAGS = 615 616 FLAGS += -DROMFS_ROOT=$(ROMFS_ROOT) 617 FLAGS += -DTITLE=$(TITLE) 618 return $(FLAGS) 619 620public.GetBannerFile(config) = 621 BannerFile = $(config.getDefaultBannerFile) 622 if $(defined CTR_BANNER_SPEC) 623 base = $(removesuffix $(CTR_BANNER_SPEC)) 624 BannerFile = $(addprefix $(config.getObjectDirectory)$(DIRSEP), $(addsuffixes $(EXT_BANNER), $(base))) 625 export 626 else 627 if $(defined CTR_BANNER) 628 BannerFile = $(CTR_BANNER) 629 export 630 elseif $(and $(defined CTR_NO_BANNER), $(equal $(CTR_NO_BANNER), true)) 631 BannerFile = 632 export 633 export 634 return $(BannerFile) 635 636public.GetIconFile(config) = 637 IconFile = $(config.getDefaultIconFile) 638 if $(defined CTR_BANNER_SPEC) 639 base = $(removesuffix $(CTR_BANNER_SPEC)) 640 IconFile = $(addprefix $(config.getObjectDirectory)$(DIRSEP), $(addsuffixes $(EXT_ICON), $(base))) 641 export 642 else 643 if $(defined CTR_ICON) 644 IconFile = $(CTR_ICON) 645 export 646 elseif $(and $(defined CTR_NO_BANNER), $(equal $(CTR_NO_BANNER), true)) 647 IconFile = 648 export 649 export 650 return $(IconFile) 651 652public.GetMakeromBannerOptions(config) = 653 if $(defined CTR_BANNER_SPEC) 654 if $(or $(defined CTR_BANNER), $(defined CTR_ICON)) 655 eprintln($"CTR_BANNER CTR_ICON �� CTR_BANNER_SPEC �͓����Ɏg�p�ł��܂���") 656 exit(1) 657 658 options = 659 BannerFile = $(GetBannerFile $(config)) 660 IconFile = $(GetIconFile $(config)) 661 if $(not $(equal $(BannerFile.length), 0)) 662 options += -banner $(BannerFile) 663 export 664 665 if $(not $(equal $(IconFile.length), 0)) 666 options += -icon $(IconFile) 667 export 668 669 return $(options) 670 671public.UserProcess(config, name, files) = 672 BUILD_APPLICATION = true 673 674 if $(not $(defined LDSCRIPT_TEMPLATE)) 675 LDSCRIPT_TEMPLATE = $(config.getLdscriptTemplatePath) 676 export 677 678 if $(not $(defined CRT_0_O)) 679 CRT_0_O = crt0.o 680 export 681 682 ELFFile = $(ProgramELF $(config), $(name), $(files)) 683 CCIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CCI), $(ELFFile)) 684 CIPFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIP), $(ELFFile)) 685 CSUFile = $(replacesuffixes $(EXT_ELF), $(EXT_CSU), $(ELFFile)) 686 CXIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CXI), $(ELFFile)) 687 CIAFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIA), $(ELFFile)) 688 CDIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CDI), $(ELFFile)) 689 OLSFile = $(replacesuffixes $(EXT_ELF), $(EXT_OLS), $(ELFFile)) 690 691 MAKEROM_INPUTS[] = $(EMPTY) 692 MAKECIA_INPUTS[] = $(EMPTY) 693 694 if $(not $(defined DESCRIPTOR)) 695 DESCRIPTOR = $(config.getDefaultDescriptorPath) 696 export 697 698 if $(not $(defined ROMFS_DEPENDENCIES)) 699 if $(defined ROMFS_ROOT) 700 ROMFS_DEPENDENCIES = $(ls -R, $(dir $(ROMFS_ROOT))) 701 export 702 else 703 ROMFS_DEPENDENCIES = 704 export 705 export 706 707 708 if $(not $(defined ROM_SPEC_FILE)) 709 ROM_SPEC_FILE = $(config.getDefaultRomSpecFile) 710 export 711 712 if $(not $(defined CTR_APPTYPE)) 713 CTR_APPTYPE = $(APPTYPE_CARD) 714 export 715 716 if $(and $(defined CTR_NANDAPP),$(equal $(CTR_NANDAPP),true)) 717 CTR_APPTYPE = $(APPTYPE_NAND) 718 export 719 720 if $(or \ 721 $(and $(defined CTR_REMOVE_AMCORE), $(CTR_REMOVE_AMCORE)), \ 722 $(and $(defined CTR_MAKESIMPLECIA), $(CTR_MAKESIMPLECIA)) \ 723 ) 724 MAKECIA = $(ROOT_COMMANDS)$(DIRSEP)ctr_makesimplecia32.exe 725 export 726 727 DEFAULT_ROM_SPEC_FILE = $(config.getDefaultRomSpecFile) 728 729 # �}�j���A���p 730 if $(defined MANUAL_DIR) 731 MANUAL_CFA = $(nth 0,$(FileArchive $(MANUAL_DIR), $(ROOT_RESOURCES)/specfiles/Manual.rsf)) 732 733 MAKEROMFLAGS += -content $(MANUAL_CFA):1 734 MAKEROM_INPUTS += $(MANUAL_CFA) 735 736 MAKECIAFLAGS += -i $(MANUAL_CFA):1 737 MAKECIA_INPUTS += $(MANUAL_CFA) 738 export 739 740 # �q�@�p 741 if $(defined CHILD_APPS) 742 MAKE_CIA_ARCHIVE = $(ROOT_COMMANDS)$(DIRSEP)ctr_makeciaarchive32.exe 743 cia_archive_root = $(TARGET.getObjectDirectory)/cia_archive_root 744 child_cfa = $(TARGET.getObjectDirectory)/childroot.cfa 745 $(child_cfa): $(CHILD_APPS) $(makeDirectory $(cia_archive_root)) $(MAKE_CIA_ARCHIVE) :effects: $(cia_archive_root) 746 $(MAKE_CIA_ARCHIVE) -cia $(CHILD_APPS) -rsf $(ROOT_RESOURCES)/specfiles/Child.rsf -o $@ --romfs-root $(cia_archive_root) 747 748 MAKEROMFLAGS += -content $(child_cfa):2 749 MAKEROM_INPUTS += $(child_cfa) 750 751 MAKECIAFLAGS += -i $(child_cfa):2 752 MAKECIA_INPUTS += $(child_cfa) 753 754 export 755 756 # �A�b�v�f�[�g�p�[�e�B�V�����p 757 if $(defined CTR_UPDATE_ARCHIVE) 758 MAKEROMFLAGS += -content $(CTR_UPDATE_ARCHIVE):3 759 MAKEROM_INPUTS += $(CTR_UPDATE_ARCHIVE) 760 761 MAKECIAFLAGS += -i $(CTR_UPDATE_ARCHIVE):3 762 MAKECIA_INPUTS += $(CTR_UPDATE_ARCHIVE) 763 export 764 765 # �ˑ��v���Z�X�̃o���G�[�V���������w�� 766 if $(defined CTR_DEPENDENCY_VARIATION) 767 MAKEROMFLAGS += -dv $(CTR_DEPENDENCY_VARIATION) 768 export 769 770 MAKEROMFLAGS += -desc $(DESCRIPTOR) -rsf $(ROM_SPEC_FILE) 771 MAKEROMFLAGS += $(GetMakeromUserVariables) 772 MAKEROMFLAGS += $(GetMakeromBannerOptions $(config)) 773 MAKEROM_INPUTS += $(DESCRIPTOR) $(ROM_SPEC_FILE) $(DEFAULT_ROM_SPEC_FILE) $(ROMFS_DEPENDENCIES) $(GetBannerFile $(config)) $(GetIconFile $(config)) 774 775 $(CCIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 776 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -f card 777 778 $(CIPFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 779 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -align 4 -cip 780 781 $(CSUFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 782 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -f card 783 784 $(CXIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 785 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) 786 787 $(CDIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 788 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -cdi 789 790 $(CIAFile): $(CXIFile) $(MAKECIA) $(MAKECIA_INPUTS) :value: $(getMtimeIfLarge $(CXIFile)) 791 $(MAKECIA) -i $< -o $@ $(MAKECIAFLAGS) 792 if $(and $(defined CTR_MAKEOLSZIP), $(CTR_MAKEOLSZIP)) 793 $(MAKEOLS) -i $< -o $@ $(MAKECIAFLAGS) 794 795 # �^�[�Q�b�g�ɂȂ�t�@�C�������� 796 CARD_IMAGE_FILE = $(CCIFile) 797 if $(defined IS_CIP) 798 CARD_IMAGE_FILE = $(CIPFile) 799 export CARD_IMAGE_FILE 800 801 if $(defined MAKECSU) 802 CARD_IMAGE_FILE = $(CSUFile) 803 export CARD_IMAGE_FILE 804 805 # NAND �A�v���̏ꍇ�� CIA ������ 806 NAND_IMAGE_FILE = $(CIAFile) 807 808 # �A�v���P�[�V�����^�C�v�ɂ���ă^�[�Q�b�g������ 809 switch $(CTR_APPTYPE) 810 case $(APPTYPE_CARD) 811 TARGET_FILES = $(CARD_IMAGE_FILE) 812 if $(and $(defined CTR_MAKE_DEVELOPMENT_IMAGE), $(CTR_MAKE_DEVELOPMENT_IMAGE)) 813 TARGET_FILES += $(CDIFile) 814 export 815 export 816 case $(APPTYPE_NAND) 817 TARGET_FILES = $(NAND_IMAGE_FILE) 818 export 819 case $(APPTYPE_BOTH) 820 TARGET_FILES = $(CARD_IMAGE_FILE) $(NAND_IMAGE_FILE) 821 export 822 823 # CTR_MAKE_DEVELOPMENT_IMAGE ����`����Ă���ꍇ�̂� cdi ���쐬���� 824 if $(and $(defined CTR_MAKE_DEVELOPMENT_IMAGE), $(CTR_MAKE_DEVELOPMENT_IMAGE)) 825 TARGET_FILES += $(CDIFile) 826 export 827 828 # �e�X�g�p 829 export LIST_PREFIX 830 if $(and $(defined BUILD_TESTS),$(equal $(BUILD_TESTS),true)) 831 LIST_PREFIX = $(removesuffix $(basename $(CCIFile)))_ 832 else 833 LIST_PREFIX = $(EMPTY) 834 835 # �c���[���O������Q�Ƃ��Ă���Ȃ�C���X�g�[�����邩�f 836 INSTALL_TARGET_IMAGEDIR = $(config.getImageDirectory true) 837 INSTALL_TARGETS = 838 if $(or $(and $(config.isSdkTool),\ 839 $(equal $(filter full,$(BUILDTYPES)),full)),\ 840 $(and $(not $(config.isSdkTool)),\ 841 $(not $(equal $(INSTALL_TARGET_IMAGEDIR), $(dirname $(CARD_IMAGE_FILE)))))) 842 843 foreach(TARGET, $(TARGET_FILES)) 844 INSTALL_TARGET = $(INSTALL_TARGET_IMAGEDIR)/$(basename $(TARGET)) 845 $(INSTALL_TARGET): $(INSTALL_TARGET_IMAGEDIR) 846 $(INSTALL_TARGET): $(TARGET) 847 cp -f $< $@ 848 INSTALL_TARGETS += $(INSTALL_TARGET) 849 export INSTALL_TARGETS 850 export INSTALL_TARGETS 851 852 return $(TARGET_FILES) $(INSTALL_TARGETS) 853 854public.UserProcessTest(config, files) = 855 name = $(removesuffix $(basename $(nth 0,$(files)))) 856 857 BUILD_TESTS = true 858 EXEFile = $(UserProcess $(config), $(name), $(files)) 859 860 return $(EXEFile) 861 862public.Title(config, name, contents) = 863 ELFFile = $(config.getBinaryPath $(name), $(EXT_ELF)) 864 CCIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CCI), $(ELFFile)) 865 CXIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CXI), $(ELFFile)) 866 CIAFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIA), $(ELFFile)) 867 CDIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CDI), $(ELFFile)) 868 869 CARD_IMAGE_FILE = $(CCIFile) 870 NAND_IMAGE_FILE = $(CIAFile) 871 872 depends[] = 873 874 if $(and $(defined CTR_NANDAPP),$(equal $(CTR_NANDAPP),true)) 875 CTR_APPTYPE = $(APPTYPE_NAND) 876 export 877 878 switch $(CTR_APPTYPE) 879 case $(APPTYPE_CARD) 880 TARGET_FILES = $(CARD_IMAGE_FILE) 881 export 882 case $(APPTYPE_NAND) 883 TARGET_FILES = $(NAND_IMAGE_FILE) 884 export 885 case $(APPTYPE_BOTH) 886 TARGET_FILES = $(CARD_IMAGE_FILE) $(NAND_IMAGE_FILE) 887 export 888 889 MAKEROMFLAGS += -rsf $(ROM_SPEC_FILE) 890 depends += $(ROM_SPEC_FILE) 891 892 contentfiles[] = 893 894 foreach(CONTENTSTR, $(contents)) 895 contentseq = $(split >,$(CONTENTSTR)) 896 897 index = $(nth 0,$(contentseq)) 898 contentfile = $(nth 1,$(contentseq)) 899 900 contentfiles += $(contentfile) 901 902 MAKEROMFLAGS += -content $(contentfile):$(index) 903 MAKECIAFLAGS += -i $(contentfile):$(index) 904 $(CCIFile): :value: $(getMtimeIfLarge $(contentfile)) 905 $(CIAFile): :value: $(getMtimeIfLarge $(contentfile)) 906 export 907 908 depends += $(contentfiles) 909 910 # cfa �݂̂̋��L�f�[�^�^�C�g���̏ꍇ�ɂ̓��W���[�o�[�W������ʓr�ݒ肷��悤�ɂ��� 911 if $(not $(defined SHAREDDATATITLE_MAJOR_VERSION)) 912 SHAREDDATATITLE_MAJOR_VERSION = 0 913 export 914 915 if $(not $(equal $(suffix $(nth 0,$(contentfiles))), $(EXT_CXI))) 916 MAKECIAFLAGS += -major $(SHAREDDATATITLE_MAJOR_VERSION) 917 export 918 919 $(CCIFile): $(makeDirectory $(dirname $(CCIFile))) 920 $(CCIFile): $(MAKEROM) build-romfs $(depends) 921 $(MAKEROM) -o $@ $(MAKEROMFLAGS) -f card 922 923 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 924 $(CIAFile): $(MAKECIA) $(depends) 925 $(MAKECIA) -o $@ $(MAKECIAFLAGS) 926 927 return $(TARGET_FILES) 928 929public.FileArchive(srcdir, rsf) = 930 name = $(basename $(srcdir)) 931 SOURCES_BASE_ROOT = $(dirname $(srcdir)) 932 CFAFile = $(makeDirectory $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_OBJECTS)$(DIRSEP)$(getModuleSubDirectory))$(DIRSEP)$(name)$(EXT_CFA) 933 934 if $(not $(defined ARCHIVE_DEPENDENCIES)) 935 ARCHIVE_DEPENDENCIES = $(ls -R, $(dir $(srcdir))) 936 export 937 ARCHIVE_DEPENDENCIES += $(rsf) 938 939 $(CFAFile): $(srcdir) 940 $(CFAFile): $(makeDirectory $(dirname $(CFAFile))) 941 $(CFAFile): $(srcdir) $(MAKEROM) $(rsf) $(ARCHIVE_DEPENDENCIES) 942 $(MAKEROM) -o $@ -DROMFS_ROOT=$(srcdir) $(MAKEROMFLAGS) -f data -rsf $(rsf) 943 944 return $(CFAFile) 945 946public.Banner(config, spec) = 947 BannerFile = $(GetBannerFile $(config)) 948 IconFile = $(GetIconFile $(config)) 949 $(BannerFile) $(IconFile): $(spec) $(MAKEBANNER) 950 mkdir -p $(dirname $(BannerFile)) 951 $(MAKEBANNER) $< $(BannerFile) $(IconFile) 952 953 return $(BannerFile) 954 955public.MakeDataCia(source, titleid) = 956 name = $(rootname $(basename $(source))) 957 CIAFile = $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_IMAGES)$(DIRSEP)$(getModuleSubDirectory)$(DIRSEP)$(name)$(EXT_CIA) 958 959 TARGET_FILES = $(CIAFile) 960 961 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 962 $(CIAFile): $(source) $(MAKECIA) 963 $(MAKECIA) -a $(source) -o $(CIAFile) -p $(titleid) -padding 964 965 return $(TARGET_FILES) 966 967public.MakeSrlCia(srlfile) = 968 name = $(rootname $(basename $(srlfile))) 969 CIAFile = $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_IMAGES)$(DIRSEP)$(getModuleSubDirectory)$(DIRSEP)$(name)$(EXT_CIA) 970 971 TARGET_FILES = $(CIAFile) 972 973 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 974 $(CIAFile): $(srlfile) $(MAKECIA) 975 $(MAKECIA) -s $< -o $@ -padding 976 977 return $(TARGET_FILES) 978 979public.InstallFiles(source_root, sources, destination) = 980 destination = $(absname $(destination)) 981 source_root = $(absname $(source_root)) 982 sources = $(removeprefix $(source_root)$(DIRSEP), $(sources)) 983 984 dfiles = $(addprefix $(destination)$(DIRSEP), $(sources)) 985 986 .SUBDIRS: $(source_root) 987 foreach(source, $(sources)) 988 dfile = $(addprefix $(destination)$(DIRSEP), $(source)) 989 $(dfile): $(source) 990 mkdir -p $(dirname $(dfile)) 991 ln-or-cp $(source) $(dfile) 992 993 return $(dfiles) 994 995public.Filelist(destfile, filelist) = 996 $(destfile): $(dirname $(destfile)) :value: $(filelist) 997 section 998 f = $(fopen $(@), w) 999 foreach(filename, $(filelist)) 1000 fprintln($(f), $(filename)) 1001 close($(f)) 1002 return $(destfile) 1003 1004public.ParseDependProcess(config, process, depends) = 1005 RESULT_PROCESSES = 1006 export RESULT_PROCESSES 1007 foreach(DEPEND, $(depends)) 1008 if $(findstring $(DEPEND), $">") 1009 DEPEND_PAIR = $(split >, $(DEPEND)) 1010 PROCESS_KEY = $(nth 0, $(DEPEND_PAIR)) 1011 if $(equal $(process), $(PROCESS_KEY)) 1012 RESULT_PROCESSES += $(split $",", $(nth 1, $(DEPEND_PAIR))) 1013 else 1014 RESULT_PROCESSES += $(DEPEND) 1015 1016 return $(RESULT_PROCESSES) 1017 1018# �S�Ẵ\�[�X�t�@�C���̃R���p�C���O�Ɏ��s����^�[�Q�b�g 1019public.RequireSetup(targets) = 1020 .PHONY/$(ROOT)/build-setup: $(targets) 1021 1022public.DefineDefaultRules() = 1023 1024 .DEFAULT: build 1025 1026 all: build tests 1027 1028 run: run-scripts 1029 1030 %.log: run-scripts 1031 1032 if $(not $(SKIP_BUILD)) 1033 dotests: tests 1034 dotests-emumem: tests 1035 dotests-proclist: tests 1036 dotests-arm9: tests 1037 dotests-spi: tests 1038 dotests-import: tests 1039 run-emumem: build 1040 run-spi: build 1041 1042 dotests run: $(RUNNER) :effects: $(RUNNER_LOCK) 1043 $(RunDependMCR $@) 1044 1045public.ShowConfig() = 1046 NOT_FOUND = $"������܂���" 1047 println($"���ϐ�/�����ݒ�--------------------------------------") 1048 println($" HORIZON_ROOT: " $(absname $(HORIZON_ROOT))) 1049 println($" HORIZON_ADDINS_ROOT: " $(HORIZON_ADDINS_ROOT)) 1050 println($" HORIZON_TARGETS: " $(if $(defined-env HORIZON_TARGETS), $`(getenv HORIZON_TARGETS))) 1051 println($" ARMLMD_LICENSE_FILE: " $(if $(defined-env ARMLMD_LICENSE_FILE), $`(getenv ARMLMD_LICENSE_FILE))) 1052 println($" $(RVCT_ENV_PREFIX)BIN: " $(if $(defined-env $(RVCT_ENV_PREFIX)BIN), $`(getenv $(RVCT_ENV_PREFIX)BIN))) 1053 if $(defined-env $(RVCT_ENV_PREFIX)BIN) 1054 ARMCC_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armcc.exe" --help)), $" Usage:.*", $(EMPTY)) 1055 ARMASM_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armasm.exe" --help)), $" Usage:.*", $(EMPTY)) 1056 ARMLINK_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armlink.exe" --help)), $" Usage:.*", $(EMPTY)) 1057 ARMAR_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armar.exe" --help)), $" - archive.*", $(EMPTY)) 1058 FROMELF_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)fromelf.exe" --help)), $"ARM image.*", $(EMPTY)) 1059 1060 println($" - $(ARMCC_VERSION)") 1061 println($" - $(ARMASM_VERSION)") 1062 println($" - $(ARMLINK_VERSION)") 1063 println($" - $(ARMAR_VERSION)") 1064 println($" - $(FROMELF_VERSION)") 1065 println($" $(RVCT_ENV_PREFIX)INC: " $(if $(defined-env $(RVCT_ENV_PREFIX)INC), $`(getenv $(RVCT_ENV_PREFIX)INC))) 1066 println($" $(RVCT_ENV_PREFIX)LIB: " $(if $(defined-env $(RVCT_ENV_PREFIX)LIB), $`(getenv $(RVCT_ENV_PREFIX)LIB))) 1067 1068 println($" ") 1069 println($"�v���W�F�N�g�ݒ�---------------------------------------") 1070 println($" ROOT: " $(absname $(ROOT))) 1071 println($" INSTALL_ROOT: " $(absname $(INSTALL_ROOT))) 1072 println($" INSTALL_ROOT_IMAGES: " $(absname $(INSTALL_ROOT_IMAGES))) 1073 println($" INSTALL_ROOT_LIBRARIES: " $(absname $(INSTALL_ROOT_LIBRARIES))) 1074 println($" ") 1075 println($"�v���O����---------------------------------------------") 1076 1077 GCC_VERSION = 1078 if $(GCC) 1079 GCC_VERSION = $`(gsub $(string $(shell $(GCC) --version)), $" Copyright.*", $(EMPTY)) 1080 export 1081 1082 #OMAKE_VERSION_ = $`(gsub $(string $(shell omake --version)), $":.*", $(EMPTY)) 1083 println($" GCC: " $(if $(equal $(GCC), $(EMPTY)), $(NOT_FOUND), $`(GCC) [$`(GCC_VERSION)])) 1084 println($" RUBY: " $(if $(equal $(RUBY), $(EMPTY)), $(NOT_FOUND), $`(RUBY) [$`(RUBY_VERSION)])) 1085 println($" 7ZIP: " $(if $(equal $(7ZIP), $(EMPTY)), $(NOT_FOUND), $`(7ZIP))) 1086 println($" UNZIP: " $(if $(equal $(UNZIP), $(EMPTY)), $(NOT_FOUND), $`(UNZIP))) 1087 println($" ") 1088 1089.PHONY: show-config 1090show-config: 1091 $(ShowConfig) 1092 1093# �l�̐ݒ����荞�� 1094if $(test -f $(ROOT_OMAKE)/localdefs.om) 1095 include $(ROOT_OMAKE)/localdefs 1096 export 1097