diff options
Diffstat (limited to 'gnu/llvm/tools/llvm-shlib')
| -rw-r--r-- | gnu/llvm/tools/llvm-shlib/CMakeLists.txt | 154 | ||||
| -rw-r--r-- | gnu/llvm/tools/llvm-shlib/gen-msvc-exports.py | 106 | ||||
| -rw-r--r-- | gnu/llvm/tools/llvm-shlib/libllvm.cpp | 13 | ||||
| -rw-r--r-- | gnu/llvm/tools/llvm-shlib/simple_version_script.map.in | 1 |
4 files changed, 0 insertions, 274 deletions
diff --git a/gnu/llvm/tools/llvm-shlib/CMakeLists.txt b/gnu/llvm/tools/llvm-shlib/CMakeLists.txt deleted file mode 100644 index 187066e5ded..00000000000 --- a/gnu/llvm/tools/llvm-shlib/CMakeLists.txt +++ /dev/null @@ -1,154 +0,0 @@ -# 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. - -set(SOURCES - libllvm.cpp - ) - -if(LLVM_LINK_LLVM_DYLIB AND LLVM_DYLIB_EXPORTED_SYMBOL_FILE) - message(WARNING "Using LLVM_LINK_LLVM_DYLIB with LLVM_DYLIB_EXPORTED_SYMBOL_FILE may not work. Use at your own risk.") -endif() - -if(LLVM_BUILD_LLVM_DYLIB) - if(MSVC) - message(FATAL_ERROR "Generating libLLVM is not supported on MSVC") - endif() - - llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS}) - - # libLLVM.so should not have any dependencies on any other LLVM - # shared libraries. When using the "all" pseudo-component, - # LLVM_AVAILABLE_LIBS is added to the dependencies, which may - # contain shared libraries (e.g. libLTO). - # - # Also exclude libLLVMTableGen for the following reasons: - # - it is only used by internal *-tblgen utilities; - # - it pollutes the global options space. - foreach(lib ${LIB_NAMES}) - get_target_property(t ${lib} TYPE) - if("${lib}" STREQUAL "LLVMTableGen") - elseif("x${t}" STREQUAL "xSTATIC_LIBRARY") - list(APPEND FILTERED_LIB_NAMES ${lib}) - endif() - endforeach() - set(LIB_NAMES ${FILTERED_LIB_NAMES}) - - if(LLVM_DYLIB_EXPORTED_SYMBOL_FILE) - set(LLVM_EXPORTED_SYMBOL_FILE ${LLVM_DYLIB_EXPORTED_SYMBOL_FILE}) - add_custom_target(libLLVMExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE}) - endif() - - add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${SOURCES}) - - list(REMOVE_DUPLICATES LIB_NAMES) - if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "GNU") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")) # FIXME: It should be "GNU ld for elf" - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/simple_version_script.map.in - ${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map) - - # GNU ld doesn't resolve symbols in the version script. - set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) - if (NOT LLVM_LINKER_IS_SOLARISLD) - # Solaris ld does not accept global: *; so there is no way to version *all* global symbols - set(LIB_NAMES -Wl,--version-script,${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map ${LIB_NAMES}) - endif() - elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(LIB_NAMES -Wl,-all_load ${LIB_NAMES}) - endif() - - target_link_libraries(LLVM PRIVATE ${LIB_NAMES}) - - if (APPLE) - set_property(TARGET LLVM APPEND_STRING PROPERTY - LINK_FLAGS - " -compatibility_version 1 -current_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") - endif() - - if(TARGET libLLVMExports) - add_dependencies(LLVM libLLVMExports) - endif() -endif() - -if(LLVM_BUILD_LLVM_C_DYLIB AND NOT MSVC) - if(NOT APPLE) - message(FATAL_ERROR "Generating libLLVM-c is only supported on Darwin") - endif() - - if(NOT LLVM_BUILD_LLVM_DYLIB) - message(FATAL_ERROR "Generating libLLVM-c requires LLVM_BUILD_LLVM_C_DYLIB on Darwin") - 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-c.exports) - - set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) - set(LIB_NAME ${LIB_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}LLVM) - set(LIB_PATH ${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) - set(LIB_EXPORTS_PATH ${LIB_NAME}.exports) - list(APPEND LLVM_DYLIB_REQUIRED_EXPORTS ${LIB_EXPORTS_PATH}) - - add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE} - COMMAND nm ${LIB_PATH} | awk "/T _LLVM/ || /T LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LLVM_EXPORTED_SYMBOL_FILE} - WORKING_DIRECTORY ${LIB_DIR} - DEPENDS LLVM - COMMENT "Generating Export list for LLVM..." - VERBATIM ) - - add_custom_target(libLLVMCExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE}) - - add_llvm_library(LLVM-C SHARED ${SOURCES}) - - target_link_libraries(LLVM-C PUBLIC LLVM) - add_dependencies(LLVM-C libLLVMCExports) - - set_property(TARGET LLVM-C APPEND_STRING PROPERTY - LINK_FLAGS - " -compatibility_version 1 -current_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} -Wl,-reexport_library ${LIB_PATH}") -endif() - -if(MSVC) - # Build the LLVM-C.dll library that exports the C API. - - set(LLVM_LINK_COMPONENTS - ${LLVM_DYLIB_COMPONENTS} - ) - - llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS}) - list(REMOVE_DUPLICATES LIB_NAMES) - - # The python script needs to know whether symbols are prefixed with underscores or not. - if(LLVM_HOST_TRIPLE STREQUAL "i686-pc-win32") - set(GEN_UNDERSCORE "--underscore") - else() - set(GEN_UNDERSCORE "") - endif() - - # Get the full name to the libs so the python script understands them. - foreach(lib ${LIB_NAMES}) - list(APPEND FULL_LIB_NAMES ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/${lib}.lib) - endforeach() - - # Generate the exports file dynamically. - set(GEN_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/gen-msvc-exports.py) - - set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllvm-c.exports) - - add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE} - COMMAND ${PYTHON_EXECUTABLE} ${GEN_SCRIPT} ${FULL_LIB_NAMES} ${GEN_UNDERSCORE} --nm ${LLVM_TOOLS_BINARY_DIR}/llvm-nm -o ${LLVM_EXPORTED_SYMBOL_FILE} - DEPENDS ${LIB_NAMES} llvm-nm - COMMENT "Generating export list for LLVM-C" - VERBATIM ) - - # Finally link the target. - add_llvm_library(LLVM-C SHARED ${SOURCES} DEPENDS intrinsics_gen) - -endif() diff --git a/gnu/llvm/tools/llvm-shlib/gen-msvc-exports.py b/gnu/llvm/tools/llvm-shlib/gen-msvc-exports.py deleted file mode 100644 index 6f0a6786d34..00000000000 --- a/gnu/llvm/tools/llvm-shlib/gen-msvc-exports.py +++ /dev/null @@ -1,106 +0,0 @@ -#===- gen-msvc-exports.py - Generate C API export file -------*- python -*--===# -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -#===------------------------------------------------------------------------===# -# -# Generate an export file from a list of given LIB files. This only exports symbols -# that start with LLVM, so it only exports the LLVM C API. -# -# To have CMake run this, set LLVM_BUILD_LLVM_C_DYLIB to on while -# building on Windows. -# -# To run manually, build LLVM with Visual Studio, use a Command prompt -# to navigate to the directory with the .lib files (Debug\lib etc). Then run -# python C:\Path\To\gen-msvc-exports.py --nm ..\bin\llvm-nm.exe LLVM*.lib -# -# If you're generating a 32 bit DLL, use the `--underscore` flag. -# If you want to use a different `llvm-nm` executable, pass the path -# with the `--nm` flag. -# -# You can use the --output flag to set the name of the export file. -# -#===------------------------------------------------------------------------===# -from tempfile import mkstemp -from contextlib import contextmanager -from subprocess import check_call -import argparse -import os -import re - - -_UNDERSCORE_REGEX = { - False: re.compile(r"^\w+\s+T\s+(LLVM.*)$"), - True: re.compile(r"^\w+\s+T\s+_(LLVM.*)$") -} - - -@contextmanager -def removing(path): - try: - yield path - finally: - os.unlink(path) - - -def touch_tempfile(*args, **kwargs): - fd, name = mkstemp(*args, **kwargs) - os.close(fd) - return name - - -def gen_llvm_c_export(output, underscore, libs, nm): - """Generate the export file for the LLVM-C DLL. - - Run `nm` for each lib in `libs`, and output an export file - to `output`. If `underscore` is true, symbols will - be assumed to be prefixed with an underscore. - """ - with removing(touch_tempfile(prefix='dumpout', suffix='.txt')) as dumpout: - - # Get the right regex. - p = _UNDERSCORE_REGEX[underscore] - - with open(output, 'w+t') as output_f: - - # For each lib get the LLVM* functions it exports. - for lib in libs: - # Call dumpbin. - with open(dumpout, 'w+t') as dumpout_f: - check_call([nm, '-g', lib], stdout=dumpout_f) - - # Get the matching lines. - with open(dumpout) as dumpbin: - for line in dumpbin: - m = p.match(line) - if m is not None: - output_f.write(m.group(1) + '\n') - - -def main(): - parser = argparse.ArgumentParser('gen-msvc-exports') - - parser.add_argument( - '-o', '--output', help='output filename', default='LLVM-C.exports' - ) - parser.add_argument('-u', '--underscore', - help='labels are prefixed with an underscore (use for 32 bit DLLs)', - action='store_true' - ) - parser.add_argument( - '--nm', help='path to the llvm-nm executable', default='llvm-nm' - ) - parser.add_argument( - 'libs', metavar='LIBS', nargs='+', help='list of libraries to generate export from' - ) - - ns = parser.parse_args() - - gen_llvm_c_export(ns.output, ns.underscore, ns.libs, ns.nm) - - -if __name__ == '__main__': - main() diff --git a/gnu/llvm/tools/llvm-shlib/libllvm.cpp b/gnu/llvm/tools/llvm-shlib/libllvm.cpp deleted file mode 100644 index 40b4f66b073..00000000000 --- a/gnu/llvm/tools/llvm-shlib/libllvm.cpp +++ /dev/null @@ -1,13 +0,0 @@ -//===-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. -// -//===----------------------------------------------------------------------===// diff --git a/gnu/llvm/tools/llvm-shlib/simple_version_script.map.in b/gnu/llvm/tools/llvm-shlib/simple_version_script.map.in deleted file mode 100644 index d58a8b3abcd..00000000000 --- a/gnu/llvm/tools/llvm-shlib/simple_version_script.map.in +++ /dev/null @@ -1 +0,0 @@ -LLVM_@LLVM_VERSION_MAJOR@ { global: *; }; |
