[K/N] Add CMakeLists.txt to simplify work with libllvmext

Also moved functions that have nothing to do with code coverage
into a separate file.
This commit is contained in:
Sergey Bogolepov
2022-03-24 18:22:29 +03:00
committed by Space
parent 7dc48b3837
commit 30006b5143
7 changed files with 130 additions and 40 deletions
-1
View File
@@ -57,7 +57,6 @@ backend.native/tests/teamcity-test.property
samples/**/*.kt.bc-build
# CMake
libllvmext/CMakeLists.txt
tools/performance-server/node_modules
tools/performance-server/server
tools/performance-server/ui/js
+2 -2
View File
@@ -1,9 +1,9 @@
headers = llvm-c/Core.h llvm-c/Target.h llvm-c/Analysis.h llvm-c/BitWriter.h \
llvm-c/BitReader.h llvm-c/Transforms/PassManagerBuilder.h llvm-c/Transforms/IPO.h \
llvm-c/TargetMachine.h llvm-c/Target.h llvm-c/Linker.h llvm-c/Initialization.h \
llvm-c/DebugInfo.h DebugInfoC.h CoverageMappingC.h
llvm-c/DebugInfo.h DebugInfoC.h CoverageMappingC.h CAPIExtensions.h
headerFilter = llvm-c/* llvm-c/**/* DebugInfoC.h CoverageMappingC.h
headerFilter = llvm-c/* llvm-c/**/* DebugInfoC.h CoverageMappingC.h CAPIExtensions.h
compilerOpts = -std=c99 \
-Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers \
+44
View File
@@ -0,0 +1,44 @@
cmake_minimum_required(VERSION 3.20)
project(libllvmext)
set(CMAKE_CXX_STANDARD 17)
function(find_llvm_dir)
message(STATUS "Loading LLVM dependency location from Gradle...")
# TODO: Check on Windows.
execute_process(
COMMAND ../../gradlew printLlvmDir -q
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE llvm_dir
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(LLVM_DIR ${llvm_dir} PARENT_SCOPE)
endfunction(find_llvm_dir)
if (NOT DEFINED LLVM_DIR)
find_llvm_dir()
endif ()
if (LLVM_DIR STREQUAL "")
message(FATAL_ERROR "LLVM_DIR is not set!")
else()
message(STATUS "LLVM location: ${LLVM_DIR}")
endif()
list(APPEND CMAKE_PREFIX_PATH "${LLVM_DIR}/lib/cmake")
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
if (CMAKE_SYSTEM_NAME MATCHES Darwin)
add_compile_definitions(KONAN_MACOS=1)
elseif (CMAKE_SYSTEM_NAME MATCHES Linux)
add_compile_definitions(KONAN_LINUX=1)
elseif (CMAKE_SYSTEM_NAME MATCHES Windows)
add_compile_definitions(KONAN_WINDOWS=1)
endif ()
set(SRC_DIR ${CMAKE_SOURCE_DIR}/src)
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${SRC_DIR}/main/include)
add_library(libllvmext ${SRC_DIR}/main/cpp/CoverageMappingC.cpp ${SRC_DIR}/main/cpp/CAPIExtensions.cpp)
@@ -62,3 +62,10 @@ native {
flags("-qv", ruleOut(), *ruleInAll())
}
}
val printLlvmDir by tasks.registering {
doLast {
println(project.findProperty("llvmDir"))
}
}
@@ -0,0 +1,49 @@
//
// Created by Sergey.Bogolepov on 24.03.2022.
//
#include <CAPIExtensions.h>
#include <llvm/ProfileData/Coverage/CoverageMapping.h>
#include <llvm/ADT/Triple.h>
#include <llvm/IR/Constants.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/Transforms/ObjCARC.h>
using namespace llvm;
void LLVMAddObjCARCContractPass(LLVMPassManagerRef passManagerRef) {
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
passManager->add(createObjCARCContractPass());
}
void LLVMKotlinInitializeTargets() {
#define INIT_LLVM_TARGET(TargetName) \
LLVMInitialize##TargetName##TargetInfo();\
LLVMInitialize##TargetName##Target();\
LLVMInitialize##TargetName##TargetMC();
#if KONAN_MACOS
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(Mips)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#elif KONAN_LINUX
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(Mips)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#elif KONAN_WINDOWS
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#endif
#undef INIT_LLVM_TARGET
}
void LLVMSetNoTailCall(LLVMValueRef Call) {
unwrap<CallInst>(Call)->setTailCallKind(CallInst::TCK_NoTail);
}
@@ -20,7 +20,6 @@
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/Analysis/TargetLibraryInfo.h>
#include <llvm/Transforms/Instrumentation.h>
#include <llvm/Transforms/ObjCARC.h>
#include <llvm/Support/FileSystem.h>
#include <llvm/Support/Path.h>
@@ -232,39 +231,3 @@ void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
passManager->add(new TargetLibraryInfoWrapperPass(Triple(targetTriple)));
}
void LLVMAddObjCARCContractPass(LLVMPassManagerRef passManagerRef) {
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
passManager->add(createObjCARCContractPass());
}
void LLVMKotlinInitializeTargets() {
#define INIT_LLVM_TARGET(TargetName) \
LLVMInitialize##TargetName##TargetInfo();\
LLVMInitialize##TargetName##Target();\
LLVMInitialize##TargetName##TargetMC();
#if KONAN_MACOS
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(Mips)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#elif KONAN_LINUX
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(Mips)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#elif KONAN_WINDOWS
INIT_LLVM_TARGET(AArch64)
INIT_LLVM_TARGET(ARM)
INIT_LLVM_TARGET(X86)
INIT_LLVM_TARGET(WebAssembly)
#endif
#undef INIT_LLVM_TARGET
}
void LLVMSetNoTailCall(LLVMValueRef Call) {
unwrap<CallInst>(Call)->setTailCallKind(CallInst::TCK_NoTail);
}
@@ -0,0 +1,28 @@
//
// Created by Sergey.Bogolepov on 24.03.2022.
//
#ifndef LIBLLVMEXT_EXTENSIONS_H
#define LIBLLVMEXT_EXTENSIONS_H
#endif //LIBLLVMEXT_EXTENSIONS_H
#include <llvm-c/Core.h>
#include <llvm-c/Target.h>
# ifdef __cplusplus
extern "C" {
# endif
void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef, const char* targetTriple);
void LLVMAddObjCARCContractPass(LLVMPassManagerRef passManagerRef);
void LLVMKotlinInitializeTargets();
void LLVMSetNoTailCall(LLVMValueRef Call);
# ifdef __cplusplus
}
# endif