#---------------------------------------------------------------------------- # Project: Horizon # File: debuggerdefs.PARTNER.om # # Copyright (C)2009-2011 Nintendo Co., Ltd. All rights reserved. # # These coded instructions, statements, and computer programs contain # proprietary information of Nintendo of America Inc. and/or Nintendo # Company Ltd., and are protected by Federal copyright law. They may # not be disclosed to third parties or copied or duplicated in any form, # in whole or in part, without the prior written consent of Nintendo. # # $Rev: 35157 $ #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # 関数定義 #---------------------------------------------------------------------------- public.ParseProcessAttribute(config, process, depends) = RESULT_PROCESSES = export RESULT_PROCESSES foreach(DEPEND, $(depends)) if $(findstring $(DEPEND), $">") DEPEND_PAIR = $(split >, $(DEPEND)) PROCESS_KEY = $(nth 0, $(DEPEND_PAIR)) if $(equal $(process), $(PROCESS_KEY)) RESULT_PROCESSES += $(split $",", $(nth 1, $(DEPEND_PAIR))) else RESULT_PROCESSES += $(DEPEND) return $(RESULT_PROCESSES) public.ParseProcessAttributees(process, processlist) = processes = basedir = $(dirname $(absname $(process))) foreach(proc, $(DEPEND_PROCESSES)) if $(not $(proc)) continue if $(findstring $(proc),$"^@") processes += $(absname $(file $(removeprefix $"@", $(proc)))) export elseif $(findstring $(proc),$"^\.") processes += $(file $(absname $(proc))) export else tmp_image_dir = $(dirname $(proc)) tmp_image_dir = $(absname $(addprefix $(basedir)$(DIRSEP)..$(DIRSEP)..$(DIRSEP),$(tmp_image_dir))) tmp_image = $(addsuffix $(EXT_CDI),$(basename $(proc))) tmp_image = $(addprefix $(config.getTargetSubDirectory false)$(DIRSEP),$(tmp_image)) processes += $(file $(addprefix $(tmp_image_dir)$(DIRSEP),$(tmp_image))) export export return $(processes) public.RunProgramBeforeTest(options, logfile) = if $(defined BEFORE_TEST) foreach(runner, $(BEFORE_TEST)) runner.run($(options), logfile) public.GetDependsBeforeTest() = ret = if $(defined BEFORE_TEST) foreach(runner, $(BEFORE_TEST)) value $(runner.GetDepends) return $(ret) public.RunProgramAfterTest(options, logfile) = if $(defined AFTER_TEST) foreach(runner, $(AFTER_TEST)) runner.run($(options), logfile) public.GetDependsAfterTest() = ret = if $(defined AFTER_TEST) foreach(runner, $(AFTER_TEST)) value $(runner.GetDepends) return $(ret) public.GetLoadrunOptions() = options = if $(and $(not $(defined RUN_TIMEOUT)), $(not $(isEmpty $(filter dotests-%, $(TARGETS))))) RUN_TIMEOUT = 60 export RUN_TIMEOUT if $(and $(not $(defined EXIT_PATTERN)), $(not $(isEmpty $(filter dotests-%, $(TARGETS))))) EXIT_PATTERN=$"CU_TEST_EXIT|KernelPanic|nn::svc::Break\(" export EXIT_PATTERN if $(and $(defined RUN_NOWAIT), $(RUN_NOWAIT)) options += --no-wait export options if $(defined EXIT_PATTERN) options += --exit-pattern $(string $(EXIT_PATTERN)) export options if $(defined RUN_TIMEOUT) options += --timeout $(RUN_TIMEOUT) export options if $(and $(defined-env CTR_RUN_DEVICE), $(not $(defined RUN_DEVICE))) RUN_DEVICE = $(getenv CTR_RUN_DEVICE) export if $(defined RUN_DEVICE) options += -d $(RUN_DEVICE) export options if $(and $(defined RUN_VERBOSE), $(RUN_VERBOSE)) options += --verbose export options return $(options) public.GetLoadrunOptionsForTool() = options = if $(and $(defined RUN_NOWAIT), $(RUN_NOWAIT)) options += --no-wait export options return $(options) public.RunProgramBeforeTest(options, logfile) = if $(defined BEFORE_TEST) foreach(runner, $(BEFORE_TEST)) runner.run($(options), logfile) public.GetDependsBeforeTest() = ret = if $(defined BEFORE_TEST) foreach(runner, $(BEFORE_TEST)) value $(runner.GetDepends) return $(ret) public.RunProgramAfterTest(options, logfile) = if $(defined AFTER_TEST) foreach(runner, $(AFTER_TEST)) runner.run($(options), logfile) public.GetDependsAfterTest() = ret = if $(defined AFTER_TEST) foreach(runner, $(AFTER_TEST)) value $(runner.GetDepends) return $(ret) #---------------------------------------------------------------------------- # グローバル変数の定義 #---------------------------------------------------------------------------- # Partner Debugger用loadrun public.LOADRUN = $(absname $(ROOT_TOOLS)$(DIRSEP)CommandLineTools$(DIRSEP)ctr_loadrun32.exe) # JTAG用loadrun public.LOADRUNF = $(absname $(ROOT_TOOLS)$(DIRSEP)CommandLineTools$(DIRSEP)ctr_loadrunf32.exe) #---------------------------------------------------------------------------- # ルール定義 #---------------------------------------------------------------------------- .PHONY: run .PHONY: dotests #---------------------------------------------------------------------------- # 関数定義 #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # 関数定義 #---------------------------------------------------------------------------- public.ParseProcessAttribute(config, process, depends) = RESULT_PROCESSES = export RESULT_PROCESSES foreach(DEPEND, $(depends)) if $(findstring $(DEPEND), $">") DEPEND_PAIR = $(split >, $(DEPEND)) PROCESS_KEY = $(nth 0, $(DEPEND_PAIR)) if $(equal $(process), $(PROCESS_KEY)) RESULT_PROCESSES += $(split $",", $(nth 1, $(DEPEND_PAIR))) else RESULT_PROCESSES += $(DEPEND) return $(RESULT_PROCESSES) public.ParseProcessAttributees(process, processlist) = processes = basedir = $(dirname $(absname $(process))) foreach(proc, $(DEPEND_PROCESSES)) if $(not $(proc)) continue if $(findstring $(proc),$"^@") processes += $(absname $(file $(removeprefix $"@", $(proc)))) export elseif $(findstring $(proc),$"^\.") processes += $(file $(absname $(proc))) export else tmp_image_dir = $(dirname $(proc)) tmp_image_dir = $(absname $(addprefix $(basedir)$(DIRSEP)..$(DIRSEP)..$(DIRSEP),$(tmp_image_dir))) tmp_image = $(addsuffix $(EXT_CDI),$(basename $(proc))) tmp_image = $(addprefix $(config.getTargetSubDirectory false)$(DIRSEP),$(tmp_image)) processes += $(file $(addprefix $(tmp_image_dir)$(DIRSEP),$(tmp_image))) export export return $(processes) public.GetLoadrunOptions() = options = if $(and $(not $(defined RUN_TIMEOUT)), $(not $(isEmpty $(filter dotests-%, $(TARGETS))))) RUN_TIMEOUT = 60 export RUN_TIMEOUT if $(and $(not $(defined EXIT_PATTERN)), $(not $(isEmpty $(filter dotests-%, $(TARGETS))))) EXIT_PATTERN=$"CU_TEST_EXIT|KernelPanic|nn::svc::Break\(" export EXIT_PATTERN if $(and $(defined RUN_NOWAIT), $(RUN_NOWAIT)) options += --no-wait export options if $(defined EXIT_PATTERN) options += --exit-pattern $(string $(EXIT_PATTERN)) export options if $(defined RUN_TIMEOUT) options += --timeout $(RUN_TIMEOUT) export options if $(and $(defined-env CTR_RUN_DEVICE), $(not $(defined RUN_DEVICE))) RUN_DEVICE = $(getenv CTR_RUN_DEVICE) export if $(defined RUN_DEVICE) options += -d $(RUN_DEVICE) export options if $(and $(defined RUN_VERBOSE), $(RUN_VERBOSE)) options += --verbose export options return $(options) public.GetLoadrunOptionsForTool() = options = if $(and $(defined RUN_NOWAIT), $(RUN_NOWAIT)) options += --no-wait export options return $(options) public.TestProgram(config, files) = BUILD_TESTS = true name = $(removesuffix $(basename $(nth 0,$(files)))) if $(filter BOOT, $(CTR_APPTYPE)) CCFLAGS += -DNN_BUILD_IOPKIT CTR_NO_BANNER_ICON = true if $(not $(defined LIBS)) LIBS = $(EMPTY) export if $(not $(and $(defined NOT_LINK_IOPDEV), $(NOT_LINK_IOPDEV))) LIBS += libnn_iopdev libnn_driversEs export LIBS += libnn_iopall export TARGET_FILES = TARGET_FILES += $(Program $(config), $(name), $(files)) IMPORTER = $(MakeImporter $(TARGET_FILES)) LIST_PREFIX = $(removesuffix $(basename $(TARGET_FILES))) CCIFile = $(filter %$(EXT_CCI), $(TARGET_FILES)) CIPFile = $(filter %$(EXT_CIP), $(TARGET_FILES)) BASENAME = $(basename $(nth 0, $(TARGET_FILES))) RUN_PROCLIST_FILES = $(FilesToRunProcessList $(config),$(absname $(TARGET_FILES))) RUN_EMUMEM_FILES = $(FilesToRunEmulationMemory $(config),$(absname $(TARGET_FILES))) RUN_IMPORT_FILES = $(FilesToRunEmulationMemory $(config),$(absname $(IMPORTER))) RUN_SPI_FILES = $(FilesToRunSPI $(config),$(absname $(TARGET_FILES))) export RUN_ARM9_FILES RUN_ARM9_FILES = if $(and $(defined FilesToRunARM9), $(not $(isEmpty $(CIPFile)))) RUN_ARM9_FILES = $(FilesToRunARM9 $(config),$(absname $(CIPFile))) run-emumem: $(RUN_EMUMEM_FILES) run-spi: $(RUN_SPI_FILES) if $(not $(defined RUN_FILTER)) RUN_FILTER= * export if $(and $(defined BUILD_TESTS),$(equal $(BUILD_TESTS),true)) if $(and \ $(not $(equal $(FilterTestAttributes $(filter-out test__%,$(filter test_%, $(BASENAME)))),$(EMPTY))), \ $(isFilterMatch $(compileToRegex $(RUN_FILTER)),$(config.getScannerName))) if $(and $(defined TEST_ENVIRONMENT_PROCESSLIST), $(TEST_ENVIRONMENT_PROCESSLIST)) dotests-proclist: $(RUN_PROCLIST_FILES) if $(and $(defined TEST_ENVIRONMENT_EMUMEM), $(TEST_ENVIRONMENT_EMUMEM)) dotests-emumem: $(RUN_EMUMEM_FILES) if $(and $(defined TEST_ENVIRONMENT_IMPORT), $(TEST_ENVIRONMENT_IMPORT)) dotests-import: $(RUN_IMPORT_FILES) TARGET_FILES += $(IMPORTER) export if $(and $(defined TEST_ENVIRONMENT_ARM9), $(TEST_ENVIRONMENT_ARM9)) dotests-arm9: $(RUN_ARM9_FILES) if $(and $(defined TEST_ENVIRONMENT_SPI), $(TEST_ENVIRONMENT_SPI)) dotests-spi: $(RUN_SPI_FILES) export export return $(TARGET_FILES) public.PartnerMCR(axf, process) = export depend_files depend_files = if $(not $(SKIP_BUILD)) depend_files += $(axf) $(process) export basefile export axf_symbol if $(not $(equal $(process), $(EMPTY))) basefile = $(process) axf_symbol = $(removesuffix $(process)).axf else basefile = $(axf) mcr = $(addsuffix .mcr,$(removesuffix $(basefile))) log = $(removesuffix $(absname $(basefile))).log basedir = $(dirname $(absname $(basefile))) $(mcr): $(dirname $(mcr)) $(ROOT_OMAKE)/debuggerdefs.partner.om $(depend_files) section f = $(fopen $(@), w) fprintln($(f),ESC) fprintln($(f),INITA) fprintln($(f),CORE 0) fprintln($(f),L "$(absname $(axf))") if $(axf_symbol) fprintln($(f),LSA "$(absname $(axf_symbol))") fprintln($(f),CD "$(basedir)") if $(not $(equal $(log),$(EMPTY))) fprintln($(f),$">" "$(absname $(log))") fprintln($(f),G) close($(f)) if $(and $(defined TEST_ENVIRONMENT_PROCESSLIST), $(TEST_ENVIRONMENT_PROCESSLIST)) $(log): $(mcr) $(depend_files) $(RUNNER) :effects: $(RUNNER_LOCK) bash $(RUNNER) $(mcr) return $(mcr) public.FilesToRunProcessList(config, process) = process = $(filter %.cdi,$(process)) if $(eq 0,$(length $(process))) return process = $(nth 0,$(process)) export depend_files depend_files = export processes processes = kernel = $(config.getSuitableKernelFilename) kernel_core0 = $(gsub $(kernel),Kernel\.ARM946ES\.,Kernel.MPCore.) kernel_core2 = $(gsub $(kernel),Kernel\.MPCore\.,Kernel.ARM946ES.) if $(not $(and $(defined TEST_DEBUG_ARM9), $(TEST_DEBUG_ARM9))) kernel_core2 = $(gsub $(kernel_core2),Development,Release) kernel_core2 = $(gsub $(kernel_core2),Debug,Release) export log = $(addsuffix .proclist.log,$(removesuffix $(process))) setuplog = $(addsuffix .proclist.setup.log,$(removesuffix $(process))) teardownlog = $(addsuffix .proclist.teardown.log,$(removesuffix $(process))) basedir = $(dirname $(absname $(process))) if $(defined DEPEND_PROCESSES) DEPEND_PROCESSES = $(ParseProcessAttribute $(config), $(removesuffix $(basename $(process))), $(DEPEND_PROCESSES)) processes += $(ParseProcessAttributees $(process), $(DEPEND_PROCESSES)) export processes += $(absname $(process)) if $(not $(SKIP_BUILD)) depend_files += $(kernel_core0) $(kernel_core2) depend_files += $(processes) processes = $(addprefix @,$(processes)) process_list = $(dirname $(kernel_core0))$(DIRSEP)process.list tooloptions = -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) -pl $(process_list) $(GetLoadrunOptionsForTool) if $(not $(and $(defined SKIP_RUN), $(SKIP_RUN))) if $(and $(defined TEST_ENVIRONMENT_PROCESSLIST), $(TEST_ENVIRONMENT_PROCESSLIST)) $(log): $(LOADRUNF) $(depend_files) $(GetDependsBeforeTest) $(GetDependsAfterTest) :effects: $(LOADRUNF) :value: $(random) if $(defined RUN_HOSTPROGRAM) RUN_HOSTPROGRAM.run() RunProgramBeforeTest($(tooloptions), $(setuplog)) section f = $(fopen $(process_list), w) foreach(filename, $(processes)) fprintln($(f), $(filename)) close($(f)) $(LOADRUNF) -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) $(GetLoadrunOptions) | tee $(absname $(log)) RunProgramAfterTest($(tooloptions), $(teardownlog)) depend_files += $(log) if $(filter run-proclist, $(TARGETS)) $(log): $(LOADRUNF) $(depend_files) $(GetDependsBeforeTest) $(GetDependsAfterTest) :effects: $(LOADRUNF) :value: $(random) section f = $(fopen $(process_list), w) foreach(filename, $(processes)) fprintln($(f), $(filename)) close($(f)) $(LOADRUNF) -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) $(GetLoadrunOptions) | tee $(absname $(log)) depend_files += $(log) export export return $(depend_files) public.FilesToRunEmulationMemory(config, process) = process = $(filter %.cci %.csu,$(process)) if $(eq 0,$(length $(process))) return process = $(nth 0,$(process)) kernel = $(config.getSuitableKernelFilename) kernel_core0 = $(gsub $(kernel),Kernel\.ARM946ES\.,Kernel.MPCore.) kernel_core2 = $(gsub $(kernel),Kernel\.MPCore\.,Kernel.ARM946ES.) if $(not $(and $(defined TEST_DEBUG_ARM9), $(TEST_DEBUG_ARM9))) kernel_core2 = $(gsub $(kernel_core2),Development,Release) kernel_core2 = $(gsub $(kernel_core2),Debug,Release) export if $(and $(defined RUN_FAST_KERNEL), $(RUN_FAST_KERNEL)) kernel_core0 = $(gsub $(kernel_core0),.small,.fast) kernel_core2 = $(gsub $(kernel_core2),.small,.fast) export export processes processes = export options options = export depend_files depend_files = if $(defined DEPEND_PROCESSES) DEPEND_PROCESSES = $(ParseProcessAttribute $(config), $(removesuffix $(basename $(process))), $(DEPEND_PROCESSES)) processes += $(ParseProcessAttributees $(process), $(DEPEND_PROCESSES)) export if $(not $(SKIP_BUILD)) depend_files += $(process) $(kernel_core0) $(kernel_core2) depend_files += $(processes) foreach(proc, $(processes)) options += -rp $(proc) if $(and $(defined RUN_FROMTESTMENU), $(RUN_FROMTESTMENU)) options += -c0 "rdc $(process),0" options += -c0 "zn ID2_2=0x20" options += -rid 0004013000008002 export else options += -re $(process) export log = $(addsuffix .emumem.log,$(removesuffix $(process))) setuplog = $(addsuffix .proclist.setup.log,$(removesuffix $(process))) teardownlog = $(addsuffix .proclist.teardown.log,$(removesuffix $(process))) basedir = $(dirname $(absname $(process))) process_list = $(dirname $(kernel_core0))$(DIRSEP)process.list tooloptions = -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) -pl $(process_list) $(GetLoadrunOptionsForTool) if $(not $(and $(defined SKIP_RUN), $(SKIP_RUN))) if $(or $(and $(defined TEST_ENVIRONMENT_EMUMEM), $(TEST_ENVIRONMENT_EMUMEM))\ $(and $(defined TEST_ENVIRONMENT_IMPORT), $(TEST_ENVIRONMENT_IMPORT))) $(log): $(LOADRUNF) $(depend_files) $(GetDependsBeforeTest) $(GetDependsAfterTest) :effects: $(LOADRUNF) :value: $(random) if $(defined RUN_HOSTPROGRAM) RUN_HOSTPROGRAM.run() RunProgramBeforeTest($(tooloptions), $(setuplog)) echo $(LOADRUNF) -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) -pl $(process_list) $(options) $(GetLoadrunOptions) $(LOADRUNF) -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) -pl $(process_list) $(options) $(GetLoadrunOptions) | tee $(absname $(log)) RunProgramAfterTest($(tooloptions), $(teardownlog)) depend_files += $(log) export export if $(filter run-emumem, $(TARGETS)) $(log): $(LOADRUNF) $(depend_files) $(GetDependsBeforeTest) $(GetDependsAfterTest) :effects: $(LOADRUNF) :value: $(random) $(LOADRUNF) -c0 esc -c0 init -k11 $(kernel_core0) -k9 $(kernel_core2) -pl $(process_list) $(options) $(GetLoadrunOptions) | tee $(absname $(log)) depend_files += $(log) export export return $(depend_files) public.FilesToRunSPI(config, process) = process = $(filter %.cci,$(process)) if $(eq 0,$(length $(process))) return process = $(nth 0,$(process)) export depend_files depend_files = if $(not $(SKIP_BUILD)) depend_files += $(process) log = $(addsuffix .spi.log,$(removesuffix $(process))) commands = -c esc -c reset commands += -c "RDC \"$(process)\",0" commands += -c NEWP if $(and $(defined TEST_ENVIRONMENT_SPI), $(TEST_ENVIRONMENT_SPI)) $(log): $(LOADRUN) $(depend_files) :effects: $(LOADRUN) :value: $(random) $(LOADRUN) $(commands) $(GetLoadrunOptions) | tee $(absname $(log)) depend_files += $(log) if $(filter run-spi, $(TARGETS)) $(log): $(LOADRUN) $(depend_files) :effects: $(LOADRUN) :value: $(random) $(LOADRUN) $(commands) $(GetLoadrunOptions) | tee $(absname $(log)) depend_files += $(log) return $(depend_files) public.UserRunProcess(config, name, files) = TARGET_FILE = $(Program $(config), $(name), $(files)) LIST_PREFIX = $(removesuffix $(basename $(TARGET_FILE))) CCIFile = $(replacesuffixes $(EXT_ELF), $(EXT_CCI), $(TARGET_FILE)) CIPFile = $(replacesuffixes $(EXT_ELF), $(EXT_CIP), $(TARGET_FILE)) RUN_PROCLIST_FILES = $(FilesToRunProcessList $(config),$(absname $(TARGET_FILE))) RUN_EMUMEM_FILES = $(FilesToRunEmulationMemory $(config),$(absname $(TARGET_FILE))) RUN_SPI_FILES = $(FilesToRunSPI $(config),$(absname $(TARGET_FILE))) if $(not $(defined RUN_FILTER)) RUN_FILTER= * export if $(isFilterMatch $(compileToRegex $(RUN_FILTER)), $(config.getScannerName)) run-proclist: $(RUN_PROCLIST_FILES) run-scripts: $(RUN_PROCLIST_FILES) run-emumem: $(RUN_EMUMEM_FILES) run-spi: $(RUN_SPI_FILES) return $(TARGET_FILE)