1#!/usr/bin/env omake 2#---------------------------------------------------------------------------- 3# Project: Horizon 4# File: targetdefs.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-01#$ 15# $Rev: 30041 $ 16# $Author: sasaki_yu $ 17#---------------------------------------------------------------------------- 18 19public.DEFAULT_FILTER = CTR-TS*MPCore* 20 21# �^�[�Q�b�g�Ɉˑ����Ȃ��f�B���N�g���擾�� 22getOutputBaseDirectory() = 23 abs_cwd = $(absname $(CWD)) 24 #println(abs_cwd: $(abs_cwd)) 25 # �v���W�F�N�g�̃��[�g��HORIZON_ROOT�H�iSDK �̃r���h�H�j 26 if $(equal $(AROOT), $(HORIZON_ROOT)) 27 return $(dir $(HORIZON_ROOT)) 28 29 # �J�����g�f�B���N�g���� HORIZON_ROOT �̒��H 30 subdir = $(removeprefix $(HORIZON_ROOT), $(abs_cwd)) 31 if $(not $(equal $(subdir), $(abs_cwd))) 32 #println("UNDER HORIZON: "$(abs_cwd)) 33 return $(dir $(HORIZON_ROOT)) 34 35 # �v���W�F�N�g�̃��[�g�ɂ� sources �f�B���N�g��������H 36 subdir = $(removeprefix $(AROOT)\\sources\\, $(abs_cwd)) 37 if $(not $(equal $(subdir), $(abs_cwd))) 38 #println("SOURCES EXIST: "$(abs_cwd)) 39 return $(ROOT) 40 41 #println(subdir: $(subdir)) 42 # �J�����g�f�B���N�g���ɏo�� 43 return $(dir .) 44 45# �\�[�X�̃p�X�����琶�������i�[����T�u�f�B���N�g������ 46getModuleSubDirectory() = 47 if $(defined SOURCES_BASE_ROOT) 48 basedir = $(SOURCES_BASE_ROOT) 49 export 50 else 51 basedir = $(CWD) 52 export 53 #println(basedir: $(basedir)) 54 if $(equal $(ROOT), $(basedir)) 55 return . 56 57 basedir = $(absname $(basedir)) 58 subpath = $(removeprefix $(AROOT)$(DIRSEP), $(basedir)) 59 subpath = $(removeprefix sources$(DIRSEP), $(subpath)) 60 return $(subpath) 61 62getObjectBaseDirectory() = 63 base_dir = $(getOutputBaseDirectory) 64 if $(equal ., $(base_dir)) 65 module_dir = 66 export 67 else 68 module_dir = $(getModuleSubDirectory)$(DIRSEP) 69 export 70 return $(base_dir)$(DIRSEP)$(SUBDIR_OBJECTS)$(DIRSEP)$(module_dir) 71 72TargetSpec. = 73 class TargetSpec 74 75 processor = 76 platform = 77 hardware = 78 79 new(name) = 80 this.name = $(name) 81 return $(this) 82 83 dump() = 84 println($"name: "$(name)) 85 println($" platform: "$(platform)) 86 println($" hardware: "$(hardware)) 87 println($" processors: "$(processors)) 88 println($' ') 89 90 getMacroFlags(systemname, processor) = 91 return $(EMPTY) 92 93TargetConfig. = 94 class TargetConfig 95 96 hardware = 97 systemname = 98 processor = 99 effort = 100 buildtype = 101 matched = true 102 103 new() = 104 return $(this) 105 106 dump() = 107 println($"hardware: "$(hardware)) 108 println($" processor: "$(processor)) 109 println($' ') 110 111 getFullname() = 112 return $(hardware).$(systemname).$(processor).$(effort) 113 114 getFullnameWithSystem(altsystemname) = 115 return $(hardware).$(altsystemname).$(processor).$(effort) 116 117 getFullnameWithSystemAndEffort(altsystemname, alteffort) = 118 return $(hardware).$(altsystemname).$(processor).$(alteffort) 119 120 getScannerName() = 121 return $(getFullname)-$(buildtype)$(if $(FEEDBACK_1ST_STAGE),.f) 122 123 getObjectDirectory() = 124 dir_suffix = 125 if $(FEEDBACK_1ST_STAGE) 126 dir_suffix = $(DIRSUFFIX_FEEDBACK) 127 export 128 129 return $(makeDirectory $(getObjectBaseDirectory)$(DIRSEP)$(getTargetSubDirectory false)$(dir_suffix)) 130 131 getObjectDirectory() = 132 if $(FEEDBACK_1ST_STAGE) 133 return $(getObjectDirectoryFeedback true) 134 135 return $(getObjectDirectoryFeedback false) 136 137 getObjectDirectoryFeedback(isFeedback) = 138 dir_suffix = 139 if $(isFeedback) 140 dir_suffix = $(DIRSUFFIX_FEEDBACK) 141 export 142 143 return $(makeDirectory $(getObjectBaseDirectory)$(DIRSEP)$(getTargetSubDirectory false)$(dir_suffix)) 144 145 getLibraryDirectory(isInstall) = 146 if $(and $(isInstall), $(defined INSTALL_ROOT)) 147 return $(makeDirectory $(INSTALL_ROOT_LIBRARIES)$(DIRSEP)$(getTargetSubDirectory true)) 148 else 149 return $(makeDirectory $(HORIZON_ROOT_LIBRARIES)$(DIRSEP)$(getTargetSubDirectory true)) 150 151 isTestBuild() = 152 if $(not $(defined BUILD_TESTS)) 153 return false 154 else 155 return $(BUILD_TESTS) 156 157 getOutputBaseDirectory() = 158 return $(getOutputBaseDirectory) 159 160 getImageDirectory(isInstall) = 161 module_dir = $(getModuleSubDirectory)$(DIRSEP) 162 163 if $(and $(isInstall), $(isSdkTool)) 164 images_dir = $(ROOT_TARGETTOOLS) 165 return $(makeDirectory $(images_dir)$(DIRSEP)$(hardware)$(DIRSEP)$(buildtype)) 166 export 167 elseif $(and $(isInstall), $(defined INSTALL_ROOT)) 168 # �C���X�g�[���Ώۃf�B���N�g�� 169 images_dir = $(INSTALL_ROOT_IMAGES) 170 export 171 else 172 base_dir = $(getOutputBaseDirectory) 173 if $(equal ., $(base_dir)) 174 module_dir = 175 export 176 images_dir = $(base_dir)$(DIRSEP)$(SUBDIR_IMAGES) 177 export 178 179 # �e�X�g���r���h����ꍇ�̓p�X�̋K�����ς�� 180 if $(isTestBuild) 181 module_dir = tests$(DIRSEP)$(gsub $(module_dir), $"\$(DIRSEP)tests?(\$(DIRSEP)|$$)", $(DIRSEP)) 182 export 183 184 return $(makeDirectory $(images_dir)$(DIRSEP)$(module_dir)$(getTargetSubDirectory false)) 185 186 isSdkTool() = 187 if $(and $(defined INSTALL_SDK_TOOL), $(INSTALL_SDK_TOOL), \ 188 $(equal $(systemname), Process), \ 189 $(equal $(processor), MPCore), \ 190 $(equal $(effort), fast)) 191 return true 192 else 193 return false 194 195 196 getOptimizeType() = 197 opttype = 198 switch($(buildtype)) 199 case Debug 200 value noopt 201 case Development 202 value verbose 203 case Release 204 value release 205 default 206 value etc 207 return $(opttype) 208 209 getTargetSubDirectory(isLibrary) = 210 subdir = $(hardware).$(systemname).$(processor) 211 if $(isLibrary) 212 return $(subdir)$(DIRSEP)$(getOptimizeType) 213 else 214 return $(subdir).$(effort)$(DIRSEP)$(buildtype) 215 216 getLibraryName(name) = 217 return $(name).$(effort)$(EXT_LIB) 218 219 getStaticObjectName(name) = 220 return $(basename $(name)).$(effort)$(EXT_OBJ) 221 222 getLdscriptPath(name) = 223 return $(getBinaryPath $(name), $".autogen.ldscript") 224 225 getMapfilePath(name) = 226 return $(getBinaryPath $(name), $".map") 227 228 getLdscriptTemplatePath() = 229 base = $(ROOT_BUILD)$(DIRSEP)linker$(DIRSEP)$(platform).$(systemname).$(processor) 230 if $(and $(equal $(processor), ARM946ES) $(equal $(hardware), CTR-CTTS)) 231 return $(file $(base).Legacy.ldscript.template) 232 else 233 return $(file $(base).ldscript.template) 234 235 getFeedBackPath() = 236 return $(file $(getImageDirectory false)$(DIRSEP)$(getOutputFilename feedback, .dat)) 237 238 getBinaryPath(name, suffix) = 239 return $(file $(getImageDirectory false)$(DIRSEP)$(getOutputFilename $(name), $(suffix))) 240 241 getDefaultDescriptorPath() = 242 return $(file $(ROOT_RESOURCES)$(DIRSEP)specfiles$(DIRSEP)Application.desc) 243 244 getDefaultRomSpecFile() = 245 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 246 if $(defined spec.getDefaultRomSpecFile) 247 return $(file $(ROOT_RESOURCES)$(DIRSEP)specfiles$(DIRSEP)$(spec.getDefaultRomSpecFile $(hardware))) 248 else 249 return $(file $(ROOT_RESOURCES)$(DIRSEP)specfiles$(DIRSEP)Application.rsf) 250 251 getDefaultBannerFile() = 252 return $(ROOT_RESOURCES)$(DIRSEP)banner$(DIRSEP)Default.bnr 253 254 getDefaultIconFile() = 255 return $(ROOT_RESOURCES)$(DIRSEP)banner$(DIRSEP)Default.icn 256 257 getOutputFilename(name, suffix) = 258 return $(name)$(suffix) 259 260 getSuitableKernelFilename() = 261 return $(HORIZON_ROOT_IMAGES)$(DIRSEP)kernel$(DIRSEP)$(getFullnameWithSystem Kernel)$(DIRSEP)$(buildtype)$(DIRSEP)kernel.axf 262 263 getSystemCCFlags() = 264 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 265 if $(defined spec.getSystemFlags) 266 return $(spec.getSystemFlags $(systemname)) 267 else 268 return $(EMPTY) 269 270 getMinimumLibraries() = 271 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 272 if $(defined spec.getMinimumLibraries) 273 return $(spec.getMinimumLibraries $(systemname), $(processor)) 274 else 275 return $(EMPTY) 276 277 getDefaultLibraries() = 278 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 279 if $(defined spec.getDefaultLibraries) 280 return $(spec.getDefaultLibraries $(systemname), $(processor)) 281 else 282 return $(EMPTY) 283 284 getHostIoLibraries() = 285 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 286 if $(defined spec.getHostIoLibraries) 287 return $(spec.getHostIoLibraries $(systemname), $(processor)) 288 else 289 return $(EMPTY) 290 291 getMacroFlags() = 292 spec = $(TARGET_MANAGER.getSpecByHardware $(hardware)) 293 if $(defined spec.getMacroFlags) 294 return $(spec.getMacroFlags $(systemname), $(processor)) 295 else 296 return $(EMPTY) 297 298 matches(varvalue, pattern) = 299 regex = compileToRegex($(pattern)) 300 match($(varvalue)) 301 case $(pattern) 302 return true 303 default 304 return false 305 306 isHostIoEnable() = 307 if $(equal $(buildtype),Release) 308 HOST_IO_DEFAULT = false 309 export 310 else 311 HOST_IO_DEFAULT = true 312 export 313 314 if $,(HOST_IO) 315 return true 316 else 317 return false 318 319 isFilterMatched() = 320 return $(matched) 321 322HardwareTargetConfig. = 323 extends $(TargetConfig) 324 class HardwareTargetConfig 325 326 new() = 327 return $(this) 328 329 getFullname() = 330 return $(hardware).$(effort) 331 332 getFullnameDetailed(altsystemname, altprocessor) = 333 return $(hardware).$(altsystemname).$(altprocessor).$(effort) 334 335 getTargetSubDirectory(isLibrary) = 336 if $(isLibrary) 337 return $(hardware)$(DIRSEP)$(getOptimizeType) 338 else 339 return $(hardware).$(effort)$(DIRSEP)$(buildtype) 340 341TargetManager. = 342 class TargetManager 343 344 new() = 345 this.tmap = $(Map) 346 return $(this) 347 348 register(target) = 349 #println($"register: "$(target.name)) 350 tmap = $(tmap.add $(target.name), $(target)) 351 export 352 353 dump() = 354 tmap.foreach(k, v) 355 v.dump() 356 return 357 358 getProcessors(hardware) = 359 spec = $(getSpecByHardware $(hardware)) 360 return $(spec.processors) 361 362 getHardwares() = 363 return $(collectTargetValues $(fun v, $(v.hardware))) 364 365 getPlatform(hardware) = 366 spec = $(getSpecByHardware $(hardware)) 367 return $(spec.platform) 368 369 getSpecByHardware(hardware) = 370 return $(tmap.find $(hardware)) 371 372 collectTargetValues(getter) = 373 values = 374 tmap.foreach(k, v) 375 values += $(apply $(getter), $(v)) 376 export 377 return $(set $(values)) 378 379 enumerateTargets(filterstrings, ignoreFastSmall) = 380 #println(filter: $(filterstrings)) 381 regex = $(compileToRegex $(filterstrings)) 382 regex_global = $(compileToRegex $(TARGET_FILTER)) 383 hardwares = $(getHardwares) 384 targets_list = 385 export targets_list 386 foreach(buildtype, $(TARGET_BUILDTYPES)) 387 foreach(hardware, $(hardwares)) 388 foreach(systemname, $(SYSTEM_LIST)) 389 foreach(processor, $(getProcessors $(hardware))) 390 matched_fast = false 391 export matched_fast 392 foreach(effort, fast small) 393 fullname = $"$(hardware).$(systemname).$(processor).$(effort)" 394 #println($(fullname)) 395 if $(and $(isFilterMatch $(regex), $(fullname)), $(isFilterMatch $(regex_global), $(fullname))) 396 #eprintln($"name: " $(fullname)-$(buildtype)) 397 398 target = $(TargetConfig.new) 399 target.platform = $(getPlatform $(hardware)) 400 target.hardware = $(hardware) 401 target.systemname = $(systemname) 402 target.processor = $(processor) 403 target.effort = $(effort) 404 target.buildtype = $(buildtype) 405 406 targets_list += $(target) 407 408 if $(equal $(effort), fast) 409 matched_fast = true 410 elseif $(and $(not $(matched_fast)), $(ignoreFastSmall)) 411 target.effort = fast 412 target.matched = false 413 414 targets_list += $(target) 415 416 elseif $(and $(matched_fast), $(ignoreFastSmall)) 417 target = $(TargetConfig.new) 418 target.platform = $(getPlatform $(hardware)) 419 target.hardware = $(hardware) 420 target.systemname = $(systemname) 421 target.processor = $(processor) 422 target.effort = small 423 target.buildtype = $(buildtype) 424 target.matched = false 425 426 targets_list += $(target) 427 428 429 return $(targets_list) 430 431 enumerateHardwareTargets(filterstrings) = 432 regex = $(compileToRegex $(filterstrings)) 433 regex_global = $(compileToRegex $(TARGET_FILTER)) 434 hardwares = $(getHardwares) 435 targets_list = 436 foreach(buildtype, $(TARGET_BUILDTYPES)) 437 foreach(hardware, $(hardwares)) 438 foreach(effort, fast small) 439 fullname = $"$(hardware).$(effort)" 440 if $(and $(isFilterMatch $(regex), $(fullname)), $(isFilterMatch $(regex_global), $(fullname))) 441 target = $(HardwareTargetConfig.new) 442 target.platform = $(getPlatform $(hardware)) 443 target.hardware = $(hardware) 444 target.effort = $(effort) 445 target.buildtype = $(buildtype) 446 447 targets_list += $(target) 448 export 449 export 450 export 451 export 452 return $(targets_list) 453 454 isFilterMatch(regex, fullname) = 455 match $(fullname) 456 case $(regex) 457 return true 458 default 459 return false 460 461Builder. = 462 class Builder 463 464 new(manager) = 465 this.manager = $(manager) 466 return $(this) 467 468 getTargets(targetfilters) = 469 SYSTEM_LIST = Kernel Process 470 configs = $(manager.enumerateTargets $(targetfilters), false) 471 return $(configs) 472 473 getLibraryTargets(targetfilters) = 474 SYSTEM_LIST = Kernel Process 475 configs = $(manager.enumerateTargets $(targetfilters), true) 476 return $(configs) 477 478 getHardwareTargets(targetfilters) = 479 configs = $(manager.enumerateHardwareTargets $(targetfilters)) 480 return $(configs) 481 482 getToolTargets(targetfilters) = 483 TARGET_FILTER = WIN-IA32.* 484 SYSTEM_LIST = Tool 485 configs = $(manager.enumerateTargets *) 486 return $(configs) 487 488 go(targetfilters, verb) = 489 result = 490 configs = $(getTargets $(targetfilters)) 491 foreach(TARGET, $(configs)) 492 result += $,(verb)) 493 export 494 return $(result) 495 496 dumpConfigList(configs) = 497 foreach(config, $(configs)) 498 config.dump() 499 500declare public.TARGET_FILTER 501if $(defined FILTER) 502 TARGET_FILTER = $(FILTER) 503 export 504elseif $(defined targets) 505 eprintln($"Warning: `targets` �̑���� `FILTER` ���g�p���ĉ������B") 506 TARGET_FILTER = $(targets) 507 export 508else 509 if $(defined-env HORIZON_TARGETS) 510 TARGET_FILTER = $(getenv HORIZON_TARGETS) 511 export 512 elseif $(defined-env CTRSDK_TARGETS) 513 TARGET_FILTER = $(getenv CTRSDK_TARGETS) 514 export 515 else 516 TARGET_FILTER = $`(DEFAULT_FILTER) 517 export 518 export 519 520if $(grep q, $",", $(open-in-string $(TARGET_FILTER))) 521 TARGET_FILTER=$(split $",", $(TARGET_FILTER)) 522 export 523 524 525if $(defined BUILD) 526 BUILDTYPES = $(BUILD) 527 export 528else 529 BUILDTYPES = Development 530 export 531 532section 533 RS=$'[ \t,]+' 534 TARGET_BUILDTYPES = 535 export TARGET_BUILDTYPES 536 awk($(open-in-string $(lowercase $(BUILDTYPES)))) 537 case $'(debug)|(dbg)' 538 TARGET_BUILDTYPES += Debug 539 case $'dev(elop)?' 540 TARGET_BUILDTYPES += Development 541 case $'rel(ease)?' 542 TARGET_BUILDTYPES += Release 543 case $'full' 544 TARGET_BUILDTYPES += Debug Development Release 545 546 TARGET_BUILDTYPES = $(set $(TARGET_BUILDTYPES)) 547 548declare public.TARGET_BUILDTYPES 549#eprintln($"TARGET:"$(string $(TARGET_BUILDTYPES))) 550 551declare public.TARGET_MANAGER 552TARGET_MANAGER = $(TargetManager.new) 553 554declare public.BUILDER 555BUILDER = $(Builder.new $(TARGET_MANAGER)) 556 557include $(ROOT_OMAKE)/targetdefs.CTR 558include $(ROOT_OMAKE)/targetdefs.WIN 559 560