Skip to content

Commit 3ee8095

Browse files
authored
🗂️ Add support for version scripts (#246)
Only used when building shared objects.
1 parent c4c768a commit 3ee8095

File tree

6 files changed

+20
-3
lines changed

6 files changed

+20
-3
lines changed

docs/reference/defs.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ TODO
100100
<a href="#ll_library-compile_string_flags">compile_string_flags</a>, <a href="#ll_library-defines">defines</a>, <a href="#ll_library-depends_on_llvm">depends_on_llvm</a>, <a href="#ll_library-emit">emit</a>, <a href="#ll_library-experimental_device_intrinsics">experimental_device_intrinsics</a>,
101101
<a href="#ll_library-exposed_angled_includes">exposed_angled_includes</a>, <a href="#ll_library-exposed_defines">exposed_defines</a>, <a href="#ll_library-exposed_hdrs">exposed_hdrs</a>, <a href="#ll_library-exposed_includes">exposed_includes</a>,
102102
<a href="#ll_library-exposed_interfaces">exposed_interfaces</a>, <a href="#ll_library-includes">includes</a>, <a href="#ll_library-interfaces">interfaces</a>, <a href="#ll_library-sanitize">sanitize</a>, <a href="#ll_library-shared_object_link_flags">shared_object_link_flags</a>,
103-
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>)</code></pre>
103+
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>, <a href="#ll_library-version_script">version_script</a>)</code></pre>
104104
Creates a static archive.
105105

106106
Example:
@@ -138,6 +138,7 @@ Example:
138138
| <a id="ll_library-shared_object_link_flags"></a>`shared_object_link_flags` | <code>List of strings</code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects.<br><br>Used if `emit` includes `"shared_object"`. |
139139
| <a id="ll_library-shared_object_link_string_flags"></a>`shared_object_link_string_flags` | <code><a href="https://bazel.build/concepts/labels">List of labels</a></code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects in the form of `string_flag`s.<br><br>See `compile_string_flags` for semantics.<br><br>Used if `emit` includes `"shared_object"`. |
140140
| <a id="ll_library-toolchain_configuration"></a>`toolchain_configuration` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>"@rules_ll//ll:current_ll_toolchain_configuration"</code>.<br><br> TODO |
141+
| <a id="ll_library-version_script"></a>`version_script` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>None</code>.<br><br> Optional version script used during shared object linking.<br><br>Used if `emit` includes `"shared_object"`. |
141142

142143

143144
<a id="ll_test"></a>

docs/reference/ll.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ Example:
6060
<a href="#ll_library-compile_string_flags">compile_string_flags</a>, <a href="#ll_library-defines">defines</a>, <a href="#ll_library-depends_on_llvm">depends_on_llvm</a>, <a href="#ll_library-emit">emit</a>, <a href="#ll_library-experimental_device_intrinsics">experimental_device_intrinsics</a>,
6161
<a href="#ll_library-exposed_angled_includes">exposed_angled_includes</a>, <a href="#ll_library-exposed_defines">exposed_defines</a>, <a href="#ll_library-exposed_hdrs">exposed_hdrs</a>, <a href="#ll_library-exposed_includes">exposed_includes</a>,
6262
<a href="#ll_library-exposed_interfaces">exposed_interfaces</a>, <a href="#ll_library-includes">includes</a>, <a href="#ll_library-interfaces">interfaces</a>, <a href="#ll_library-sanitize">sanitize</a>, <a href="#ll_library-shared_object_link_flags">shared_object_link_flags</a>,
63-
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>)</code></pre>
63+
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>, <a href="#ll_library-version_script">version_script</a>)</code></pre>
6464
Creates a static archive.
6565

6666
Example:
@@ -98,6 +98,7 @@ Example:
9898
| <a id="ll_library-shared_object_link_flags"></a>`shared_object_link_flags` | <code>List of strings</code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects.<br><br>Used if `emit` includes `"shared_object"`. |
9999
| <a id="ll_library-shared_object_link_string_flags"></a>`shared_object_link_string_flags` | <code><a href="https://bazel.build/concepts/labels">List of labels</a></code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects in the form of `string_flag`s.<br><br>See `compile_string_flags` for semantics.<br><br>Used if `emit` includes `"shared_object"`. |
100100
| <a id="ll_library-toolchain_configuration"></a>`toolchain_configuration` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>"@rules_ll//ll:current_ll_toolchain_configuration"</code>.<br><br> TODO |
101+
| <a id="ll_library-version_script"></a>`version_script` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>None</code>.<br><br> Optional version script used during shared object linking.<br><br>Used if `emit` includes `"shared_object"`. |
101102

