These are my initial build and code changes to supporting building llvm as shared library/DLL on windows(without force exporting all symbols) and making symbol visibility hidden by default on Linux which adding explicit symbol visibility macros to the whole llvm codebase. Updated cmake code to allow building llvm-shlib on windows by appending /WHOLEARCHIVE:lib to the linker options. Remove the hardcoded CMake error from using LLVM_BUILD_LLVM_DYLIB on windows. Updated CMake to define new macros to control conditional export macros in llvm/Support/Compiler.h Use /Zc:dllexportInlines- when compiling with clang-cl on windows with a opt out CMake option to disable using it. Replace some use of LLVM_EXTERNAL_VISIBILITY with new export macros. Some of the cmake and code changes are based on @tstellar's earlier PR https://github.com/llvm/llvm-project/pull/67502. I have Windows building using clang-cl, while for MSVC its at-least able to build libllvm, but some tests can't build because llvm iterator template metaprogramming that doesn't work well with dllexport. Linux should build without issue. My full branch is here https://github.com/fsfod/llvm-project/tree/llvm-export-api-20.0 and including all the auto generated export macros from clang tooling based system.
21 lines
569 B
CMake
21 lines
569 B
CMake
# The basic TableGen library contains as little dependencies as possible.
|
|
# In particular, it does not depend on vt_gen -> it does not use ValueTypes.
|
|
#
|
|
# This library is the only thing included in `llvm-min-tablegen`.
|
|
|
|
set(LLVM_LINK_COMPONENTS
|
|
Support
|
|
TableGen
|
|
)
|
|
|
|
add_llvm_library(LLVMTableGenBasic OBJECT EXCLUDE_FROM_ALL DISABLE_LLVM_LINK_LLVM_DYLIB
|
|
CodeGenIntrinsics.cpp
|
|
SDNodeProperties.cpp
|
|
)
|
|
|
|
# Users may include its headers as "Basic/*.h"
|
|
target_include_directories(LLVMTableGenBasic
|
|
INTERFACE
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
|
|
)
|