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-11-10#$ 15# $Rev: 30830 $ 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), $(absname $(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 $(or $(and $(defined CTR_NO_BANNER_ICON), $(equal $(CTR_NO_BANNER_ICON), true)), \ 631 $(and $(defined CTR_NO_BANNER), $(equal $(CTR_NO_BANNER), true)) ) 632 BannerFile = 633 export 634 export 635 return $(BannerFile) 636 637public.GetIconFile(config) = 638 IconFile = $(config.getDefaultIconFile) 639 if $(defined CTR_BANNER_SPEC) 640 base = $(removesuffix $(CTR_BANNER_SPEC)) 641 IconFile = $(addprefix $(config.getObjectDirectory)$(DIRSEP), $(addsuffixes $(EXT_ICON), $(base))) 642 export 643 else 644 if $(defined CTR_ICON) 645 IconFile = $(CTR_ICON) 646 export 647 elseif $(and $(defined CTR_NO_BANNER_ICON), $(equal $(CTR_NO_BANNER_ICON), true)) 648 IconFile = 649 export 650 export 651 return $(IconFile) 652 653public.GetMakeromBannerOptions(config) = 654 if $(defined CTR_BANNER_SPEC) 655 if $(or $(defined CTR_BANNER), $(defined CTR_ICON)) 656 eprintln($"CTR_BANNER CTR_ICON �� CTR_BANNER_SPEC �͓����Ɏg�p�ł��܂���") 657 exit(1) 658 659 options = 660 BannerFile = $(GetBannerFile $(config)) 661 IconFile = $(GetIconFile $(config)) 662 if $(not $(equal $(BannerFile.length), 0)) 663 options += -banner $(BannerFile) 664 export 665 666 if $(not $(equal $(IconFile.length), 0)) 667 options += -icon $(IconFile) 668 export 669 670 return $(options) 671 672public.UserProcess(config, name, files) = 673 BUILD_APPLICATION = true 674 675 if $(not $(defined LDSCRIPT_TEMPLATE)) 676 LDSCRIPT_TEMPLATE = $(config.getLdscriptTemplatePath) 677 export 678 679 if $(not $(defined CRT_0_O)) 680 CRT_0_O = crt0.o 681 export 682 683 ELFFile = $(ProgramELF $(config), $(name), $(files)) 684 CCIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CCI), $(ELFFile)) 685 CIPFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIP), $(ELFFile)) 686 CSUFile = $(replacesuffixes $(EXT_ELF), $(EXT_CSU), $(ELFFile)) 687 CXIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CXI), $(ELFFile)) 688 CIAFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIA), $(ELFFile)) 689 CDIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CDI), $(ELFFile)) 690 OLSFile = $(replacesuffixes $(EXT_ELF), $(EXT_OLS), $(ELFFile)) 691 692 MAKEROM_INPUTS[] = $(EMPTY) 693 MAKECIA_INPUTS[] = $(EMPTY) 694 695 if $(not $(defined DESCRIPTOR)) 696 DESCRIPTOR = $(config.getDefaultDescriptorPath) 697 export 698 699 if $(not $(defined ROMFS_DEPENDENCIES)) 700 if $(defined ROMFS_ROOT) 701 ROMFS_DEPENDENCIES = $(ls -R, $(dir $(ROMFS_ROOT))) 702 export 703 else 704 ROMFS_DEPENDENCIES = 705 export 706 export 707 708 709 if $(not $(defined ROM_SPEC_FILE)) 710 ROM_SPEC_FILE = $(config.getDefaultRomSpecFile) 711 export 712 713 if $(not $(defined CTR_APPTYPE)) 714 CTR_APPTYPE = $(APPTYPE_CARD) 715 export 716 717 if $(and $(defined CTR_NANDAPP),$(equal $(CTR_NANDAPP),true)) 718 CTR_APPTYPE = $(APPTYPE_NAND) 719 export 720 721 if $(or \ 722 $(and $(defined CTR_REMOVE_AMCORE), $(CTR_REMOVE_AMCORE)), \ 723 $(and $(defined CTR_MAKESIMPLECIA), $(CTR_MAKESIMPLECIA)) \ 724 ) 725 MAKECIA = $(ROOT_COMMANDS)$(DIRSEP)ctr_makesimplecia32.exe 726 export 727 728 DEFAULT_ROM_SPEC_FILE = $(config.getDefaultRomSpecFile) 729 730 # �}�j���A���p 731 if $(defined MANUAL_DIR) 732 MANUAL_CFA = $(nth 0,$(FileArchive $(MANUAL_DIR), $(ROOT_RESOURCES)/specfiles/Manual.rsf)) 733 734 MAKEROMFLAGS += -content $(MANUAL_CFA):1 735 MAKEROM_INPUTS += $(MANUAL_CFA) 736 737 MAKECIAFLAGS += -i $(MANUAL_CFA):1 738 MAKECIA_INPUTS += $(MANUAL_CFA) 739 export 740 741 # �q�@�p 742 if $(defined CHILD_APPS) 743 MAKE_CIA_ARCHIVE = $(ROOT_COMMANDS)$(DIRSEP)ctr_makeciaarchive32.exe 744 cia_archive_root = $(TARGET.getObjectDirectory)/cia_archive_root 745 child_cfa = $(TARGET.getObjectDirectory)/childroot.cfa 746 $(child_cfa): $(CHILD_APPS) $(makeDirectory $(cia_archive_root)) $(MAKE_CIA_ARCHIVE) :effects: $(cia_archive_root) 747 $(MAKE_CIA_ARCHIVE) -cia $(CHILD_APPS) -rsf $(ROOT_RESOURCES)/specfiles/Child.rsf -o $@ --romfs-root $(cia_archive_root) 748 749 MAKEROMFLAGS += -content $(child_cfa):2 750 MAKEROM_INPUTS += $(child_cfa) 751 752 MAKECIAFLAGS += -i $(child_cfa):2 753 MAKECIA_INPUTS += $(child_cfa) 754 755 export 756 757 # �A�b�v�f�[�g�p�[�e�B�V�����p 758 if $(defined CTR_UPDATE_ARCHIVE) 759 MAKEROMFLAGS += -content $(CTR_UPDATE_ARCHIVE):3 760 MAKEROM_INPUTS += $(CTR_UPDATE_ARCHIVE) 761 762 MAKECIAFLAGS += -i $(CTR_UPDATE_ARCHIVE):3 763 MAKECIA_INPUTS += $(CTR_UPDATE_ARCHIVE) 764 export 765 766 # �ˑ��v���Z�X�̃o���G�[�V���������w�� 767 if $(defined CTR_DEPENDENCY_VARIATION) 768 MAKEROMFLAGS += -dv $(CTR_DEPENDENCY_VARIATION) 769 export 770 771 # 1st stage updater �p 772 if $(and $(defined CTR_BUILD_1ST_STAGE_UPDATER), $(CTR_BUILD_1ST_STAGE_UPDATER)) 773 MAKEROMFLAGS += -temp 774 export 775 776 MAKEROMFLAGS += -desc $(DESCRIPTOR) -rsf $(ROM_SPEC_FILE) 777 MAKEROMFLAGS += $(GetMakeromUserVariables) 778 MAKEROMFLAGS += $(GetMakeromBannerOptions $(config)) 779 MAKEROM_INPUTS += $(DESCRIPTOR) $(ROM_SPEC_FILE) $(DEFAULT_ROM_SPEC_FILE) $(ROMFS_DEPENDENCIES) $(GetBannerFile $(config)) $(GetIconFile $(config)) 780 781 $(CCIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 782 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -f card 783 784 $(CIPFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 785 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -align 4 -cip 786 787 $(CSUFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 788 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -f card 789 790 $(CXIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 791 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) 792 793 $(CDIFile): $(ELFFile) $(MAKEROM) $(MAKEROM_INPUTS) build-romfs :value: $(getMtimeIfLarge $(ELFFile)) 794 $(MAKEROM) -o $@ $< $(MAKEROMFLAGS) -cdi 795 796 $(CIAFile): $(CXIFile) $(MAKECIA) $(MAKECIA_INPUTS) :value: $(getMtimeIfLarge $(CXIFile)) 797 $(MAKECIA) -i $< -o $@ $(MAKECIAFLAGS) 798 if $(and $(defined CTR_MAKEOLSZIP), $(CTR_MAKEOLSZIP)) 799 $(MAKEOLS) -i $< -o $@ $(MAKECIAFLAGS) 800 801 # �^�[�Q�b�g�ɂȂ�t�@�C�������� 802 CARD_IMAGE_FILE = $(CCIFile) 803 if $(defined IS_CIP) 804 CARD_IMAGE_FILE = $(CIPFile) 805 export CARD_IMAGE_FILE 806 807 if $(defined MAKECSU) 808 CARD_IMAGE_FILE = $(CSUFile) 809 export CARD_IMAGE_FILE 810 811 # NAND �A�v���̏ꍇ�� CIA ������ 812 NAND_IMAGE_FILE = $(CIAFile) 813 814 # �A�v���P�[�V�����^�C�v�ɂ���ă^�[�Q�b�g������ 815 switch $(CTR_APPTYPE) 816 case $(APPTYPE_CARD) 817 TARGET_FILES = $(CARD_IMAGE_FILE) 818 if $(and $(defined CTR_MAKE_DEVELOPMENT_IMAGE), $(CTR_MAKE_DEVELOPMENT_IMAGE)) 819 TARGET_FILES += $(CDIFile) 820 export 821 export 822 case $(APPTYPE_NAND) 823 TARGET_FILES = $(NAND_IMAGE_FILE) 824 export 825 case $(APPTYPE_BOTH) 826 TARGET_FILES = $(CARD_IMAGE_FILE) $(NAND_IMAGE_FILE) 827 export 828 829 # CTR_MAKE_DEVELOPMENT_IMAGE ����`����Ă���ꍇ�̂� cdi ���쐬���� 830 if $(and $(defined CTR_MAKE_DEVELOPMENT_IMAGE), $(CTR_MAKE_DEVELOPMENT_IMAGE)) 831 TARGET_FILES += $(CDIFile) 832 export 833 834 # �e�X�g�p 835 export LIST_PREFIX 836 if $(and $(defined BUILD_TESTS),$(equal $(BUILD_TESTS),true)) 837 LIST_PREFIX = $(removesuffix $(basename $(CCIFile)))_ 838 else 839 LIST_PREFIX = $(EMPTY) 840 841 # �c���[���O������Q�Ƃ��Ă���Ȃ�C���X�g�[�����邩�f 842 INSTALL_TARGET_IMAGEDIR = $(config.getImageDirectory true) 843 INSTALL_TARGETS = 844 if $(or $(and $(config.isSdkTool),\ 845 $(equal $(filter full,$(BUILDTYPES)),full)),\ 846 $(and $(not $(config.isSdkTool)),\ 847 $(not $(equal $(INSTALL_TARGET_IMAGEDIR), $(dirname $(CARD_IMAGE_FILE)))))) 848 849 foreach(TARGET, $(TARGET_FILES)) 850 INSTALL_TARGET = $(INSTALL_TARGET_IMAGEDIR)/$(basename $(TARGET)) 851 $(INSTALL_TARGET): $(INSTALL_TARGET_IMAGEDIR) 852 $(INSTALL_TARGET): $(TARGET) 853 cp -f $< $@ 854 INSTALL_TARGETS += $(INSTALL_TARGET) 855 export INSTALL_TARGETS 856 export INSTALL_TARGETS 857 858 return $(TARGET_FILES) $(INSTALL_TARGETS) 859 860public.UserProcessTest(config, files) = 861 name = $(removesuffix $(basename $(nth 0,$(files)))) 862 863 BUILD_TESTS = true 864 EXEFile = $(UserProcess $(config), $(name), $(files)) 865 866 return $(EXEFile) 867 868public.Title(config, name, contents) = 869 ELFFile = $(config.getBinaryPath $(name), $(EXT_ELF)) 870 CCIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CCI), $(ELFFile)) 871 CXIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CXI), $(ELFFile)) 872 CIAFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIA), $(ELFFile)) 873 CDIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CDI), $(ELFFile)) 874 875 CARD_IMAGE_FILE = $(CCIFile) 876 NAND_IMAGE_FILE = $(CIAFile) 877 878 depends[] = 879 880 if $(and $(defined CTR_NANDAPP),$(equal $(CTR_NANDAPP),true)) 881 CTR_APPTYPE = $(APPTYPE_NAND) 882 export 883 884 switch $(CTR_APPTYPE) 885 case $(APPTYPE_CARD) 886 TARGET_FILES = $(CARD_IMAGE_FILE) 887 export 888 case $(APPTYPE_NAND) 889 TARGET_FILES = $(NAND_IMAGE_FILE) 890 export 891 case $(APPTYPE_BOTH) 892 TARGET_FILES = $(CARD_IMAGE_FILE) $(NAND_IMAGE_FILE) 893 export 894 895 MAKEROMFLAGS += -rsf $(ROM_SPEC_FILE) 896 depends += $(ROM_SPEC_FILE) 897 898 contentfiles[] = 899 900 foreach(CONTENTSTR, $(contents)) 901 contentseq = $(split >,$(CONTENTSTR)) 902 903 index = $(nth 0,$(contentseq)) 904 contentfile = $(nth 1,$(contentseq)) 905 906 contentfiles += $(contentfile) 907 908 MAKEROMFLAGS += -content $(contentfile):$(index) 909 MAKECIAFLAGS += -i $(contentfile):$(index) 910 $(CCIFile): :value: $(getMtimeIfLarge $(contentfile)) 911 $(CIAFile): :value: $(getMtimeIfLarge $(contentfile)) 912 export 913 914 depends += $(contentfiles) 915 916 # cfa �݂̂̋��L�f�[�^�^�C�g���̏ꍇ�ɂ̓��W���[�o�[�W������ʓr�ݒ肷��悤�ɂ��� 917 if $(not $(defined SHAREDDATATITLE_MAJOR_VERSION)) 918 SHAREDDATATITLE_MAJOR_VERSION = 0 919 export 920 921 if $(not $(equal $(suffix $(nth 0,$(contentfiles))), $(EXT_CXI))) 922 MAKECIAFLAGS += -major $(SHAREDDATATITLE_MAJOR_VERSION) 923 export 924 925 $(CCIFile): $(makeDirectory $(dirname $(CCIFile))) 926 $(CCIFile): $(MAKEROM) build-romfs $(depends) 927 $(MAKEROM) -o $@ $(MAKEROMFLAGS) -f card 928 929 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 930 $(CIAFile): $(MAKECIA) $(depends) 931 $(MAKECIA) -o $@ $(MAKECIAFLAGS) 932 933 return $(TARGET_FILES) 934 935public.FileArchive(srcdir, rsf) = 936 name = $(basename $(srcdir)) 937 SOURCES_BASE_ROOT = $(dirname $(srcdir)) 938 CFAFile = $(makeDirectory $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_OBJECTS)$(DIRSEP)$(getModuleSubDirectory))$(DIRSEP)$(name)$(EXT_CFA) 939 940 if $(not $(defined ARCHIVE_DEPENDENCIES)) 941 ARCHIVE_DEPENDENCIES = $(ls -R, $(dir $(srcdir))) 942 export 943 ARCHIVE_DEPENDENCIES += $(rsf) 944 945 $(CFAFile): $(srcdir) 946 $(CFAFile): $(makeDirectory $(dirname $(CFAFile))) 947 $(CFAFile): $(srcdir) $(MAKEROM) $(rsf) $(ARCHIVE_DEPENDENCIES) 948 $(MAKEROM) -o $@ -DROMFS_ROOT=$(srcdir) $(MAKEROMFLAGS) -f data -rsf $(rsf) 949 950 return $(CFAFile) 951 952public.Banner(config, spec) = 953 BannerFile = $(GetBannerFile $(config)) 954 IconFile = $(GetIconFile $(config)) 955 $(BannerFile) $(IconFile): $(spec) $(MAKEBANNER) 956 mkdir -p $(dirname $(BannerFile)) 957 $(MAKEBANNER) $< $(BannerFile) $(IconFile) 958 959 return $(BannerFile) 960 961public.MakeDataCia(source, titleid) = 962 name = $(rootname $(basename $(source))) 963 CIAFile = $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_IMAGES)$(DIRSEP)$(getModuleSubDirectory)$(DIRSEP)$(name)$(EXT_CIA) 964 965 TARGET_FILES = $(CIAFile) 966 967 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 968 $(CIAFile): $(source) $(MAKECIA) 969 $(MAKECIA) -a $(source) -o $(CIAFile) -p $(titleid) -padding 970 971 return $(TARGET_FILES) 972 973public.MakeSrlCia(srlfile) = 974 name = $(rootname $(basename $(srlfile))) 975 CIAFile = $(getOutputBaseDirectory)$(DIRSEP)$(SUBDIR_IMAGES)$(DIRSEP)$(getModuleSubDirectory)$(DIRSEP)$(name)$(EXT_CIA) 976 977 TARGET_FILES = $(CIAFile) 978 979 $(CIAFile): $(makeDirectory $(dirname $(CIAFile))) 980 $(CIAFile): $(srlfile) $(MAKECIA) 981 $(MAKECIA) -s $< -o $@ -padding 982 983 return $(TARGET_FILES) 984 985public.InstallFiles(source_root, sources, destination) = 986 destination = $(absname $(destination)) 987 source_root = $(absname $(source_root)) 988 sources = $(removeprefix $(source_root)$(DIRSEP), $(sources)) 989 990 dfiles = $(addprefix $(destination)$(DIRSEP), $(sources)) 991 992 .SUBDIRS: $(source_root) 993 foreach(source, $(sources)) 994 dfile = $(addprefix $(destination)$(DIRSEP), $(source)) 995 $(dfile): $(source) 996 mkdir -p $(dirname $(dfile)) 997 ln-or-cp $(source) $(dfile) 998 999 return $(dfiles) 1000 1001public.Filelist(destfile, filelist) = 1002 $(destfile): $(dirname $(destfile)) :value: $(filelist) 1003 section 1004 f = $(fopen $(@), w) 1005 foreach(filename, $(filelist)) 1006 fprintln($(f), $(filename)) 1007 close($(f)) 1008 return $(destfile) 1009 1010public.ParseDependProcess(config, process, depends) = 1011 RESULT_PROCESSES = 1012 export RESULT_PROCESSES 1013 foreach(DEPEND, $(depends)) 1014 if $(findstring $(DEPEND), $">") 1015 DEPEND_PAIR = $(split >, $(DEPEND)) 1016 PROCESS_KEY = $(nth 0, $(DEPEND_PAIR)) 1017 if $(equal $(process), $(PROCESS_KEY)) 1018 RESULT_PROCESSES += $(split $",", $(nth 1, $(DEPEND_PAIR))) 1019 else 1020 RESULT_PROCESSES += $(DEPEND) 1021 1022 return $(RESULT_PROCESSES) 1023 1024# �S�Ẵ\�[�X�t�@�C���̃R���p�C���O�Ɏ��s����^�[�Q�b�g 1025public.RequireSetup(targets) = 1026 .PHONY/$(ROOT)/build-setup: $(targets) 1027 1028public.DefineDefaultRules() = 1029 1030 .DEFAULT: build 1031 1032 all: build tests 1033 1034 run: run-scripts 1035 1036 %.log: run-scripts 1037 1038 dotests run: $(RUNNER) :effects: $(RUNNER_LOCK) 1039 $(RunDependMCR $@) 1040 1041public.ShowConfig() = 1042 NOT_FOUND = $"������܂���" 1043 println($"���ϐ�/�����ݒ�--------------------------------------") 1044 println($" HORIZON_ROOT: " $(absname $(HORIZON_ROOT))) 1045 println($" HORIZON_ADDINS_ROOT: " $(HORIZON_ADDINS_ROOT)) 1046 println($" HORIZON_TARGETS: " $(if $(defined-env HORIZON_TARGETS), $`(getenv HORIZON_TARGETS))) 1047 println($" ARMLMD_LICENSE_FILE: " $(if $(defined-env ARMLMD_LICENSE_FILE), $`(getenv ARMLMD_LICENSE_FILE))) 1048 println($" $(RVCT_ENV_PREFIX)BIN: " $(if $(defined-env $(RVCT_ENV_PREFIX)BIN), $`(getenv $(RVCT_ENV_PREFIX)BIN))) 1049 if $(defined-env $(RVCT_ENV_PREFIX)BIN) 1050 ARMCC_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armcc.exe" --help)), $" Usage:.*", $(EMPTY)) 1051 ARMASM_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armasm.exe" --help)), $" Usage:.*", $(EMPTY)) 1052 ARMLINK_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armlink.exe" --help)), $" Usage:.*", $(EMPTY)) 1053 ARMAR_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)armar.exe" --help)), $" - archive.*", $(EMPTY)) 1054 FROMELF_VERSION = $(gsub $(string $(shell $"$(RVCT_BINDIR)fromelf.exe" --help)), $"ARM image.*", $(EMPTY)) 1055 1056 println($" - $(ARMCC_VERSION)") 1057 println($" - $(ARMASM_VERSION)") 1058 println($" - $(ARMLINK_VERSION)") 1059 println($" - $(ARMAR_VERSION)") 1060 println($" - $(FROMELF_VERSION)") 1061 println($" $(RVCT_ENV_PREFIX)INC: " $(if $(defined-env $(RVCT_ENV_PREFIX)INC), $`(getenv $(RVCT_ENV_PREFIX)INC))) 1062 println($" $(RVCT_ENV_PREFIX)LIB: " $(if $(defined-env $(RVCT_ENV_PREFIX)LIB), $`(getenv $(RVCT_ENV_PREFIX)LIB))) 1063 1064 println($" ") 1065 println($"�v���W�F�N�g�ݒ�---------------------------------------") 1066 println($" ROOT: " $(absname $(ROOT))) 1067 println($" INSTALL_ROOT: " $(absname $(INSTALL_ROOT))) 1068 println($" INSTALL_ROOT_IMAGES: " $(absname $(INSTALL_ROOT_IMAGES))) 1069 println($" INSTALL_ROOT_LIBRARIES: " $(absname $(INSTALL_ROOT_LIBRARIES))) 1070 println($" ") 1071 println($"�v���O����---------------------------------------------") 1072 1073 GCC_VERSION = 1074 if $(GCC) 1075 GCC_VERSION = $`(gsub $(string $(shell $(GCC) --version)), $" Copyright.*", $(EMPTY)) 1076 export 1077 1078 #OMAKE_VERSION_ = $`(gsub $(string $(shell omake --version)), $":.*", $(EMPTY)) 1079 println($" GCC: " $(if $(equal $(GCC), $(EMPTY)), $(NOT_FOUND), $`(GCC) [$`(GCC_VERSION)])) 1080 println($" RUBY: " $(if $(equal $(RUBY), $(EMPTY)), $(NOT_FOUND), $`(RUBY) [$`(RUBY_VERSION)])) 1081 println($" 7ZIP: " $(if $(equal $(7ZIP), $(EMPTY)), $(NOT_FOUND), $`(7ZIP))) 1082 println($" UNZIP: " $(if $(equal $(UNZIP), $(EMPTY)), $(NOT_FOUND), $`(UNZIP))) 1083 println($" ") 1084 1085.PHONY: show-config 1086show-config: 1087 $(ShowConfig) 1088 1089# �l�̐ݒ����荞�� 1090if $(test -f $(ROOT_OMAKE)/localdefs.om) 1091 include $(ROOT_OMAKE)/localdefs 1092 export 1093