Files
OpenCL-CTS/test_conformance/generate_spirv_offline.py
Stuart Brady 0d96c198ee Reimplement invocation of offline compilation program
This change reimplements offline compiler invocation, using a new command
line interface that allows the passing of relevant CL device information
to the offline compiler.  The information that is passed is as follows:

 * CL_DEVICE_ADDRESS_BITS
 * CL_DEVICE_EXTENSIONS
 * CL_DEVICE_IL_VERSION (with --compilation-mode=spir-v only)
 * CL_DEVICE_VERSION

The interface for the offline compiler script is as follows:

   usage: cl_offline_compiler --source FILE --output FILE
                              --cl-device-info FILE --mode MODE
                              -- [BUILD_OPTIONS [BUILD_OPTIONS ...]]

   positional arguments:
     BUILD_OPTIONS          additional options to pass to the compiler

   optional arguments:
     --source FILE          OpenCL C source file to compile
     --output FILE          SPIR-V or binary file to create
     --cl-device-info FILE  OpenCL device info file
     --mode                 compilation mode (spir-v or binary)

The OpenCL C version for compilation is now specified in BUILD_OPTIONS,
as normal for online compilation, i.e. with -cl-std=VERSION.

Signed-off-by: Stuart Brady <stuart.brady@arm.com>
2019-08-12 10:18:06 +01:00

54 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python
from __future__ import print_function
import sys
import os
import traceback
if len(sys.argv) != 3:
print('Usage: "generate_spirv_offline.py <compilation_cache_dir> <cl_device_info_file>"')
exit(1)
compilation_cache_dir = sys.argv[1]
cl_device_info_filename = sys.argv[2]
def generate_spirv():
print("Generating SPIR-V files")
build_options = ''
if os.path.exists(compilation_cache_dir):
for root, dirs, files in os.walk(compilation_cache_dir):
for file in files:
if file.endswith('.cl'):
options_file_name = file[:-2] + "options"
if os.path.exists(os.path.join(root, options_file_name)):
optFile = open (os.path.join(root, options_file_name), 'r')
build_options = optFile.readline().strip()
print(build_options)
source_filename = os.path.join(root, file)
output_filename = os.path.join(root, file[:-2]) + "spv"
command_line = ("cl_offline_compiler" +
" --source=" + source_filename +
" --output=" + output_filename +
" --cl-device-info=" + cl_device_info_filename +
" --mode=spir-v -- " +
'"' + build_options + '"')
print(command_line)
os.system(command_line)
return 0
def main():
try:
generate_spirv()
except Exception:
traceback.print_exc(file=sys.stdout)
sys.exit(0)
if __name__ == "__main__":
main()