[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
This commit is contained in:
committed by
Nikita Popov
parent
93d9c2e563
commit
cb5b25c587
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -46,6 +46,7 @@ add_llvm_unittest(IRTests
|
||||
VectorTypesTest.cpp
|
||||
VerifierTest.cpp
|
||||
VPIntrinsicTest.cpp
|
||||
CoreBindings.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(IRTests PRIVATE LLVMTestingSupport)
|
||||
|
||||
26
llvm/unittests/IR/CoreBindings.cpp
Normal file
26
llvm/unittests/IR/CoreBindings.cpp
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user