102103

103104
<a id="ll_test"></a>

docs/rules/defs.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ TODO
100100
<a href="#ll_library-compile_string_flags">compile_string_flags</a>, <a href="#ll_library-defines">defines</a>, <a href="#ll_library-depends_on_llvm">depends_on_llvm</a>, <a href="#ll_library-emit">emit</a>, <a href="#ll_library-experimental_device_intrinsics">experimental_device_intrinsics</a>,
101101
<a href="#ll_library-exposed_angled_includes">exposed_angled_includes</a>, <a href="#ll_library-exposed_defines">exposed_defines</a>, <a href="#ll_library-exposed_hdrs">exposed_hdrs</a>, <a href="#ll_library-exposed_includes">exposed_includes</a>,
102102
<a href="#ll_library-exposed_interfaces">exposed_interfaces</a>, <a href="#ll_library-includes">includes</a>, <a href="#ll_library-interfaces">interfaces</a>, <a href="#ll_library-sanitize">sanitize</a>, <a href="#ll_library-shared_object_link_flags">shared_object_link_flags</a>,
103-
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>)</code></pre>
103+
<a href="#ll_library-shared_object_link_string_flags">shared_object_link_string_flags</a>, <a href="#ll_library-toolchain_configuration">toolchain_configuration</a>, <a href="#ll_library-version_script">version_script</a>)</code></pre>
104104
Creates a static archive.
105105

106106
Example:
@@ -138,6 +138,7 @@ Example:
138138
| <a id="ll_library-shared_object_link_flags"></a>`shared_object_link_flags` | <code>List of strings</code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects.<br><br>Used if `emit` includes `"shared_object"`. |
139139
| <a id="ll_library-shared_object_link_string_flags"></a>`shared_object_link_string_flags` | <code><a href="https://bazel.build/concepts/labels">List of labels</a></code>, optional, defaults to <code>[]</code>.<br><br> Flags for the linker when emitting shared objects in the form of `string_flag`s.<br><br>See `compile_string_flags` for semantics.<br><br>Used if `emit` includes `"shared_object"`. |
140140
| <a id="ll_library-toolchain_configuration"></a>`toolchain_configuration` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>"@rules_ll//ll:current_ll_toolchain_configuration"</code>.<br><br> TODO |
141+
| <a id="ll_library-version_script"></a>`version_script` | <code><a href="https://bazel.build/concepts/labels">Label</a></code>, optional, defaults to <code>None</code>.<br><br> Optional version script used during shared object linking.<br><br>Used if `emit` includes `"shared_object"`. |
141142

142143

143144
<a id="ll_test"></a>

ll/args.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,8 +556,12 @@ def link_executable_args(ctx, in_files, out_file, mode):
556556
args.add_all(flags[BuildSettingInfo].value.split(":"))
557557
elif mode == "shared_object":
558558
args.add_all(ctx.attr.shared_object_link_flags)
559+
559560
for flags in ctx.attr.shared_object_link_string_flags:
560561
args.add_all(flags[BuildSettingInfo].value.split(":"))
562+
563+
if ctx.file.version_script != None:
564+
args.add(ctx.file.version_script, format = "--version-script=%s")
561565
else:
562566
fail("Invalid linking mode")
563567

ll/attributes.bzl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,13 @@ LIBRARY_ATTRS = {
295295
Used if `emit` includes `"shared_object"`.
296296
""",
297297
),
298+
"version_script": attr.label(
299+
doc = """Optional version script used during shared object linking.
300+
301+
Used if `emit` includes `"shared_object"`.
302+
""",
303+
allow_single_file = True,
304+
),
298305
}
299306

300307
BINARY_ATTRS = {

ll/inputs.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ def link_shared_object_inputs(ctx, in_files):
131131
in_files +
132132
ctx.files.data +
133133
ctx.files.deps +
134+
(
135+
[ctx.file.version_script] if ctx.file.version_script != None else []
136+
) +
134137
toolchain.compiler_runtime +
135138
toolchain.cpp_abilib +
136139
toolchain.cpp_stdlib +

0 commit comments

Comments
 (0)