You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
3 weeks ago
|
# Custom python script to enable/disable burst compilations. Disabling burst is currently required for Android tests.
|
||
|
# Source: https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/develop/.yamato/disable-burst-if-requested.py
|
||
|
|
||
|
import argparse
|
||
|
import json
|
||
|
import os
|
||
|
|
||
|
|
||
|
args = None
|
||
|
platform_plugin_definition = None
|
||
|
|
||
|
|
||
|
def resolve_target(platform):
|
||
|
resolved_target = platform
|
||
|
if 'StandaloneWindows' in platform:
|
||
|
resolved_target = 'StandaloneWindows'
|
||
|
elif 'StandaloneLinux' in platform:
|
||
|
resolved_target = 'StandaloneLinux64'
|
||
|
|
||
|
return resolved_target
|
||
|
|
||
|
|
||
|
def create_config(settings_path, platform):
|
||
|
config_name = os.path.join(settings_path, 'BurstAotSettings_{}.json'.format(resolve_target(platform)))
|
||
|
monobehaviour = {
|
||
|
'm_Enabled': True,
|
||
|
'm_EditorHideFlags': 0,
|
||
|
'm_Name': "",
|
||
|
'm_EditorClassIdentifier': 'Unity.Burst.Editor:Unity.Burst.Editor:BurstPlatformAotSettings',
|
||
|
'EnableOptimisations': True,
|
||
|
'EnableSafetyChecks': False,
|
||
|
'EnableBurstCompilation': True
|
||
|
}
|
||
|
|
||
|
data = {'MonoBehaviour': monobehaviour}
|
||
|
with open(config_name, 'w') as f:
|
||
|
json.dump(data, f)
|
||
|
return config_name
|
||
|
|
||
|
|
||
|
def get_or_create_AOT_config(project_path, platform):
|
||
|
settings_path = os.path.join(project_path, 'ProjectSettings')
|
||
|
if not os.path.isdir(settings_path):
|
||
|
os.mkdir(settings_path)
|
||
|
config_names = [os.path.join(settings_path, filename) for filename in os.listdir(settings_path) if filename.startswith("BurstAotSettings_{}".format(resolve_target(platform)))]
|
||
|
if not config_names:
|
||
|
return [create_config(settings_path, platform)]
|
||
|
return config_names
|
||
|
|
||
|
|
||
|
def disable_AOT(project_path, platform):
|
||
|
config_names = get_or_create_AOT_config(project_path, platform)
|
||
|
for config_name in config_names:
|
||
|
set_AOT(config_name, False)
|
||
|
|
||
|
|
||
|
def enable_AOT(project_path, platform):
|
||
|
config_names = get_or_create_AOT_config(project_path, platform)
|
||
|
for config_name in config_names:
|
||
|
set_AOT(config_name, True)
|
||
|
|
||
|
|
||
|
def set_AOT(config_file, status):
|
||
|
config = None
|
||
|
with open(config_file, 'r') as f:
|
||
|
config = json.load(f)
|
||
|
|
||
|
assert config is not None, 'AOT settings not found; did the burst-enabled build finish successfully?'
|
||
|
|
||
|
config['MonoBehaviour']['EnableBurstCompilation'] = status
|
||
|
with open(config_file, 'w') as f:
|
||
|
json.dump(config, f)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
enable_burst = os.environ.get('ENABLE_BURST_COMPILATION', 'true').strip().lower()
|
||
|
if enable_burst == 'true':
|
||
|
print('BURST COMPILATION: ENABLED')
|
||
|
elif enable_burst == 'false':
|
||
|
print('BURST COMPILATION: DISABLED')
|
||
|
disable_AOT(args.project_path, args.platform)
|
||
|
else:
|
||
|
sys.exit('BURST COMPILATION: unexpected value: {}'.format(enable_burst))
|
||
|
|
||
|
|
||
|
def parse_args():
|
||
|
global args
|
||
|
parser = argparse.ArgumentParser(description='This tool disables burst AOT compilation')
|
||
|
parser.add_argument('--project-path', help='Specify the location of the unity project.')
|
||
|
parser.add_argument('--platform', help="Platform to be used to run the build.")
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
parse_args()
|
||
|
main()
|