1set(SOURCES
2  ARCMigrate.cpp
3  BuildSystem.cpp
4  CIndex.cpp
5  CIndexCXX.cpp
6  CIndexCodeCompletion.cpp
7  CIndexDiagnostic.cpp
8  CIndexHigh.cpp
9  CIndexInclusionStack.cpp
10  CIndexUSRs.cpp
11  CIndexer.cpp
12  CXComment.cpp
13  CXCursor.cpp
14  CXIndexDataConsumer.cpp
15  CXCompilationDatabase.cpp
16  CXLoadedDiagnostic.cpp
17  CXSourceLocation.cpp
18  CXStoredDiagnostic.cpp
19  CXString.cpp
20  CXType.cpp
21  Indexing.cpp
22
23  ADDITIONAL_HEADERS
24  CIndexDiagnostic.h
25  CIndexer.h
26  CXCursor.h
27  CXLoadedDiagnostic.h
28  CXSourceLocation.h
29  CXString.h
30  CXTranslationUnit.h
31  CXType.h
32  Index_Internal.h
33  ../../include/clang-c/Index.h
34  )
35
36set(LIBS
37  clangAST
38  clangBasic
39  clangFrontend
40  clangIndex
41  clangLex
42  clangSema
43  clangTooling
44)
45
46if (CLANG_ENABLE_ARCMT)
47  list(APPEND LIBS clangARCMigrate)
48endif ()
49
50if (TARGET clangTidyPlugin)
51  add_definitions(-DCLANG_TOOL_EXTRA_BUILD)
52  list(APPEND LIBS clangTidyPlugin)
53endif ()
54
55find_library(DL_LIBRARY_PATH dl)
56if (DL_LIBRARY_PATH)
57  list(APPEND LIBS dl)
58endif()
59
60option(LIBCLANG_BUILD_STATIC
61  "Build libclang as a static library (in addition to a shared one)" OFF)
62
63set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.exports)
64
65if(MSVC)
66  # Avoid LNK4197 not to spceify libclang.def here.
67  # Each functions is exported as "dllexport" in include/clang-c.
68  # KB835326
69  set(LLVM_EXPORTED_SYMBOL_FILE)
70endif()
71
72if( LLVM_ENABLE_PIC )
73  set(ENABLE_SHARED SHARED)
74endif()
75
76if((NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC) AND NOT WIN32)
77  set(ENABLE_STATIC STATIC)
78endif()
79
80if(WIN32)
81  set(output_name "libclang")
82else()
83  set(output_name "clang")
84endif()
85
86add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC}
87  OUTPUT_NAME ${output_name}
88  ${SOURCES}
89  DEPENDS clang-headers
90
91  LINK_LIBS
92  ${LIBS}
93
94  LINK_COMPONENTS
95  ${LLVM_TARGETS_TO_BUILD}
96  Core
97  Support
98  )
99
100if(ENABLE_SHARED)
101  if(WIN32)
102    set_target_properties(libclang
103      PROPERTIES
104      VERSION ${LIBCLANG_LIBRARY_VERSION}
105      DEFINE_SYMBOL _CINDEX_LIB_)
106  elseif(APPLE)
107    set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
108    set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
109
110    set_property(TARGET libclang APPEND_STRING PROPERTY
111                 LINK_FLAGS ${LIBCLANG_LINK_FLAGS})
112  else()
113    set_target_properties(libclang
114      PROPERTIES
115      VERSION ${LIBCLANG_LIBRARY_VERSION}
116      DEFINE_SYMBOL _CINDEX_LIB_)
117  endif()
118endif()
119
120if(INTERNAL_INSTALL_PREFIX)
121  set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include")
122else()
123  set(LIBCLANG_HEADERS_INSTALL_DESTINATION include)
124endif()
125
126install(DIRECTORY ../../include/clang-c
127  COMPONENT libclang-headers
128  DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}"
129  FILES_MATCHING
130  PATTERN "*.h"
131  PATTERN ".svn" EXCLUDE
132  )
133
134if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDE's.
135  add_custom_target(install-libclang-headers
136    DEPENDS
137    COMMAND "${CMAKE_COMMAND}"
138            -DCMAKE_INSTALL_COMPONENT=libclang-headers
139            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
140endif()
141