[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:
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user