blob: 9fd234d1ee0324de1f80d2ca0016b26bc4d4820b [file] [log] [blame]
From 4c5bfe273e57b266cbf3e50a5acd225d9701096c Mon Sep 17 00:00:00 2001
From: Pirama Arumuga Nainar <pirama@google.com>
Date: Wed, 1 May 2019 13:55:14 -0700
Subject: [PATCH] Subject: Add a new library, libclang-cxx
Squashed CL of the following CLs:
f10485c Add a new library, libclang-cxx
9e97b1d Add empty file to silence CMake warning
da2ec10 Link clangIndex and clangTooling to libclang_cxx
d9424f3 Add exported symbol list for libclang_cxx
aosp/872802
Bug: 139945549
Change-Id: I7e9d2d7b170554f43be89e4470f81f4785b08320
---
clang/tools/CMakeLists.txt | 3 +
clang/tools/libclang-cxx/CMakeLists.txt | 88 +++++++++++++++++++
clang/tools/libclang-cxx/libclang_cxx.cpp | 7 ++
clang/tools/libclang-cxx/libclang_cxx.exports | 1 +
4 files changed, 99 insertions(+)
create mode 100644 clang/tools/libclang-cxx/CMakeLists.txt
create mode 100644 clang/tools/libclang-cxx/libclang_cxx.cpp
create mode 100644 clang/tools/libclang-cxx/libclang_cxx.exports
diff --git a/clang/tools/CMakeLists.txt b/clang/tools/CMakeLists.txt
index 63fe79eccf73..7213369099a3 100644
--- a/clang/tools/CMakeLists.txt
+++ b/clang/tools/CMakeLists.txt
@@ -44,5 +44,8 @@ add_llvm_external_project(clang-tools-extra extra)
# libclang may require clang-tidy in clang-tools-extra.
add_clang_subdirectory(libclang)
+if(NOT (CMAKE_SYSTEM_NAME MATCHES "Windows"))
+ add_clang_subdirectory(libclang-cxx)
+endif()
add_clang_subdirectory(amdgpu-arch)
diff --git a/clang/tools/libclang-cxx/CMakeLists.txt b/clang/tools/libclang-cxx/CMakeLists.txt
new file mode 100644
index 000000000000..04cf404b667d
--- /dev/null
+++ b/clang/tools/libclang-cxx/CMakeLists.txt
@@ -0,0 +1,88 @@
+set(SOURCES
+ libclang_cxx.cpp
+ )
+
+set(LIBS
+ clangBasic
+ clangCodeGen
+ clangDriver
+ clangFrontend
+ clangFrontendTool
+ clangIndex
+ clangTooling
+)
+
+if (CLANG_ENABLE_ARCMT)
+ list(APPEND LIBS clangARCMigrate)
+endif ()
+
+if (TARGET clangTidyPlugin)
+ add_definitions(-DCLANG_TOOL_EXTRA_BUILD)
+ list(APPEND LIBS clangTidyPlugin)
+ list(APPEND LIBS clangIncludeFixerPlugin)
+ if(LLVM_ENABLE_MODULES)
+ list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD")
+ endif()
+endif ()
+
+find_library(DL_LIBRARY_PATH dl)
+if (DL_LIBRARY_PATH)
+ list(APPEND LIBS dl)
+endif()
+
+if(NOT WIN32)
+ set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang_cxx.exports)
+endif()
+
+if( LLVM_ENABLE_PIC )
+ set(ENABLE_SHARED SHARED)
+endif()
+
+if(NOT LLVM_ENABLE_PIC AND NOT WIN32)
+ set(ENABLE_STATIC STATIC)
+endif()
+
+if(WIN32)
+ set(output_name "libclang_cxx")
+else()
+ set(output_name "clang_cxx")
+endif()
+
+if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW))
+ set(LIBS -Wl,--whole-archive ${LIBS} -Wl,--no-whole-archive)
+elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
+ set(LIBS -Wl,-all_load ${LIBS})
+endif()
+
+add_clang_library(libclang_cxx ${ENABLE_SHARED} ${ENABLE_STATIC}
+ OUTPUT_NAME ${output_name}
+ ${SOURCES}
+ LINK_LIBS
+ ${LIBS}
+ )
+
+if(ENABLE_SHARED)
+ if(WIN32)
+ set_target_properties(libclang_cxx
+ PROPERTIES
+ VERSION ${LIBCLANG_LIBRARY_VERSION}
+ DEFINE_SYMBOL _CINDEX_LIB_)
+ elseif(APPLE)
+ set(LIBCLANG_CXX_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
+ set(LIBCLANG_CXX_LINK_FLAGS "${LIBCLANG_CXX_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
+
+ set_property(TARGET libclang_cxx APPEND_STRING PROPERTY
+ LINK_FLAGS ${LIBCLANG_CXX_LINK_FLAGS})
+ else()
+ set_target_properties(libclang_cxx
+ PROPERTIES
+ VERSION ${LIBCLANG_LIBRARY_VERSION}
+ DEFINE_SYMBOL _CINDEX_LIB_)
+ # FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32.
+ if(LLVM_ENABLE_MODULES AND NOT WIN32)
+ target_compile_options(libclang_cxx PRIVATE
+ "-fmodules-ignore-macro=_CINDEX_LIB_"
+ )
+ endif()
+ endif()
+endif()
diff --git a/clang/tools/libclang-cxx/libclang_cxx.cpp b/clang/tools/libclang-cxx/libclang_cxx.cpp
new file mode 100644
index 000000000000..ef6a015b9985
--- /dev/null
+++ b/clang/tools/libclang-cxx/libclang_cxx.cpp
@@ -0,0 +1,7 @@
+//===- libclang_cxx.cpp - libclang_cxx Shared Library -----------------------------------===//
+//===----------------------------------------------------------------------===//
+//
+// This file is empty and serves only the purpose of making CMake happy because
+// you can't define a target with no sources.
+//
+//===----------------------------------------------------------------------===//
diff --git a/clang/tools/libclang-cxx/libclang_cxx.exports b/clang/tools/libclang-cxx/libclang_cxx.exports
new file mode 100644
index 000000000000..3ffc06476e30
--- /dev/null
+++ b/clang/tools/libclang-cxx/libclang_cxx.exports
@@ -0,0 +1 @@
+_Z*clang*
--
2.32.0.272.g935e593368-goog