Skip to content

Commit aab646b

Browse files
committed
Add helpers to set the SDK Version module metadata.
1 parent c6a10c1 commit aab646b

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/core/module.jl

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,30 @@ function Base.setindex!(iter::ModuleFlagDict, val::Metadata,
267267
(name, behavior)::Tuple{String, API.LLVMModuleFlagBehavior})
268268
API.LLVMAddModuleFlag(iter.mod, behavior, name, length(name), val)
269269
end
270+
271+
272+
## sdk version
273+
274+
export sdk_version, sdk_version!
275+
276+
function sdk_version!(mod::Module, version::VersionNumber)
277+
entries = Int32[version.major]
278+
if version.minor != 0 || version.patch != 0
279+
push!(entries, version.minor)
280+
if version.patch != 0
281+
push!(entries, version.patch)
282+
end
283+
# cannot represent prerelease or build metadata
284+
end
285+
md = Metadata(ConstantDataArray(entries; ctx=context(mod)))
286+
287+
flags(mod)["SDK Version", LLVM.API.LLVMModuleFlagBehaviorWarning] = md
288+
end
289+
290+
function sdk_version(mod::Module)
291+
haskey(flags(mod), "SDK Version") || return nothing
292+
md = flags(mod)["SDK Version"]
293+
c = Value(md; ctx=context(mod))
294+
entries = collect(c)
295+
VersionNumber(map(val->convert(Int, val), entries)...)
296+
end

test/core.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,10 @@ end
10151015

10161016
@test mod_flags["foobar"] == md
10171017
@test_throws KeyError mod_flags["foobaz"]
1018+
1019+
@test sdk_version(mod) === nothing
1020+
sdk_version!(mod, v"1.2.3")
1021+
@test sdk_version(mod) == v"1.2.3"
10181022
end
10191023

10201024
# metadata iteration

0 commit comments

Comments
 (0)