forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding llvm-shlib to CMake build system with a few new bells and whis…
…tles Summary: This patch adds a new CMake build setting LLVM_BUILD_LLVM_DYLIB, which defaults to OFF. When set to ON, this will generate a shared library containing most of LLVM. The contents of the shared library can be overriden by specifying LLVM_DYLIB_COMPONENTS. LLVM_DYLIB_COMPONENTS can be set to a semi-colon delimited list of any LLVM components that you llvm-config can resolve. On Windows, unless you are using Cygwin, you must specify an explicit symbol export file using LLVM_EXPORTED_SYMBOL_FILE. On Cygwin and all unix-like platforms if you do not specify LLVM_EXPORTED_SYMBOL_FILE, an export file containing only the LLVM C API will be auto-generated from the list of LLVM components specified in LLVM_DYLIB_COMPONENTS. Reviewers: rnk Reviewed By: rnk Subscribers: rnk, llvm-commits Differential Revision: http://reviews.llvm.org/D5890 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220490 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Chris Bieneman
committed
Oct 23, 2014
1 parent
3d71678
commit 71926e7
Showing
4 changed files
with
116 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
# This tool creates a shared library from the LLVM libraries. Generating this | ||
# library is enabled by setting LLVM_BUILD_LLVM_DYLIB=yes on the CMake | ||
# commandline. By default the shared library only exports the LLVM C API. | ||
|
||
|
||
# You can configure which libraries from LLVM you want to include in the shared | ||
# library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited list of | ||
# LLVM components. All compoenent names handled by llvm-config are valid. | ||
|
||
if(NOT DEFINED LLVM_DYLIB_COMPONENTS) | ||
set(LLVM_LINK_COMPONENTS | ||
${LLVM_TARGETS_TO_BUILD} | ||
Analysis | ||
AsmPrinter | ||
BitWriter | ||
CodeGen | ||
Core | ||
ExecutionEngine | ||
IPA | ||
IPO | ||
IRReader | ||
InstCombine | ||
Instrumentation | ||
Interpreter | ||
Linker | ||
MC | ||
MCJIT | ||
ObjCARCOpts | ||
Object | ||
ScalarOpts | ||
SelectionDAG | ||
Support | ||
Target | ||
TransformUtils | ||
Vectorize | ||
native | ||
) | ||
else() | ||
set(LLVM_LINK_COMPONENTS ${LLVM_DYLIB_COMPONENTS}) | ||
endif() | ||
|
||
add_definitions( -DLLVM_VERSION_INFO=\"${PACKAGE_VERSION}\" ) | ||
|
||
set(SOURCES | ||
libllvm.cpp | ||
) | ||
|
||
if(NOT DEFINED LLVM_EXPORTED_SYMBOL_FILE) | ||
|
||
if( WIN32 AND NOT CYGWIN ) | ||
message(FATAL_ERROR "Auto-generation not implemented for Win32 without GNU utils. Please specify LLVM_EXPORTED_SYMBOL_FILE.") | ||
endif() | ||
|
||
# To get the export list for a single llvm library: | ||
# nm ${LIB_PATH} | awk "/T _LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_PATH}.exports | ||
|
||
set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/libllvm.exports) | ||
|
||
llvm_map_components_to_libnames(LIB_NAMES ${LLVM_LINK_COMPONENTS}) | ||
|
||
foreach (lib ${LIB_NAMES}) | ||
|
||
set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib) | ||
set(LIB_NAME ${LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}) | ||
set(LIB_PATH ${LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}) | ||
set(LIB_EXPORTS_PATH ${LIB_NAME}.exports) | ||
|
||
list(APPEND LLVM_DYLIB_REQUIRED_EXPORTS ${LIB_EXPORTS_PATH}) | ||
|
||
add_custom_command(OUTPUT ${LIB_EXPORTS_PATH} | ||
COMMAND nm ${LIB_PATH} | awk "/T _LLVM/ || /T LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_EXPORTS_PATH} | ||
WORKING_DIRECTORY ${LIB_DIR} | ||
DEPENDS ${lib} | ||
COMMENT "Generating Export list for ${lib}..." | ||
VERBATIM ) | ||
endforeach () | ||
|
||
add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE} | ||
COMMAND cat ${LLVM_DYLIB_REQUIRED_EXPORTS} > ${LLVM_EXPORTED_SYMBOL_FILE} | ||
WORKING_DIRECTORY ${LIB_DIR} | ||
DEPENDS ${LLVM_DYLIB_REQUIRED_EXPORTS} | ||
COMMENT "Generating combined export list...") | ||
|
||
endif() | ||
|
||
add_llvm_library(LLVM SHARED ${SOURCES}) | ||
|
||
add_dependencies(LLVM ${LLVM_EXPORTED_SYMBOL_FILE}) | ||
|
||
if (APPLE) | ||
set_property(TARGET LLVM APPEND_STRING PROPERTY | ||
LINK_FLAGS | ||
" -compatibility_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} -current_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") | ||
endif() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
//===-libllvm.cpp - LLVM Shared Library -----------------------------------===// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This file is empty and serves only the purpose of making CMake happy because | ||
// you can't define a target with no sources. | ||
// | ||
//===----------------------------------------------------------------------===// |