[llvm] cb5b25c - [llvm-c] Added a C-API binding to query the LLVM version
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 7 02:18:43 PST 2022
Author: Wenzel Jakob
Date: 2022-12-07T11:18:32+01:00
New Revision: cb5b25c587833317fd0bb93daf702f4c47048fb1
URL: https://github.com/llvm/llvm-project/commit/cb5b25c587833317fd0bb93daf702f4c47048fb1
DIFF: https://github.com/llvm/llvm-project/commit/cb5b25c587833317fd0bb93daf702f4c47048fb1.diff
LOG: [llvm-c] Added a C-API binding to query the LLVM version
The LLVM C bindings currently offer no way to query the version string
dynamically. This is a useful feature in situations where a program
isn't compiled against a specific version of LLVM but rather loads it
dynamically (e.g. using dlopen()).
In situations where the shared library filename doesn't reveal the
version (e.g. LLVM-C.dll) and to adapt to version-specific API
differences, it is then useful to be able to query the version string by
calling the proposed LLVMGetVersion function.
Differential Revision: https://reviews.llvm.org/D139381
Added:
llvm/unittests/IR/CoreBindings.cpp
Modified:
llvm/include/llvm-c/Core.h
llvm/lib/IR/Core.cpp
llvm/unittests/IR/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h
index 124bea4a67e01..1a02a07c783f6 100644
--- a/llvm/include/llvm-c/Core.h
+++ b/llvm/include/llvm-c/Core.h
@@ -479,6 +479,16 @@ void LLVMInitializeCore(LLVMPassRegistryRef R);
@see ManagedStatic */
void LLVMShutdown(void);
+/*===-- Version query -----------------------------------------------------===*/
+
+/**
+ * Return the major, minor, and patch version of LLVM
+ *
+ * The version components are returned via the function's three output
+ * parameters or skipped if a NULL pointer was supplied.
+ */
+void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch);
+
/*===-- Error handling ----------------------------------------------------===*/
char *LLVMCreateMessage(const char *Message);
diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp
index 1235c46f8516c..f376bfb9d0fda 100644
--- a/llvm/lib/IR/Core.cpp
+++ b/llvm/lib/IR/Core.cpp
@@ -61,6 +61,17 @@ void LLVMShutdown() {
llvm_shutdown();
}
+/*===-- Version query -----------------------------------------------------===*/
+
+void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch) {
+ if (Major)
+ *Major = LLVM_VERSION_MAJOR;
+ if (Minor)
+ *Minor = LLVM_VERSION_MINOR;
+ if (Patch)
+ *Patch = LLVM_VERSION_PATCH;
+}
+
/*===-- Error handling ----------------------------------------------------===*/
char *LLVMCreateMessage(const char *Message) {
diff --git a/llvm/unittests/IR/CMakeLists.txt b/llvm/unittests/IR/CMakeLists.txt
index 2ce8596446d62..12d865026d7fd 100644
--- a/llvm/unittests/IR/CMakeLists.txt
+++ b/llvm/unittests/IR/CMakeLists.txt
@@ -46,6 +46,7 @@ add_llvm_unittest(IRTests
VectorTypesTest.cpp
VerifierTest.cpp
VPIntrinsicTest.cpp
+ CoreBindings.cpp
)
target_link_libraries(IRTests PRIVATE LLVMTestingSupport)
diff --git a/llvm/unittests/IR/CoreBindings.cpp b/llvm/unittests/IR/CoreBindings.cpp
new file mode 100644
index 0000000000000..037926462c792
--- /dev/null
+++ b/llvm/unittests/IR/CoreBindings.cpp
@@ -0,0 +1,26 @@
+//===- llvm/unittest/IR/CoreBindings.cpp - Tests for C-API bindings -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm-c/Core.h"
+#include "llvm/Config/llvm-config.h"
+#include "gtest/gtest.h"
+
+namespace {
+
+TEST(CoreBindings, VersionTest) {
+ // Test ability to ignore output parameters
+ LLVMGetVersion(nullptr, nullptr, nullptr);
+
+ unsigned Major, Minor, Patch;
+ LLVMGetVersion(&Major, &Minor, &Patch);
+ EXPECT_EQ(Major, (unsigned)LLVM_VERSION_MAJOR);
+ EXPECT_EQ(Minor, (unsigned)LLVM_VERSION_MINOR);
+ EXPECT_EQ(Patch, (unsigned)LLVM_VERSION_PATCH);
+}
+
+} // end anonymous namespace
More information about the llvm-commits
mailing list