[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
|
samples/**/*.kt.bc-build
|
||||||
|
|
||||||
# CMake
|
# CMake
|
||||||
libllvmext/CMakeLists.txt
|
|
||||||
tools/performance-server/node_modules
|
tools/performance-server/node_modules
|
||||||
tools/performance-server/server
|
tools/performance-server/server
|
||||||
tools/performance-server/ui/js
|
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 \
|
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/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/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 \
|
compilerOpts = -std=c99 \
|
||||||
-Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers \
|
-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())
|
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/IR/LegacyPassManager.h>
|
||||||
#include <llvm/Analysis/TargetLibraryInfo.h>
|
#include <llvm/Analysis/TargetLibraryInfo.h>
|
||||||
#include <llvm/Transforms/Instrumentation.h>
|
#include <llvm/Transforms/Instrumentation.h>
|
||||||
#include <llvm/Transforms/ObjCARC.h>
|
|
||||||
#include <llvm/Support/FileSystem.h>
|
#include <llvm/Support/FileSystem.h>
|
||||||
#include <llvm/Support/Path.h>
|
#include <llvm/Support/Path.h>
|
||||||
|
|
||||||
@@ -232,39 +231,3 @@ void LLVMKotlinAddTargetLibraryInfoWrapperPass(LLVMPassManagerRef passManagerRef
|
|||||||
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
|
legacy::PassManagerBase *passManager = unwrap(passManagerRef);
|
||||||
passManager->add(new TargetLibraryInfoWrapperPass(Triple(targetTriple)));
|
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