Edit

kc3-lang/angle/tools/glslang/update_glslang_binary.py

Branch :

  • Show log

    Commit

  • Author : Shahbaz Youssefi
    Date : 2019-11-25 15:19:52
    Hash : 7012250a
    Message : Infrastructure for uploading flex/bison binaries The binaries are retrieved from MSys2 on windows and built from source on Linux. Updates to these binaries should be infrequent enough to not warrant a completely automated system. Bug: angleproject:3419 Change-Id: I282f9ca14059d1fe0d88f2ffd31d02df0ea6b88f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1940571 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>

  • tools/glslang/update_glslang_binary.py
  • #!/usr/bin/python2
    #
    # Copyright 2019 The ANGLE Project Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.
    #
    # update_glslang_binary.py:
    #   Helper script to update the version of glslang in cloud storage.
    #   This glslang is used to precompile Vulkan shaders. This script builds
    #   glslang and uploads it to the bucket for Windows or Linux. It
    #   currently only works on Windows and Linux. It also will update the
    #   hashes stored in the tree. For more info see README.md in this folder.
    
    import os
    import platform
    import shutil
    import subprocess
    import sys
    
    sys.path.append('tools/')
    import angle_tools
    
    gn_args = """is_clang = true
    is_debug = false
    angle_enable_vulkan = true"""
    
    
    def main():
        if not angle_tools.is_windows and not angle_tools.is_linux:
            print('Script must be run on Linux or Windows.')
            return 1
    
        # Step 1: Generate an output directory
        out_dir = os.path.join('out', 'glslang_release')
    
        if not os.path.isdir(out_dir):
            os.mkdir(out_dir)
    
        args_gn = os.path.join(out_dir, 'args.gn')
        if not os.path.isfile(args_gn):
            with open(args_gn, 'w') as f:
                f.write(gn_args)
                f.close()
    
        gn_exe = angle_tools.get_exe_name('gn', '.bat')
    
        # Step 2: Generate the ninja build files in the output directory
        if subprocess.call([gn_exe, 'gen', out_dir]) != 0:
            print('Error calling gn')
            return 2
    
        # Step 3: Compile glslang_validator
        if subprocess.call(['ninja', '-C', out_dir, 'glslang_validator']) != 0:
            print('Error calling ninja')
            return 3
    
        # Step 4: Copy glslang_validator to the tools/glslang directory
        glslang_exe = angle_tools.get_exe_name('glslang_validator', '.exe')
    
        glslang_src = os.path.join(out_dir, glslang_exe)
        glslang_dst = os.path.join(sys.path[0], glslang_exe)
    
        shutil.copy(glslang_src, glslang_dst)
    
        # Step 5: Delete the build directory
        shutil.rmtree(out_dir)
    
        # Step 6: Upload to cloud storage
        if not angle_tools.upload_to_google_storage('angle-glslang-validator', [glslang_dst]):
            print('Error upload to cloud storage')
            return 4
    
        # Step 7: Stage new SHA to git
        if not angle_tools.stage_google_storage_sha1([glslang_dst]):
            print('Error running git add')
            return 5
    
        print('')
        print('The updated SHA has been staged for commit. Please commit and upload.')
        print('Suggested commit message:')
        print('----------------------------')
        print('')
        print('Update glslang_validator binary for %s.' % platform.system())
        print('')
        print('This binary was updated using %s.' % os.path.basename(__file__))
        print('Please see instructions in tools/glslang/README.md.')
        print('')
        print('Bug: None')
    
        return 0
    
    
    if __name__ == '__main__':
        sys.exit(main())