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�����pX��ݒ肷�邩�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 �͓����Ɏgp�ł��܂���̂Ł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 �ɂĎ蓮�Ŋ�fB���Ng�����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