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