xref: /aosp_15_r20/external/angle/tools/glslang/update_glslang_binary.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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