mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・yaml でモジュールサイズ拡張パラメータを指定できるように対応 ARM9FLXExpand / ARM7FLXExpand / ARM9LTDExpand / ARM7LTDExpand の四種 (ただし、同じコンポーネントのサイズは一度大きく設定すると、コンポーネントを一からビルドしなおさない限り小さくなってくれない不具合あり?) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2179 b08762b0-b915-fc4b-9d8c-17b2551a87ff
162 lines
8.0 KiB
Python
162 lines
8.0 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
|
|
import os, sys
|
|
import yaml,codecs
|
|
|
|
romparampath = sys.argv[1]
|
|
codeslist = sys.argv[2]
|
|
testtype = sys.argv[3]
|
|
#romparampath = "../romparam.yaml"
|
|
#codeslist = "../codeslist"
|
|
romparam = yaml.load(codecs.open(romparampath,'r','utf16'))
|
|
|
|
#----- 定数
|
|
rsfkey = 'RSF'
|
|
bnrkey = 'Banner'
|
|
eulakey = 'EULA'
|
|
ratingkey = 'Rating'
|
|
optkey = 'Option'
|
|
|
|
#----- gamecodes ファイルの生成 ------------------------------------
|
|
try:
|
|
gamecodes = open(codeslist,'w')
|
|
except:
|
|
print 'config.py : can not open %s file' % gamecodes
|
|
else:
|
|
gamecodes.write('TEST_TYPE = %s\n' % testtype)
|
|
gamecodes.write('GAMECODES = ')
|
|
for num in romparam.keys():
|
|
gamecodes.write(romparam[num][rsfkey]['GameCode']+' ')
|
|
finally:
|
|
gamecodes.close()
|
|
|
|
#----- gamecode 毎の各種設定ファイル生成 ---------------------------
|
|
for num in romparam.keys():
|
|
gamecode = romparam[num][rsfkey]['GameCode']
|
|
#----- gamecode dir の生成
|
|
try:
|
|
os.mkdir(gamecode)
|
|
except:
|
|
print 'config.py : can not create dir %s' % gamecode
|
|
continue
|
|
|
|
#----- gamecode.param の生成
|
|
try:
|
|
codepath = ''.join(['./',gamecode,'/',gamecode,'.param'])
|
|
codeparam = open(codepath,'w')
|
|
except:
|
|
print 'config.py : can not open %s file' % codepath
|
|
continue
|
|
else:
|
|
romspectemplate = ''
|
|
#----- MAKETAD_OPTION, ROM_SPEC_TEMPLATE の指定
|
|
debugmakerom = ''
|
|
if romparam[num].has_key(optkey) and romparam[num][optkey].has_key('SysmenuDebug') and romparam[num][optkey]['SysmenuDebug']:
|
|
debugmakerom = '.DEBUG'
|
|
if romparam[num][rsfkey].get('AppType') == 'SYSTEM':
|
|
#----- MAKEROM の指定
|
|
if romparam[num][rsfkey]['Secure']:
|
|
codeparam.write(''.join(['override MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure', debugmakerom, '.exe\n']))
|
|
else:
|
|
codeparam.write(''.join(['override MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.sys', debugmakerom, '.exe\n']))
|
|
codeparam.write('MAKETAD_OPTION += -s\n')
|
|
romspectemplate = '$(ROOT)/include/twl/specfiles/ROM-TS_sys.rsf'
|
|
else:
|
|
if debugmakerom == '.DEBUG':
|
|
codeparam.write('override MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.DEBUG.exe\n')
|
|
# 暫定対処 include/twl/specfiles 以下をきちんと使うように変更する必要がある
|
|
if testtype == 'PARENTAL':
|
|
romspectemplate = '../config/ROM-TS_nand_forPARENTAL.rsf'
|
|
else:
|
|
romspectemplate = '$(ROOT)/include/twl/specfiles/ROM-TS_nand.rsf'
|
|
if romparam[num].has_key(optkey) and romparam[num][optkey].has_key('RomSpecTemplate'):
|
|
romspectemplate = romparam[num][optkey].get('RomSpecTemplate')
|
|
codeparam.write(''.join(['ROM_SPEC_TEMPLATE = ',romspectemplate,'\n']))
|
|
|
|
#----- ROM_HEADER_TEMPLATEおよびLIBSYSCALLの指定
|
|
if romparam[num].has_key(optkey) and romparam[num][optkey].has_key('UseFinalHeader') and romparam[num][optkey]['UseFinalHeader']:
|
|
codeparam.write(''.join(['ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/',gamecode,'/rom_header_', gamecode.lower(), '.template.sbin\n']))
|
|
codeparam.write(''.join(['LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/',gamecode,'/libsyscall.a\n']))
|
|
if debugmakerom == '.DEBUG':
|
|
codeparam.write('MAKEROM_FLAGS += -DSYSCALL_C=\'$(call empath,$(LIBSYSCALL:.a=_c.bin))\'\n')
|
|
#----- サイズ拡張
|
|
if romparam[num].has_key(optkey) and debugmakerom == '.DEBUG':
|
|
if romparam[num][optkey].has_key('ARM9FLXExpand'):
|
|
codeparam.write(''.join(['MAKEROM_FLAGS += -DARM9FLX_EXPAND=', hex(romparam[num][optkey]['ARM9FLXExpand']), '\n']))
|
|
if romparam[num][optkey].has_key('ARM7FLXExpand'):
|
|
codeparam.write(''.join(['MAKEROM_FLAGS += -DARM7FLX_EXPAND=', hex(romparam[num][optkey]['ARM7FLXExpand']), '\n']))
|
|
if romparam[num][optkey].has_key('ARM9LTDExpand'):
|
|
codeparam.write(''.join(['MAKEROM_FLAGS += -DARM9LTD_EXPAND=', hex(romparam[num][optkey]['ARM9LTDExpand']), '\n']))
|
|
if romparam[num][optkey].has_key('ARM7LTDExpand'):
|
|
codeparam.write(''.join(['MAKEROM_FLAGS += -DARM7LTD_EXPAND=', hex(romparam[num][optkey]['ARM7LTDExpand']), '\n']))
|
|
#----- ROM_SPEC_OPTIONS key の抽出
|
|
if romparam[num][rsfkey].get('AppType') == 'SYSTEM':
|
|
keys = [key for key in romparam[num][rsfkey].keys() if key != 'TitleType' and key != 'eTicket' ]
|
|
else:
|
|
keys = [key for key in romparam[num][rsfkey].keys() if key != 'TitleType' and key != 'eTicket'
|
|
and key != 'AppType' and key != 'Launch' and key != 'DataOnly' and key != 'Secure']
|
|
|
|
#----- ROM_SPEC_OPTIONS 文字列の生成
|
|
rsf_opt = []
|
|
for key in keys:
|
|
if key == 'Version':
|
|
rsf_opt.append('RomVersion=%s '%(romparam[num][rsfkey][key]/256))
|
|
elif key == 'GameCode':
|
|
rsf_opt.append('%s=%s '%(key,str(romparam[num][rsfkey][key])))
|
|
elif key == 'TitleName':
|
|
if str(romparam[num][rsfkey][key]) == 'None':
|
|
rsf_opt.append('%s=%s '%(key,'TITLE_'+gamecode.upper()))
|
|
else:
|
|
rsf_opt.append('%s=%s '%(key,romparam[num][rsfkey][key]))
|
|
else:
|
|
if isinstance(romparam[num][rsfkey][key],bool):
|
|
rsf_opt.append('%s=%s '%(key,str(romparam[num][rsfkey][key]).upper()))
|
|
else:
|
|
rsf_opt.append('%s=%s '%(key,str(romparam[num][rsfkey][key])))
|
|
|
|
#----- Banner 関連 ROM_SPEC_OPTIONS
|
|
if romparam[num].has_key(bnrkey):
|
|
rsf_opt.append('%s=%s '%('BannerFile',romparam[num][bnrkey]['File']))
|
|
#----- EULA 関連 ROM_SPEC_OPTIONS
|
|
if romparam[num].has_key(eulakey):
|
|
rsf_opt.append('%s=%s '%('AgreeEULA',romparam[num][eulakey]['Agree']))
|
|
rsf_opt.append('%s=%s '%('AgreeEULAVersion',str(romparam[num][eulakey]['Version'])))
|
|
#----- Rating 関連 ROM_SPEC_OPTIONS
|
|
if romparam[num].has_key(ratingkey):
|
|
rsf_opt.append('%s=%s '%(romparam[num][ratingkey]['Ogn'],str(romparam[num][ratingkey]['Age'])))
|
|
#----- RomHeaderTemplateの指定
|
|
if romparam[num].has_key(optkey) and romparam[num][optkey].has_key('UseFinalHeader') and romparam[num][optkey]['UseFinalHeader']:
|
|
rsf_opt.append('RomHeaderTemplate=$(call empath,$(ROM_HEADER_TEMPLATE)) ')
|
|
#----- ROM_SPEC_OPTIONS の指定
|
|
rsf_opt_str = ''.join(rsf_opt)
|
|
codeparam.write('ROM_SPEC_PARAM = %s\n' % rsf_opt_str)
|
|
#----- TITLE_VERSION_LO の指定
|
|
codeparam.write('TITLE_VERSION_LO = %d\n' % (romparam[num][rsfkey]['Version']%256))
|
|
#----- TARGET_SUFFIX の指定
|
|
codeparam.write('TARGET_SUFFIX = %s\n' % ('tad' if romparam[num][rsfkey]['Media'] == 'NAND' else 'srl'))
|
|
finally:
|
|
codeparam.close()
|
|
|
|
#----- banner.bsf の生成
|
|
try:
|
|
bsfpath = ''.join(['./',gamecode,'/banner.bsf'])
|
|
bsffile = codecs.open(bsfpath,'w','utf_16')
|
|
except:
|
|
print 'config.py : can not open %s file' % bsfpath
|
|
continue
|
|
else:
|
|
#----- バージョンの指定
|
|
bsffile.write('%s: %s\r\n'%(key,str(romparam[num][bnrkey]['Version'])))
|
|
|
|
#----- タイトル文字列の指定(言語別)
|
|
for key in ('JP','EN','FR','GE','IT','SP','CN','HN'):
|
|
if romparam[num][bnrkey].has_key(key):
|
|
bsffile.write('%s:'% key)
|
|
for line in romparam[num][bnrkey][key]:
|
|
bsffile.write(' "%s"\r\n'% line)
|
|
else:
|
|
titlestr = ''.join(['"TITLE_',gamecode,'"\r\n',' "LANG_',key,'"\r\n'])
|
|
bsffile.write('%s: %s'%(key,titlestr))
|
|
finally:
|
|
bsffile.close() |