Skip to content

Commit 768cba1

Browse files
committed
[SYCL] generate_sycl_abi_symbols CMake target
Currently developers have to manually run `abi_check.py`, which is error prone. This patch adds a custom CMake target `generate_sycl_abi_symbols` that runs the script will the correct arguments and dependencies. `abi_check.py` has also been updated to take `--llvm-bin-path` as an argument to replace having to specify `LLVM_BIN_PATH`. The old functionality is still supported.
1 parent c2c2022 commit 768cba1

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

sycl/tools/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,20 @@ if (SYCL_ENABLE_XPTI_TRACING)
1616
endif()
1717
endif()
1818

19+
if(WIN32)
20+
set(abi_symbols_dump "${PROJECT_SOURCE_DIR}/test/abi/sycl_symbols_windows.dump")
21+
else()
22+
set(abi_symbols_dump "${PROJECT_SOURCE_DIR}/test/abi/sycl_symbols_linux.dump")
23+
endif()
24+
add_custom_command(
25+
OUTPUT "${abi_symbols_dump}"
26+
COMMAND "${Python3_EXECUTABLE}"
27+
"${CMAKE_CURRENT_SOURCE_DIR}/abi_check.py"
28+
--mode dump_symbols
29+
--llvm-bin-path "$<TARGET_FILE_DIR:llvm-readobj>"
30+
--output "${abi_symbols_dump}"
31+
"$<IF:$<PLATFORM_ID:Windows>,$<TARGET_FILE:sycl>,$<TARGET_LINKER_FILE:sycl>>"
32+
DEPENDS sycl llvm-readobj
33+
COMMENT "Generating ABI symbols dump for SYCL"
34+
)
35+
add_custom_target(generate_sycl_abi_symbols DEPENDS "${abi_symbols_dump}")

sycl/tools/abi_check.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@
1010
import re
1111

1212

13-
def get_llvm_bin_path():
14-
if "LLVM_BIN_PATH" in os.environ:
15-
return os.environ["LLVM_BIN_PATH"]
16-
return ""
17-
18-
1913
def match_symbol(sym_binding, sym_type, sym_section):
2014
if sym_binding is None or sym_type is None or sym_section is None:
2115
return False
@@ -65,7 +59,7 @@ def parse_readobj_output(output):
6559
return parsed_symbols
6660

6761

68-
def dump_symbols(target_path, output):
62+
def dump_symbols(target_path, output, llvm_bin_path):
6963
with open(output, "w") as out:
7064
out.write(
7165
"################################################################################"
@@ -93,7 +87,7 @@ def dump_symbols(target_path, output):
9387
readobj_opts = "--coff-exports" if os.name == "nt" else "--syms"
9488
readobj_out = subprocess.check_output(
9589
[
96-
os.path.join(get_llvm_bin_path(), "llvm-readobj"),
90+
os.path.join(llvm_bin_path, "llvm-readobj"),
9791
readobj_opts,
9892
target_path,
9993
]
@@ -113,7 +107,7 @@ def compare_results(ref_records, records):
113107

114108
# Dumps symbols from from binary at target_path and compares with a snapshot
115109
# stored at ref_path. Reports new and absent symbols (if there are any).
116-
def check_symbols(ref_path, target_path):
110+
def check_symbols(ref_path, target_path, llvm_bin_path):
117111
with open(ref_path, "r") as ref:
118112
ref_symbols = []
119113
for line in ref:
@@ -123,7 +117,7 @@ def check_symbols(ref_path, target_path):
123117
readobj_opts = "--coff-exports" if os.name == "nt" else "--syms"
124118
readobj_out = subprocess.check_output(
125119
[
126-
os.path.join(get_llvm_bin_path(), "llvm-readobj"),
120+
os.path.join(llvm_bin_path, "llvm-readobj"),
127121
readobj_opts,
128122
target_path,
129123
]
@@ -171,20 +165,27 @@ def main():
171165
)
172166
parser.add_argument("--reference", type=str, help="Reference ABI dump")
173167
parser.add_argument("--output", type=str, help="Output for dump modes")
168+
parser.add_argument(
169+
"--llvm-bin-path",
170+
type=str,
171+
default=os.getenv("LLVM_BIN_PATH", ""),
172+
help=
173+
"Path to LLVM binaries. Can be overridden by LLVM_BIN_PATH environment variable."
174+
)
174175
parser.add_argument("target_library", type=str)
175176

176177
args = parser.parse_args()
177178

178179
if args.mode == "check_symbols":
179180
if args.reference is None:
180-
print("Please specify --reference option. Quiting.")
181+
print("Please specify --reference option. Quitting.")
181182
sys.exit(-2)
182-
check_symbols(args.reference, args.target_library)
183+
check_symbols(args.reference, args.target_library, args.llvm_bin_path)
183184
elif args.mode == "dump_symbols":
184185
if args.output is None:
185-
print("Please specify --output option. Quiting.")
186+
print("Please specify --output option. Quitting.")
186187
sys.exit(-2)
187-
dump_symbols(args.target_library, args.output)
188+
dump_symbols(args.target_library, args.output, args.llvm_bin_path)
188189

189190

190191
if __name__ == "__main__":

0 commit comments

Comments
 (0)