1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/python3 2*8975f5c5SAndroid Build Coastguard Worker# 3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2019 The ANGLE Project Authors. All rights reserved. 4*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 6*8975f5c5SAndroid Build Coastguard Worker# 7*8975f5c5SAndroid Build Coastguard Worker# update_glslang_binary.py: 8*8975f5c5SAndroid Build Coastguard Worker# Helper script to update the version of glslang in cloud storage. 9*8975f5c5SAndroid Build Coastguard Worker# This glslang is used to precompile Vulkan shaders. This script builds 10*8975f5c5SAndroid Build Coastguard Worker# glslang and uploads it to the bucket for Windows or Linux. It 11*8975f5c5SAndroid Build Coastguard Worker# currently only works on Windows and Linux. It also will update the 12*8975f5c5SAndroid Build Coastguard Worker# hashes stored in the tree. For more info see README.md in this folder. 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Workerimport os 15*8975f5c5SAndroid Build Coastguard Workerimport platform 16*8975f5c5SAndroid Build Coastguard Workerimport shutil 17*8975f5c5SAndroid Build Coastguard Workerimport subprocess 18*8975f5c5SAndroid Build Coastguard Workerimport sys 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Workersys.path.append('tools/') 21*8975f5c5SAndroid Build Coastguard Workerimport angle_tools 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Workergn_args = """is_clang = true 24*8975f5c5SAndroid Build Coastguard Workeris_debug = false 25*8975f5c5SAndroid Build Coastguard Workerangle_enable_vulkan = true""" 26*8975f5c5SAndroid Build Coastguard Worker 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Workerdef main(): 29*8975f5c5SAndroid Build Coastguard Worker if not angle_tools.is_windows and not angle_tools.is_linux: 30*8975f5c5SAndroid Build Coastguard Worker print('Script must be run on Linux or Windows.') 31*8975f5c5SAndroid Build Coastguard Worker return 1 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker # Step 1: Generate an output directory 34*8975f5c5SAndroid Build Coastguard Worker out_dir = os.path.join('out', 'glslang_release') 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard Worker if not os.path.isdir(out_dir): 37*8975f5c5SAndroid Build Coastguard Worker os.mkdir(out_dir) 38*8975f5c5SAndroid Build Coastguard Worker 39*8975f5c5SAndroid Build Coastguard Worker args_gn = os.path.join(out_dir, 'args.gn') 40*8975f5c5SAndroid Build Coastguard Worker if not os.path.isfile(args_gn): 41*8975f5c5SAndroid Build Coastguard Worker with open(args_gn, 'w') as f: 42*8975f5c5SAndroid Build Coastguard Worker f.write(gn_args) 43*8975f5c5SAndroid Build Coastguard Worker f.close() 44*8975f5c5SAndroid Build Coastguard Worker 45*8975f5c5SAndroid Build Coastguard Worker gn_exe = angle_tools.get_exe_name('gn', '.bat') 46*8975f5c5SAndroid Build Coastguard Worker 47*8975f5c5SAndroid Build Coastguard Worker # Step 2: Generate the ninja build files in the output directory 48*8975f5c5SAndroid Build Coastguard Worker if subprocess.call([gn_exe, 'gen', out_dir]) != 0: 49*8975f5c5SAndroid Build Coastguard Worker print('Error calling gn') 50*8975f5c5SAndroid Build Coastguard Worker return 2 51*8975f5c5SAndroid Build Coastguard Worker 52*8975f5c5SAndroid Build Coastguard Worker # Step 3: Compile glslang_validator 53*8975f5c5SAndroid Build Coastguard Worker if subprocess.call(['ninja', '-C', out_dir, 'glslang_validator']) != 0: 54*8975f5c5SAndroid Build Coastguard Worker print('Error calling ninja') 55*8975f5c5SAndroid Build Coastguard Worker return 3 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker # Step 4: Copy glslang_validator to the tools/glslang directory 58*8975f5c5SAndroid Build Coastguard Worker glslang_exe = angle_tools.get_exe_name('glslang_validator', '.exe') 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker glslang_src = os.path.join(out_dir, glslang_exe) 61*8975f5c5SAndroid Build Coastguard Worker glslang_dst = os.path.join(sys.path[0], glslang_exe) 62*8975f5c5SAndroid Build Coastguard Worker 63*8975f5c5SAndroid Build Coastguard Worker shutil.copy(glslang_src, glslang_dst) 64*8975f5c5SAndroid Build Coastguard Worker 65*8975f5c5SAndroid Build Coastguard Worker # Step 5: Delete the build directory 66*8975f5c5SAndroid Build Coastguard Worker shutil.rmtree(out_dir) 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker # Step 6: Upload to cloud storage 69*8975f5c5SAndroid Build Coastguard Worker if not angle_tools.upload_to_google_storage('angle-glslang-validator', [glslang_dst]): 70*8975f5c5SAndroid Build Coastguard Worker print('Error upload to cloud storage') 71*8975f5c5SAndroid Build Coastguard Worker return 4 72*8975f5c5SAndroid Build Coastguard Worker 73*8975f5c5SAndroid Build Coastguard Worker # Step 7: Stage new SHA to git 74*8975f5c5SAndroid Build Coastguard Worker if not angle_tools.stage_google_storage_sha1([glslang_dst]): 75*8975f5c5SAndroid Build Coastguard Worker print('Error running git add') 76*8975f5c5SAndroid Build Coastguard Worker return 5 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker print('') 79*8975f5c5SAndroid Build Coastguard Worker print('The updated SHA has been staged for commit. Please commit and upload.') 80*8975f5c5SAndroid Build Coastguard Worker print('Suggested commit message:') 81*8975f5c5SAndroid Build Coastguard Worker print('----------------------------') 82*8975f5c5SAndroid Build Coastguard Worker print('') 83*8975f5c5SAndroid Build Coastguard Worker print('Update glslang_validator binary for %s.' % platform.system()) 84*8975f5c5SAndroid Build Coastguard Worker print('') 85*8975f5c5SAndroid Build Coastguard Worker print('This binary was updated using %s.' % os.path.basename(__file__)) 86*8975f5c5SAndroid Build Coastguard Worker print('Please see instructions in tools/glslang/README.md.') 87*8975f5c5SAndroid Build Coastguard Worker print('') 88*8975f5c5SAndroid Build Coastguard Worker print('Bug: None') 89*8975f5c5SAndroid Build Coastguard Worker 90*8975f5c5SAndroid Build Coastguard Worker return 0 91*8975f5c5SAndroid Build Coastguard Worker 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__': 94*8975f5c5SAndroid Build Coastguard Worker sys.exit(main()) 95