#---------------------------------------------------------------------------- # Project: Horizon # File: targetdefs.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: 40245 $ #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # getOutputBaseDirectory # # Overview # Function to get directory not dependent on the target # # Referenced global variables # | #------------------------------------------------------- getOutputBaseDirectory() = abs_cwd = $(absname $(CWD)) #println(abs_cwd: $(abs_cwd)) # Is the project root HORIZON_ROOT? (SDK build?) if $(equal $(AROOT), $(HORIZON_ROOT)) return $(dir $(HORIZON_ROOT)) # Is the current directory in HORIZON_ROOT? subdir = $(removeprefix $(HORIZON_ROOT), $(abs_cwd)) if $(not $(equal $(subdir), $(abs_cwd))) #println("UNDER HORIZON: "$(abs_cwd)) return $(dir $(HORIZON_ROOT)) # Is there a sources directory in the project root? subdir = $(removeprefix $(AROOT)\\sources\\, $(abs_cwd)) if $(not $(equal $(subdir), $(abs_cwd))) #println("SOURCES EXIST: "$(abs_cwd)) return $(ROOT) #println(subdir: $(subdir)) # Output to current directory return $(dir .) #------------------------------------------------------- # getModuleOutputSubDirectoryOf # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getModuleOutputSubDirectoryOf(module_dir, sub_dir) = if $(defined SOURCES_BASE_ROOT) module_dir = $(SOURCES_BASE_ROOT) export abs_dir = $(absname $(module_dir)) subpath = $(removeprefix $(AROOT)$(DIRSEP), $(abs_dir)) subpath = $(removeprefix sources$(DIRSEP), $(subpath)) # Is the project root HORIZON_ROOT? (SDK build?) if $(equal $(AROOT), $(HORIZON_ROOT)) return $(dir $(HORIZON_ROOT)/$(sub_dir)/$(subpath)) # Is the current directory in HORIZON_ROOT? subdir = $(removeprefix $(HORIZON_ROOT), $(abs_dir)) if $(not $(equal $(subdir), $(abs_dir))) return $(dir $(HORIZON_ROOT)/$(sub_dir)/$(subpath)) # Is there a sources directory in the project root? subdir = $(removeprefix $(AROOT)\\sources\\, $(abs_dir)) if $(not $(equal $(subdir), $(abs_dir))) return $(dir $(ROOT)/$(sub_dir)/$(subpath)) # Output to target directory return $(dir $(module_dir)$(DIRSEP)$(sub_dir)) #------------------------------------------------------- # getModuleImageSubDirectoryOf # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getModuleImageSubDirectoryOf(module_dir) = return $(getModuleOutputSubDirectoryOf $(module_dir), $(SUBDIR_IMAGES)) #------------------------------------------------------- # getModuleObjectsSubDirectoryOf # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getModuleObjectsSubDirectoryOf(module_dir) = return $(getModuleOutputSubDirectoryOf $(module_dir), $(SUBDIR_OBJECTS)) #------------------------------------------------------- # getModuleSubDirectory # # Overview # Get the subdirectory name where generated items are stored from the source path name # # Referenced global variables # | #------------------------------------------------------- getModuleSubDirectory() = if $(defined SOURCES_BASE_ROOT) basedir = $(SOURCES_BASE_ROOT) export else basedir = $(CWD) export #println(basedir: $(basedir)) if $(equal $(ROOT), $(basedir)) return . basedir = $(absname $(basedir)) subpath = $(removeprefix $(AROOT)$(DIRSEP), $(basedir)) subpath = $(removeprefix sources$(DIRSEP), $(subpath)) return $(subpath) #------------------------------------------------------- # getObjectBaseDirectory # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getObjectBaseDirectory() = base_dir = $(getOutputBaseDirectory) if $(equal ., $(base_dir)) module_dir = export else module_dir = $(getModuleSubDirectory)$(DIRSEP) export return $(base_dir)$(DIRSEP)$(SUBDIR_OBJECTS)$(DIRSEP)$(module_dir) #---------------------------------------------------------------------------- # Class definitions #---------------------------------------------------------------------------- TargetSpec. = class TargetSpec #---------------------------------------------------------------------------- # Variable Definitions #---------------------------------------------------------------------------- this.processor = $(EMPTY) this.platform = $(EMPTY) this.hardware = $(EMPTY) this.name = $(EMPTY) #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # New. # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- new(name) = this.name = $(name) return $(this) #------------------------------------------------------- # dump # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- dump() = println($"name: "$(name)) println($" platform: "$(platform)) println($" hardware: "$(hardware)) println($" processors: "$(processors)) println($' ') #------------------------------------------------------- # getMacroFlags # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getMacroFlags(systemname, processor) = return $(EMPTY) TargetConfig. = class TargetConfig #---------------------------------------------------------------------------- # Variable Definitions #---------------------------------------------------------------------------- this.hardware = $(EMPTY) this.systemname = $(EMPTY) this.processor = $(EMPTY) this.effort = $(EMPTY) this.buildtype = $(EMPTY) this.matched = true #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # New. # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- new() = return $(this) #------------------------------------------------------- # dump # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- dump() = println($"hardware: "$(hardware)) println($" processor: "$(processor)) println($' ') #------------------------------------------------------- # getFullname # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getFullname() = return $(hardware).$(systemname).$(processor).$(effort) #------------------------------------------------------- # getFullnameWithSystem # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getFullnameWithSystem(altsystemname) = return $(hardware).$(altsystemname).$(processor).$(effort) #------------------------------------------------------- # getFullnameWithSystemAndEffort # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getFullnameWithSystemAndEffort(altsystemname, alteffort) = return $(hardware).$(altsystemname).$(processor).$(alteffort) #------------------------------------------------------- # getScannerName # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getScannerName() = return $(getFullname)-$(buildtype) #------------------------------------------------------- # getObjectDirectory # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getObjectDirectory() = return $(getObjectDirectoryFeedback false) #------------------------------------------------------- # getObjectDirectoryFeedback # # Overview # | # # Referenced global variables # | #------------------------------------------------------- getObjectDirectoryFeedback(isFeedback) = return $(makeDirectory $(getModuleObjectsSubDirectoryOf $(CWD))$(DIRSEP)$(getTargetSubDirectory false)) #------------------------------------------------------- # getLibraryDirectory # # Overview # | # # Referenced global variables # INSTALL_ROOT, INSTALL_ROOT_LIBRARIES, # HORIZON_ROOT_LIBRARIES #------------------------------------------------------- getLibraryDirectory(isInstall) = if $(and $(isInstall), $(defined INSTALL_ROOT)) return $(makeDirectory $(INSTALL_ROOT_LIBRARIES)$(DIRSEP)$(getTargetSubDirectory true)) else return $(makeDirectory $(HORIZON_ROOT_LIBRARIES)$(DIRSEP)$(getTargetSubDirectory true)) #------------------------------------------------------- # isTestBuild # # Overview # | # # Referenced global variables # BUILD_TESTS #------------------------------------------------------- isTestBuild() = if $(not $(defined BUILD_TESTS)) return false else return $(BUILD_TESTS) #------------------------------------------------------- # getOutputBaseDirectory # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getOutputBaseDirectory() = return $(getOutputBaseDirectory) #------------------------------------------------------- # getImageDirectory # # Overview # | # # Referenced global variables # INSTALL_ROOT_IMAGES, INSTALL_ROOT #------------------------------------------------------- getImageDirectory(isInstall) = private.module_dir = $(getModuleSubDirectory)$(DIRSEP) private.images_dir = $(EMPTY) if $(and $(isInstall), $(defined INSTALL_ROOT)) images_dir = $(INSTALL_ROOT_IMAGES) export images_dir else export module_dir images_dir private.base_dir = $(getOutputBaseDirectory) if $(equal ., $(base_dir)) module_dir = images_dir = $(base_dir)$(DIRSEP)$(SUBDIR_IMAGES) return $(makeDirectory $(images_dir)$(DIRSEP)$(module_dir)$(getTargetSubDirectory false)) #------------------------------------------------------- # getImageDirectoryOf # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getImageDirectoryOf(target_dir) = private.images_dir = $(getModuleImageSubDirectoryOf $(target_dir)) return $(dir $(images_dir)$(DIRSEP)$(getTargetSubDirectory false)) #------------------------------------------------------- # isSdkTool # # Overview # | # # Referenced global variables # INSTALL_SDK_TOOL #------------------------------------------------------- isSdkTool() = return false #------------------------------------------------------- # getOptimizeType # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getOptimizeType() = private.opttype = switch($(buildtype)) case Debug value noopt case Development value verbose case Release value release default value etc return $(opttype) #------------------------------------------------------- # getTargetSubDirectory # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getTargetSubDirectory(isLibrary) = private.subdir = $(hardware).$(systemname).$(processor) if $(isLibrary) return $(subdir)$(DIRSEP)$(getOptimizeType) else return $(subdir).$(effort)$(DIRSEP)$(buildtype) #------------------------------------------------------- # getLibraryName # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getLibraryName(name) = return $(name).$(effort)$(EXT_LIB) #------------------------------------------------------- # getStaticObjectName # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getStaticObjectName(name) = return $(basename $(name)).$(effort)$(EXT_OBJ) #------------------------------------------------------- # getLdscriptPath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getLdscriptPath(name) = return $(getBinaryPath $(name), $(EXT_LDS)) #------------------------------------------------------- # getMapfilePath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getMapfilePath(name) = return $(getBinaryPath $(name), $(EXT_MAP)) #------------------------------------------------------- # getDefaultLdscriptPath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getDefaultLdscriptPath() = private.base = $(makePath $(ROOT_RESOURCES) specfiles linker $(platform).$(systemname).$(processor)) return $(file $(base).ldscript) #------------------------------------------------------- # getFeedBackPath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getFeedBackPath() = return $(file $(getImageDirectory false)$(DIRSEP)$(getOutputFilename feedback, .dat)) #------------------------------------------------------- # getBinaryPath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getBinaryPath(name, suffix) = return $(file $(getImageDirectory false)$(DIRSEP)$(getOutputFilename $(name), $(suffix))) #------------------------------------------------------- # getBinaryPathOf # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getBinaryPathOf(target_dir, name, suffix) = private.sub_dir = $(getModuleImageSubDirectoryOf $(target_dir)) private.img_dir = $(dir $(sub_dir)$(DIRSEP)$(getTargetSubDirectory false)) return $(file $(img_dir)$(DIRSEP)$(getOutputFilename $(name), $(suffix))) #------------------------------------------------------- # getDefaultDescriptorPath # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getDefaultDescriptorPath() = return $(file $(ROOT_RESOURCES)$(DIRSEP)specfiles$(DIRSEP)Application.desc) #------------------------------------------------------- # getDefaultRomSpecFile # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getDefaultRomSpecFile() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(file $(ROOT_RESOURCES)$(DIRSEP)specfiles$(DIRSEP)$(spec.getDefaultRomSpecFile $(hardware))) #------------------------------------------------------- # getDefaultBannerFile # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getDefaultBannerFile() = return $(ROOT_RESOURCES)$(DIRSEP)banner$(DIRSEP)Default.bnr #------------------------------------------------------- # getDefaultIconFile # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getDefaultIconFile() = return $(ROOT_RESOURCES)$(DIRSEP)banner$(DIRSEP)Default.icn #------------------------------------------------------- # getOutputFilename # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getOutputFilename(name, suffix) = return $(name)$(suffix) #------------------------------------------------------- # getSystemCCFlags # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getSystemCCFlags() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(spec.getSystemFlags $(systemname)) #------------------------------------------------------- # getMinimumLibraries # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getMinimumLibraries() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(spec.getMinimumLibraries $(systemname), $(processor)) #------------------------------------------------------- # getDefaultLibraries # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getDefaultLibraries() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(spec.getDefaultLibraries $(systemname), $(processor)) #------------------------------------------------------- # getHostIoLibraries # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getHostIoLibraries() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(spec.getHostIoLibraries $(systemname), $(processor)) #------------------------------------------------------- # getMacroFlags # # Overview # | # # Referenced global variables # TARGET_MANAGER #------------------------------------------------------- getMacroFlags() = private.spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) return $(spec.getMacroFlags $(systemname), $(processor)) #------------------------------------------------------- # matches # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- matches(varvalue, pattern) = private.regex = compileToRegex($(pattern)) match($(varvalue)) case $(pattern) return true default return false #------------------------------------------------------- # isHostIoEnable # # Overview # | # # Referenced global variables # HOST_IO_DEFAULT, HOST_IO #------------------------------------------------------- isHostIoEnable() = if $(equal $(buildtype),Release) HOST_IO_DEFAULT = false export else HOST_IO_DEFAULT = true export if $,(HOST_IO) return true else return false #------------------------------------------------------- # isFilterMatched # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- isFilterMatched() = return $(matched) HardwareTargetConfig. = extends $(TargetConfig) class HardwareTargetConfig #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # New. # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- new() = return $(this) #------------------------------------------------------- # getFullname # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getFullname() = return $(hardware).$(effort) #------------------------------------------------------- # getFullnameDetailed # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getFullnameDetailed(altsystemname, altprocessor) = return $(hardware).$(altsystemname).$(altprocessor).$(effort) #------------------------------------------------------- # getTargetSubDirectory # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getTargetSubDirectory(isLibrary) = if $(isLibrary) return $(hardware)$(DIRSEP)$(getOptimizeType) else return $(hardware).$(effort)$(DIRSEP)$(buildtype) TargetManager. = class TargetManager #---------------------------------------------------------------------------- # Variable Definitions #---------------------------------------------------------------------------- this.tmap = $(EMPTY) #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # New. # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- new() = this.tmap = $(Map) return $(this) #------------------------------------------------------- # register # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- register(target) = tmap = $(tmap.add $(target.hardware), $(target)) return $(this) #------------------------------------------------------- # dump # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- dump() = tmap.foreach(k, v) v.dump() #------------------------------------------------------- # getProcessors # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getProcessors(hardware) = spec = $(getSpecByHardware $(hardware)) return $(spec.processors) #------------------------------------------------------- # getHardwares # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getHardwares() = return $(tmap.keys) #------------------------------------------------------- # getPlatform # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getPlatform(hardware) = private.spec = $(getSpecByHardware $(hardware)) return $(spec.platform) #------------------------------------------------------- # getSpecByHardware # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getSpecByHardware(hardware) = return $(tmap.find $(hardware)) #------------------------------------------------------- # collectTargetValues # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- collectTargetValues(getter) = private.values = $(tmap.map $(fun k,V,$(apply $(getter), $(V)))) return $(set $(values)) #------------------------------------------------------- # enumerateTargets # # Overview # Add target build information from SUPPORTED_TARGETS(filterstrings) and TARGET_FILTER to TARGET_LIST. # # # Referenced global variables # TARGET_FILTER, TARGETS_LIST, TARGET_BUILDTYPES # MATCHED_FAST #------------------------------------------------------- enumerateTargets(filterstrings, ignoreFastSmall, system_list) = private.regex = $(compileToRegex $(filterstrings)) private.regex_global = $(compileToRegex $(TARGET_FILTER)) private.hardwares = $(getHardwares) TARGETS_LIST = $(EMPTY) foreach(buildtype, $(TARGET_BUILDTYPES)) export TARGETS_LIST foreach(hardware, $(hardwares)) foreach(systemname, $(system_list)) foreach(processor, $(getProcessors $(hardware))) MATCHED_FAST = false export MATCHED_FAST foreach(effort, fast small) private.full_name = $"$(hardware).$(systemname).$(processor).$(effort)" if $(and $(isFilterMatch $(regex), $(full_name)), $(isFilterMatch $(regex_global), $(full_name))) private.tgt = $(TargetConfig.new) tgt.platform = $(getPlatform $(hardware)) tgt.hardware = $(hardware) tgt.systemname = $(systemname) tgt.processor = $(processor) tgt.effort = $(effort) tgt.buildtype = $(buildtype) TARGETS_LIST += $(tgt) if $(equal $(effort), fast) MATCHED_FAST = true elseif $(and $(not $(MATCHED_FAST)), $(ignoreFastSmall)) tgt.effort = fast tgt.matched = false TARGETS_LIST += $(tgt) elseif $(and $(MATCHED_FAST), $(ignoreFastSmall)) private.tgt = $(TargetConfig.new) tgt.platform = $(getPlatform $(hardware)) tgt.hardware = $(hardware) tgt.systemname = $(systemname) tgt.processor = $(processor) tgt.effort = small tgt.buildtype = $(buildtype) tgt.matched = false TARGETS_LIST += $(tgt) return $(TARGETS_LIST) #------------------------------------------------------- # enumerateHardwareTargets # # Overview # | # # Referenced global variables # TARGETS_LIST #------------------------------------------------------- enumerateHardwareTargets(filterstrings) = private.regex = $(compileToRegex $(filterstrings)) private.regex_global = $(compileToRegex $(TARGET_FILTER)) private.hardwares = $(getHardwares) TARGETS_LIST = $(EMPTY) foreach(buildtype, $(TARGET_BUILDTYPES)) export TARGETS_LIST foreach(hardware, $(hardwares)) foreach(effort, fast small) private.full_name = $"$(hardware).$(effort)" if $(and $(isFilterMatch $(regex), $(full_name)), $(isFilterMatch $(regex_global), $(full_name))) private.tgt = $(HardwareTargetConfig.new) tgt.platform = $(getPlatform $(hardware)) tgt.hardware = $(hardware) tgt.effort = $(effort) tgt.buildtype = $(buildtype) TARGETS_LIST += $(tgt) return $(TARGETS_LIST) #------------------------------------------------------- # isFilterMatch # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- isFilterMatch(regex, full_name) = match $(full_name) case $(regex) return true default return false Builder. = class Builder #---------------------------------------------------------------------------- # Variable Definitions #---------------------------------------------------------------------------- this.manager = $(EMPTY) #---------------------------------------------------------------------------- # Function definitions #---------------------------------------------------------------------------- #------------------------------------------------------- # New. # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- new(manager) = this.manager = $(manager) return $(this) #------------------------------------------------------- # getTargets # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getTargets(targetfilters) = return $(manager.enumerateTargets $(targetfilters), false, Kernel Process) #------------------------------------------------------- # getLibraryTargets # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getLibraryTargets(targetfilters) = return $(manager.enumerateTargets $(targetfilters), true, Kernel Process) #------------------------------------------------------- # getHardwareTargets # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- getHardwareTargets(targetfilters) = return $(manager.enumerateHardwareTargets $(targetfilters)) #------------------------------------------------------- # getToolTargets # # Overview # | # # Referenced global variables # TARGET_FILTER #------------------------------------------------------- getToolTargets(targetfilters) = TARGET_FILTER = WIN-IA32.* SYSTEM_LIST = Tool return $(manager.enumerateTargets *) #------------------------------------------------------- # go # # Overview # | # # Referenced global variables # TARGET #------------------------------------------------------- go(targetfilters, verb) = result = configs = $(getTargets $(targetfilters)) foreach(TARGET, $(configs)) result += $,(verb)) export return $(result) #------------------------------------------------------- # dumpConfigList # # Overview # | # # Referenced global variables # None. #------------------------------------------------------- dumpConfigList(configs) = foreach(config, $(configs)) config.dump() #---------------------------------------------------------------------------- # Variable Definitions #---------------------------------------------------------------------------- global.TARGET_MANAGER = $(TargetManager.new) #---------------------------------------------------------------------------- # Load target definitions #---------------------------------------------------------------------------- # Load unlabeled first foreach(om,$(ls $(ROOT_OMAKE)/platforms/$(TARGET_PLATFORM.Name)/$(TARGET_PLATFORM.Name).targetdefs.om)) include $(removesuffix $(om)) export # Load options next foreach(om,$(ls i,$(ROOT_OMAKE)/platforms/$(TARGET_PLATFORM.Name)/$(TARGET_PLATFORM.Name).targetdefs.*.om)) include $(removesuffix $(om)) export global.BUILDER = $(Builder.new $(TARGET_MANAGER))