mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-18 22:09:01 +00:00
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>
54 lines
1.7 KiB
Python
Executable File
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()
|
|
|
|
|
|
|