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