summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/tools/llvm-shlib
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/tools/llvm-shlib')
-rw-r--r--gnu/llvm/tools/llvm-shlib/CMakeLists.txt154
-rw-r--r--gnu/llvm/tools/llvm-shlib/gen-msvc-exports.py106
-rw-r--r--gnu/llvm/tools/llvm-shlib/libllvm.cpp13
-rw-r--r--gnu/llvm/tools/llvm-shlib/simple_version_script.map.in1
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: *; };