You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.167
Former-commit-id: 289509151e0fee68a1b591a20c9f109c3c789d3a
This commit is contained in:
parent
e19d552987
commit
b084638f15
1666
external/llvm/cmake/modules/AddLLVM.cmake
vendored
1666
external/llvm/cmake/modules/AddLLVM.cmake
vendored
File diff suppressed because it is too large
Load Diff
@ -1,17 +0,0 @@
|
||||
# There is no clear way of keeping track of compiler command-line
|
||||
# options chosen via `add_definitions', so we need our own method for
|
||||
# using it on tools/llvm-config/CMakeLists.txt.
|
||||
|
||||
# Beware that there is no implementation of remove_llvm_definitions.
|
||||
|
||||
macro(add_llvm_definitions)
|
||||
# We don't want no semicolons on LLVM_DEFINITIONS:
|
||||
foreach(arg ${ARGN})
|
||||
if(DEFINED LLVM_DEFINITIONS)
|
||||
set(LLVM_DEFINITIONS "${LLVM_DEFINITIONS} ${arg}")
|
||||
else()
|
||||
set(LLVM_DEFINITIONS ${arg})
|
||||
endif()
|
||||
endforeach(arg)
|
||||
add_definitions( ${ARGN} )
|
||||
endmacro(add_llvm_definitions)
|
224
external/llvm/cmake/modules/AddOCaml.cmake
vendored
224
external/llvm/cmake/modules/AddOCaml.cmake
vendored
@ -1,224 +0,0 @@
|
||||
# CMake build rules for the OCaml language.
|
||||
# Assumes FindOCaml is used.
|
||||
# http://ocaml.org/
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# add_ocaml_library(pkg_a OCAML mod_a OCAMLDEP pkg_b C mod_a_stubs PKG ctypes LLVM core)
|
||||
#
|
||||
# Unnamed parameters:
|
||||
#
|
||||
# * Library name.
|
||||
#
|
||||
# Named parameters:
|
||||
#
|
||||
# OCAML OCaml module names. Imply presence of a corresponding .ml and .mli files.
|
||||
# OCAMLDEP Names of libraries this library depends on.
|
||||
# C C stub sources. Imply presence of a corresponding .c file.
|
||||
# CFLAGS Additional arguments passed when compiling C stubs.
|
||||
# PKG Names of ocamlfind packages this library depends on.
|
||||
# LLVM Names of LLVM libraries this library depends on.
|
||||
# NOCOPY Do not automatically copy sources (.c, .ml, .mli) from the source directory,
|
||||
# e.g. if they are generated.
|
||||
#
|
||||
|
||||
function(add_ocaml_library name)
|
||||
CMAKE_PARSE_ARGUMENTS(ARG "NOCOPY" "" "OCAML;OCAMLDEP;C;CFLAGS;PKG;LLVM" ${ARGN})
|
||||
|
||||
set(src ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(bin ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(ocaml_pkgs)
|
||||
foreach( ocaml_pkg ${ARG_PKG} )
|
||||
list(APPEND ocaml_pkgs "-package" "${ocaml_pkg}")
|
||||
endforeach()
|
||||
|
||||
set(sources)
|
||||
|
||||
set(ocaml_inputs)
|
||||
|
||||
set(ocaml_outputs "${bin}/${name}.cma")
|
||||
if( ARG_C )
|
||||
list(APPEND ocaml_outputs
|
||||
"${bin}/lib${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
if ( BUILD_SHARED_LIBS )
|
||||
list(APPEND ocaml_outputs
|
||||
"${bin}/dll${name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
endif()
|
||||
if( HAVE_OCAMLOPT )
|
||||
list(APPEND ocaml_outputs
|
||||
"${bin}/${name}.cmxa"
|
||||
"${bin}/${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
|
||||
set(ocaml_flags "-lstdc++" "-ldopt" "-L${LLVM_LIBRARY_DIR}"
|
||||
"-ccopt" "-L\\$CAMLORIGIN/../.."
|
||||
"-ccopt" "-Wl,-rpath,\\$CAMLORIGIN/../.."
|
||||
${ocaml_pkgs})
|
||||
|
||||
foreach( ocaml_dep ${ARG_OCAMLDEP} )
|
||||
get_target_property(dep_ocaml_flags "ocaml_${ocaml_dep}" OCAML_FLAGS)
|
||||
list(APPEND ocaml_flags ${dep_ocaml_flags})
|
||||
endforeach()
|
||||
|
||||
if( NOT BUILD_SHARED_LIBS )
|
||||
list(APPEND ocaml_flags "-custom")
|
||||
endif()
|
||||
|
||||
explicit_map_components_to_libraries(llvm_libs ${ARG_LLVM})
|
||||
foreach( llvm_lib ${llvm_libs} )
|
||||
list(APPEND ocaml_flags "-l${llvm_lib}" )
|
||||
endforeach()
|
||||
|
||||
get_property(system_libs TARGET LLVMSupport PROPERTY LLVM_SYSTEM_LIBS)
|
||||
foreach(system_lib ${system_libs})
|
||||
if (system_lib MATCHES "^-")
|
||||
# If it's an option, pass it without changes.
|
||||
list(APPEND ocaml_flags "${system_lib}" )
|
||||
else()
|
||||
# Otherwise assume it's a library name we need to link with.
|
||||
list(APPEND ocaml_flags "-l${system_lib}" )
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
string(REPLACE ";" " " ARG_CFLAGS "${ARG_CFLAGS}")
|
||||
set(c_flags "${ARG_CFLAGS} ${LLVM_DEFINITIONS}")
|
||||
foreach( include_dir ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR} )
|
||||
set(c_flags "${c_flags} -I${include_dir}")
|
||||
endforeach()
|
||||
# include -D/-UNDEBUG to match dump function visibility
|
||||
# regex from HandleLLVMOptions.cmake
|
||||
string(REGEX MATCH "(^| )[/-][UD] *NDEBUG($| )" flag_matches
|
||||
"${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_C_FLAGS}")
|
||||
set(c_flags "${c_flags} ${flag_matches}")
|
||||
|
||||
foreach( ocaml_file ${ARG_OCAML} )
|
||||
list(APPEND sources "${ocaml_file}.mli" "${ocaml_file}.ml")
|
||||
|
||||
list(APPEND ocaml_inputs "${bin}/${ocaml_file}.mli" "${bin}/${ocaml_file}.ml")
|
||||
|
||||
list(APPEND ocaml_outputs "${bin}/${ocaml_file}.cmi" "${bin}/${ocaml_file}.cmo")
|
||||
if( HAVE_OCAMLOPT )
|
||||
list(APPEND ocaml_outputs
|
||||
"${bin}/${ocaml_file}.cmx"
|
||||
"${bin}/${ocaml_file}${CMAKE_C_OUTPUT_EXTENSION}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach( c_file ${ARG_C} )
|
||||
list(APPEND sources "${c_file}.c")
|
||||
|
||||
list(APPEND c_inputs "${bin}/${c_file}.c")
|
||||
list(APPEND c_outputs "${bin}/${c_file}${CMAKE_C_OUTPUT_EXTENSION}")
|
||||
endforeach()
|
||||
|
||||
if( NOT ARG_NOCOPY )
|
||||
foreach( source ${sources} )
|
||||
add_custom_command(
|
||||
OUTPUT "${bin}/${source}"
|
||||
COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${src}/${source}" "${bin}"
|
||||
DEPENDS "${src}/${source}"
|
||||
COMMENT "Copying ${source} to build area")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
foreach( c_input ${c_inputs} )
|
||||
get_filename_component(basename "${c_input}" NAME_WE)
|
||||
add_custom_command(
|
||||
OUTPUT "${basename}${CMAKE_C_OUTPUT_EXTENSION}"
|
||||
COMMAND "${OCAMLFIND}" "ocamlc" "-c" "${c_input}" -ccopt ${c_flags}
|
||||
DEPENDS "${c_input}"
|
||||
COMMENT "Building OCaml stub object file ${basename}${CMAKE_C_OUTPUT_EXTENSION}"
|
||||
VERBATIM)
|
||||
endforeach()
|
||||
|
||||
set(ocaml_params)
|
||||
foreach( ocaml_input ${ocaml_inputs} ${c_outputs})
|
||||
get_filename_component(filename "${ocaml_input}" NAME)
|
||||
list(APPEND ocaml_params "${filename}")
|
||||
endforeach()
|
||||
|
||||
if( APPLE )
|
||||
set(ocaml_rpath "@executable_path/../../../lib${LLVM_LIBDIR_SUFFIX}")
|
||||
elseif( UNIX )
|
||||
set(ocaml_rpath "\\$ORIGIN/../../../lib${LLVM_LIBDIR_SUFFIX}")
|
||||
endif()
|
||||
list(APPEND ocaml_flags "-ldopt" "-Wl,-rpath,${ocaml_rpath}")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${ocaml_outputs}
|
||||
COMMAND "${OCAMLFIND}" "ocamlmklib" "-o" "${name}" ${ocaml_flags} ${ocaml_params}
|
||||
DEPENDS ${ocaml_inputs} ${c_outputs}
|
||||
COMMENT "Building OCaml library ${name}"
|
||||
VERBATIM)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${bin}/${name}.odoc"
|
||||
COMMAND "${OCAMLFIND}" "ocamldoc"
|
||||
"-I" "${bin}"
|
||||
"-I" "${LLVM_LIBRARY_DIR}/ocaml/llvm/"
|
||||
"-dump" "${bin}/${name}.odoc"
|
||||
${ocaml_pkgs} ${ocaml_inputs}
|
||||
DEPENDS ${ocaml_inputs} ${ocaml_outputs}
|
||||
COMMENT "Building OCaml documentation for ${name}"
|
||||
VERBATIM)
|
||||
|
||||
add_custom_target("ocaml_${name}" ALL DEPENDS ${ocaml_outputs} "${bin}/${name}.odoc")
|
||||
|
||||
set_target_properties("ocaml_${name}" PROPERTIES
|
||||
OCAML_FLAGS "-I;${bin}")
|
||||
set_target_properties("ocaml_${name}" PROPERTIES
|
||||
OCAML_ODOC "${bin}/${name}.odoc")
|
||||
|
||||
foreach( ocaml_dep ${ARG_OCAMLDEP} )
|
||||
add_dependencies("ocaml_${name}" "ocaml_${ocaml_dep}")
|
||||
endforeach()
|
||||
|
||||
if( NOT LLVM_OCAML_OUT_OF_TREE )
|
||||
foreach( llvm_lib ${llvm_libs} )
|
||||
add_dependencies("ocaml_${name}" "${llvm_lib}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
add_dependencies("ocaml_all" "ocaml_${name}")
|
||||
|
||||
set(install_files)
|
||||
set(install_shlibs)
|
||||
foreach( ocaml_output ${ocaml_inputs} ${ocaml_outputs} )
|
||||
get_filename_component(ext "${ocaml_output}" EXT)
|
||||
|
||||
if( NOT (ext STREQUAL ".cmo" OR
|
||||
ext STREQUAL ".ml" OR
|
||||
ext STREQUAL CMAKE_C_OUTPUT_EXTENSION OR
|
||||
ext STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX) )
|
||||
list(APPEND install_files "${ocaml_output}")
|
||||
elseif( ext STREQUAL CMAKE_SHARED_LIBRARY_SUFFIX)
|
||||
list(APPEND install_shlibs "${ocaml_output}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
install(FILES ${install_files}
|
||||
DESTINATION "${LLVM_OCAML_INSTALL_PATH}/llvm")
|
||||
install(FILES ${install_shlibs}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
DESTINATION "${LLVM_OCAML_INSTALL_PATH}/stublibs")
|
||||
|
||||
foreach( install_file ${install_files} ${install_shlibs} )
|
||||
get_filename_component(filename "${install_file}" NAME)
|
||||
add_custom_command(TARGET "ocaml_${name}" POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${install_file}"
|
||||
"${LLVM_LIBRARY_DIR}/ocaml/llvm/"
|
||||
COMMENT "Copying OCaml library component ${filename} to intermediate area"
|
||||
VERBATIM)
|
||||
add_dependencies("ocaml_${name}" ocaml_make_directory)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
add_custom_target(ocaml_make_directory
|
||||
COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${LLVM_LIBRARY_DIR}/ocaml/llvm")
|
||||
add_custom_target("ocaml_all")
|
||||
set_target_properties(ocaml_all PROPERTIES FOLDER "Misc")
|
||||
set_target_properties(ocaml_make_directory PROPERTIES FOLDER "Misc")
|
@ -1,90 +0,0 @@
|
||||
|
||||
# Create sphinx target
|
||||
if (LLVM_ENABLE_SPHINX)
|
||||
message(STATUS "Sphinx enabled.")
|
||||
find_package(Sphinx REQUIRED)
|
||||
if (LLVM_BUILD_DOCS AND NOT TARGET sphinx)
|
||||
add_custom_target(sphinx ALL)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Sphinx disabled.")
|
||||
endif()
|
||||
|
||||
|
||||
# Handy function for creating the different Sphinx targets.
|
||||
#
|
||||
# ``builder`` should be one of the supported builders used by
|
||||
# the sphinx-build command.
|
||||
#
|
||||
# ``project`` should be the project name
|
||||
function (add_sphinx_target builder project)
|
||||
set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")
|
||||
set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}")
|
||||
set(SPHINX_TARGET_NAME docs-${project}-${builder})
|
||||
|
||||
if (SPHINX_WARNINGS_AS_ERRORS)
|
||||
set(SPHINX_WARNINGS_AS_ERRORS_FLAG "-W")
|
||||
else()
|
||||
set(SPHINX_WARNINGS_AS_ERRORS_FLAG "")
|
||||
endif()
|
||||
|
||||
add_custom_target(${SPHINX_TARGET_NAME}
|
||||
COMMAND ${SPHINX_EXECUTABLE}
|
||||
-b ${builder}
|
||||
-d "${SPHINX_DOC_TREE_DIR}"
|
||||
-q # Quiet: no output other than errors and warnings.
|
||||
${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}" # Source
|
||||
"${SPHINX_BUILD_DIR}" # Output
|
||||
COMMENT
|
||||
"Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"")
|
||||
|
||||
# When "clean" target is run, remove the Sphinx build directory
|
||||
set_property(DIRECTORY APPEND PROPERTY
|
||||
ADDITIONAL_MAKE_CLEAN_FILES
|
||||
"${SPHINX_BUILD_DIR}")
|
||||
|
||||
# We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run
|
||||
# but we should only add this path once
|
||||
get_property(_CURRENT_MAKE_CLEAN_FILES
|
||||
DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES)
|
||||
list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX)
|
||||
if (_INDEX EQUAL -1)
|
||||
set_property(DIRECTORY APPEND PROPERTY
|
||||
ADDITIONAL_MAKE_CLEAN_FILES
|
||||
"${SPHINX_DOC_TREE_DIR}")
|
||||
endif()
|
||||
|
||||
if (LLVM_BUILD_DOCS)
|
||||
add_dependencies(sphinx ${SPHINX_TARGET_NAME})
|
||||
|
||||
# Handle installation
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
||||
if (builder STREQUAL man)
|
||||
if (CMAKE_INSTALL_MANDIR)
|
||||
set(INSTALL_MANDIR ${CMAKE_INSTALL_MANDIR}/)
|
||||
else()
|
||||
set(INSTALL_MANDIR share/man/)
|
||||
endif()
|
||||
# FIXME: We might not ship all the tools that these man pages describe
|
||||
install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of
|
||||
COMPONENT "${project}-sphinx-man"
|
||||
DESTINATION ${INSTALL_MANDIR}man1)
|
||||
|
||||
elseif (builder STREQUAL html)
|
||||
string(TOUPPER "${project}" project_upper)
|
||||
set(${project_upper}_INSTALL_SPHINX_HTML_DIR "share/doc/${project}/html"
|
||||
CACHE STRING "HTML documentation install directory for ${project}")
|
||||
|
||||
# '/.' indicates: copy the contents of the directory directly into
|
||||
# the specified destination, without recreating the last component
|
||||
# of ${SPHINX_BUILD_DIR} implicitly.
|
||||
install(DIRECTORY "${SPHINX_BUILD_DIR}/."
|
||||
COMPONENT "${project}-sphinx-html"
|
||||
DESTINATION "${${project_upper}_INSTALL_SPHINX_HTML_DIR}")
|
||||
else()
|
||||
message(WARNING Installation of ${builder} not supported)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
135
external/llvm/cmake/modules/CMakeLists.txt
vendored
135
external/llvm/cmake/modules/CMakeLists.txt
vendored
@ -1,135 +0,0 @@
|
||||
set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
|
||||
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
# First for users who use an installed LLVM, create the LLVMExports.cmake file.
|
||||
set(LLVM_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMExports.cmake)
|
||||
get_property(LLVM_EXPORTS GLOBAL PROPERTY LLVM_EXPORTS)
|
||||
export(TARGETS ${LLVM_EXPORTS} FILE ${LLVM_EXPORTS_FILE})
|
||||
|
||||
# Then for users who want to link against the LLVM build tree, provide the
|
||||
# normal targets and the build tree only targets.
|
||||
set(LLVM_BUILDTREEONLY_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMBuildTreeOnlyTargets.cmake)
|
||||
get_property(LLVM_EXPORTS_BUILDTREE_ONLY GLOBAL PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY)
|
||||
export(TARGETS ${LLVM_EXPORTS_BUILDTREE_ONLY} FILE ${LLVM_BUILDTREEONLY_EXPORTS_FILE})
|
||||
|
||||
get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS)
|
||||
|
||||
foreach(lib ${LLVM_AVAILABLE_LIBS})
|
||||
get_property(llvm_lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib})
|
||||
set(all_llvm_lib_deps
|
||||
"${all_llvm_lib_deps}\nset_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib} ${llvm_lib_deps})")
|
||||
endforeach(lib)
|
||||
|
||||
# CMake requires that all targets expressed as dependencies exist, so we can't
|
||||
# have intrinsics_gen in LLVM_COMMON_DEPENDS when it is written out, otherwise
|
||||
# projects building out of tree will have CMake errors. This only gets hit when
|
||||
# LLVM_ENABLE_MODULES=On. Eventually we should come up with a better solution to
|
||||
# this, but there is no easy solution.
|
||||
if(intrinsics_gen IN_LIST LLVM_COMMON_DEPENDS)
|
||||
list(REMOVE_ITEM LLVM_COMMON_DEPENDS intrinsics_gen)
|
||||
endif()
|
||||
|
||||
# Generate LLVMConfig.cmake for the build tree.
|
||||
set(LLVM_CONFIG_CODE "
|
||||
# LLVM_BUILD_* values available only from LLVM build tree.
|
||||
set(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\")
|
||||
set(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\")
|
||||
set(LLVM_BUILD_MAIN_INCLUDE_DIR \"${LLVM_MAIN_INCLUDE_DIR}\")
|
||||
set(LLVM_BUILD_MAIN_SRC_DIR \"${LLVM_MAIN_SRC_DIR}\")
|
||||
")
|
||||
set(LLVM_CONFIG_INCLUDE_DIRS
|
||||
"${LLVM_MAIN_INCLUDE_DIR}"
|
||||
"${LLVM_INCLUDE_DIR}"
|
||||
)
|
||||
set(LLVM_CONFIG_LIBRARY_DIRS
|
||||
"${LLVM_LIBRARY_DIR}"
|
||||
)
|
||||
set(LLVM_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(LLVM_CONFIG_BINARY_DIR "${LLVM_BINARY_DIR}")
|
||||
set(LLVM_CONFIG_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")
|
||||
# We need to use the full path to the LLVM Exports file to make sure we get the
|
||||
# one from the build tree. This is due to our cmake files being split between
|
||||
# this source dir and the binary dir in the build tree configuration and the
|
||||
# LLVM_CONFIG_CMAKE_DIR being the source directory. In contrast in the install
|
||||
# tree, both the generated LLVMExports.cmake file and the rest of the cmake
|
||||
# source files are put in the same cmake directory.
|
||||
set(LLVM_CONFIG_EXPORTS_FILE "${LLVM_EXPORTS_FILE}")
|
||||
set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS};${LLVM_EXPORTS_BUILDTREE_ONLY}")
|
||||
set(llvm_config_include_buildtree_only_exports
|
||||
"include(\"${LLVM_BUILDTREEONLY_EXPORTS_FILE}\")")
|
||||
configure_file(
|
||||
LLVMConfig.cmake.in
|
||||
${llvm_cmake_builddir}/LLVMConfig.cmake
|
||||
@ONLY)
|
||||
set(llvm_config_include_buildtree_only_exports)
|
||||
|
||||
# For compatibility with projects that include(LLVMConfig)
|
||||
# via CMAKE_MODULE_PATH, place API modules next to it.
|
||||
# This should be removed in the future.
|
||||
file(COPY .
|
||||
DESTINATION ${llvm_cmake_builddir}
|
||||
FILES_MATCHING PATTERN *.cmake
|
||||
PATTERN .svn EXCLUDE
|
||||
PATTERN CMakeFiles EXCLUDE
|
||||
)
|
||||
|
||||
# Generate LLVMConfig.cmake for the install tree.
|
||||
set(LLVM_CONFIG_CODE "
|
||||
# Compute the installation prefix from this LLVMConfig.cmake file location.
|
||||
get_filename_component(LLVM_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
|
||||
# Construct the proper number of get_filename_component(... PATH)
|
||||
# calls to compute the installation prefix.
|
||||
string(REGEX REPLACE "/" ";" _count "${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
foreach(p ${_count})
|
||||
set(LLVM_CONFIG_CODE "${LLVM_CONFIG_CODE}
|
||||
get_filename_component(LLVM_INSTALL_PREFIX \"\${LLVM_INSTALL_PREFIX}\" PATH)")
|
||||
endforeach(p)
|
||||
set(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/include")
|
||||
set(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}")
|
||||
set(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}")
|
||||
set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin")
|
||||
set(LLVM_CONFIG_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMExports.cmake")
|
||||
set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}")
|
||||
configure_file(
|
||||
LLVMConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
|
||||
@ONLY)
|
||||
|
||||
# Generate LLVMConfigVersion.cmake for build and install tree.
|
||||
configure_file(
|
||||
LLVMConfigVersion.cmake.in
|
||||
${llvm_cmake_builddir}/LLVMConfigVersion.cmake
|
||||
@ONLY)
|
||||
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
|
||||
get_property(llvm_has_exports GLOBAL PROPERTY LLVM_HAS_EXPORTS)
|
||||
if(llvm_has_exports)
|
||||
install(EXPORT LLVMExports DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
|
||||
COMPONENT cmake-exports)
|
||||
endif()
|
||||
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
|
||||
${llvm_cmake_builddir}/LLVMConfigVersion.cmake
|
||||
LLVM-Config.cmake
|
||||
DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
|
||||
COMPONENT cmake-exports)
|
||||
|
||||
install(DIRECTORY .
|
||||
DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
|
||||
COMPONENT cmake-exports
|
||||
FILES_MATCHING PATTERN *.cmake
|
||||
PATTERN .svn EXCLUDE
|
||||
PATTERN LLVMConfig.cmake EXCLUDE
|
||||
PATTERN LLVMConfigVersion.cmake EXCLUDE
|
||||
PATTERN LLVM-Config.cmake EXCLUDE
|
||||
PATTERN GetHostTriple.cmake EXCLUDE)
|
||||
|
||||
if (NOT CMAKE_CONFIGURATION_TYPES)
|
||||
# Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
|
||||
add_custom_target(cmake-exports)
|
||||
add_llvm_install_targets(install-cmake-exports
|
||||
COMPONENT cmake-exports)
|
||||
endif()
|
||||
endif()
|
106
external/llvm/cmake/modules/CheckAtomic.cmake
vendored
106
external/llvm/cmake/modules/CheckAtomic.cmake
vendored
@ -1,106 +0,0 @@
|
||||
# atomic builtins are required for threading support.
|
||||
|
||||
INCLUDE(CheckCXXSourceCompiles)
|
||||
INCLUDE(CheckLibraryExists)
|
||||
|
||||
# Sometimes linking against libatomic is required for atomic ops, if
|
||||
# the platform doesn't support lock-free atomics.
|
||||
|
||||
function(check_working_cxx_atomics varname)
|
||||
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
#include <atomic>
|
||||
std::atomic<int> x;
|
||||
int main() {
|
||||
return x;
|
||||
}
|
||||
" ${varname})
|
||||
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
|
||||
endfunction(check_working_cxx_atomics)
|
||||
|
||||
function(check_working_cxx_atomics64 varname)
|
||||
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}")
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
std::atomic<uint64_t> x (0);
|
||||
int main() {
|
||||
uint64_t i = x.load(std::memory_order_relaxed);
|
||||
return 0;
|
||||
}
|
||||
" ${varname})
|
||||
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
|
||||
endfunction(check_working_cxx_atomics64)
|
||||
|
||||
|
||||
# This isn't necessary on MSVC, so avoid command-line switch annoyance
|
||||
# by only running on GCC-like hosts.
|
||||
if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
|
||||
# First check if atomics work without the library.
|
||||
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
||||
# If not, check if the library exists, and atomics work with it.
|
||||
if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
|
||||
check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
|
||||
if( HAVE_LIBATOMIC )
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
|
||||
if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
|
||||
message(FATAL_ERROR "Host compiler must support std::atomic!")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Check for 64 bit atomic operations.
|
||||
if(MSVC)
|
||||
set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True)
|
||||
else()
|
||||
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
|
||||
endif()
|
||||
|
||||
# If not, check if the library exists, and atomics work with it.
|
||||
if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
|
||||
check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
|
||||
if(HAVE_CXX_LIBATOMICS64)
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
|
||||
if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
|
||||
message(FATAL_ERROR "Host compiler must support std::atomic!")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
## TODO: This define is only used for the legacy atomic operations in
|
||||
## llvm's Atomic.h, which should be replaced. Other code simply
|
||||
## assumes C++11 <atomic> works.
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
#ifdef _MSC_VER
|
||||
#include <windows.h>
|
||||
#endif
|
||||
int main() {
|
||||
#ifdef _MSC_VER
|
||||
volatile LONG val = 1;
|
||||
MemoryBarrier();
|
||||
InterlockedCompareExchange(&val, 0, 1);
|
||||
InterlockedIncrement(&val);
|
||||
InterlockedDecrement(&val);
|
||||
#else
|
||||
volatile unsigned long val = 1;
|
||||
__sync_synchronize();
|
||||
__sync_val_compare_and_swap(&val, 1, 0);
|
||||
__sync_add_and_fetch(&val, 1);
|
||||
__sync_sub_and_fetch(&val, 1);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
" LLVM_HAS_ATOMICS)
|
||||
|
||||
if( NOT LLVM_HAS_ATOMICS )
|
||||
message(STATUS "Warning: LLVM will be built thread-unsafe because atomic builtins are missing")
|
||||
endif()
|
@ -1,52 +0,0 @@
|
||||
# Check if the host compiler is new enough. LLVM requires at least GCC 4.8,
|
||||
# MSVC 2015 (Update 3), or Clang 3.1.
|
||||
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
if(NOT DEFINED LLVM_COMPILER_CHECKED)
|
||||
set(LLVM_COMPILER_CHECKED ON)
|
||||
|
||||
if(NOT LLVM_FORCE_USE_OLD_TOOLCHAIN)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
||||
message(FATAL_ERROR "Host GCC version must be at least 4.8!")
|
||||
endif()
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.1)
|
||||
message(FATAL_ERROR "Host Clang version must be at least 3.1!")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_SIMULATE_ID MATCHES "MSVC")
|
||||
if (CMAKE_CXX_SIMULATE_VERSION VERSION_LESS 19.0)
|
||||
message(FATAL_ERROR "Host Clang must have at least -fms-compatibility-version=19.0")
|
||||
endif()
|
||||
set(CLANG_CL 1)
|
||||
elseif(NOT LLVM_ENABLE_LIBCXX)
|
||||
# Otherwise, test that we aren't using too old of a version of libstdc++
|
||||
# with the Clang compiler. This is tricky as there is no real way to
|
||||
# check the version of libstdc++ directly. Instead we test for a known
|
||||
# bug in libstdc++4.6 that is fixed in libstdc++4.7.
|
||||
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
||||
set(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++0x")
|
||||
check_cxx_source_compiles("
|
||||
#include <atomic>
|
||||
std::atomic<float> x(0.0f);
|
||||
int main() { return (float)x; }"
|
||||
LLVM_NO_OLD_LIBSTDCXX)
|
||||
if(NOT LLVM_NO_OLD_LIBSTDCXX)
|
||||
message(FATAL_ERROR "Host Clang must be able to find libstdc++4.8 or newer!")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
|
||||
endif()
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0)
|
||||
message(FATAL_ERROR "Host Visual Studio must be at least 2015")
|
||||
elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.00.24213.1)
|
||||
message(WARNING "Host Visual Studio should at least be 2015 Update 3 (MSVC 19.00.24213.1)"
|
||||
" due to miscompiles from earlier versions")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
@ -1,6 +0,0 @@
|
||||
include(CheckCXXCompilerFlag)
|
||||
|
||||
function(check_linker_flag flag out_var)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
|
||||
check_cxx_compiler_flag("" ${out_var})
|
||||
endfunction()
|
106
external/llvm/cmake/modules/ChooseMSVCCRT.cmake
vendored
106
external/llvm/cmake/modules/ChooseMSVCCRT.cmake
vendored
@ -1,106 +0,0 @@
|
||||
# The macro choose_msvc_crt() takes a list of possible
|
||||
# C runtimes to choose from, in the form of compiler flags,
|
||||
# to present to the user. (MTd for /MTd, etc)
|
||||
#
|
||||
# The macro is invoked at the end of the file.
|
||||
#
|
||||
# CMake already sets CRT flags in the CMAKE_CXX_FLAGS_* and
|
||||
# CMAKE_C_FLAGS_* variables by default. To let the user
|
||||
# override that for each build type:
|
||||
# 1. Detect which CRT is already selected, and reflect this in
|
||||
# LLVM_USE_CRT_* so the user can have a better idea of what
|
||||
# changes they're making.
|
||||
# 2. Replace the flags in both variables with the new flag via a regex.
|
||||
# 3. set() the variables back into the cache so the changes
|
||||
# are user-visible.
|
||||
|
||||
### Helper macros: ###
|
||||
macro(make_crt_regex regex crts)
|
||||
set(${regex} "")
|
||||
foreach(crt ${${crts}})
|
||||
# Trying to match the beginning or end of the string with stuff
|
||||
# like [ ^]+ didn't work, so use a bunch of parentheses instead.
|
||||
set(${regex} "${${regex}}|(^| +)/${crt}($| +)")
|
||||
endforeach(crt)
|
||||
string(REGEX REPLACE "^\\|" "" ${regex} "${${regex}}")
|
||||
endmacro(make_crt_regex)
|
||||
|
||||
macro(get_current_crt crt_current regex flagsvar)
|
||||
# Find the selected-by-CMake CRT for each build type, if any.
|
||||
# Strip off the leading slash and any whitespace.
|
||||
string(REGEX MATCH "${${regex}}" ${crt_current} "${${flagsvar}}")
|
||||
string(REPLACE "/" " " ${crt_current} "${${crt_current}}")
|
||||
string(STRIP "${${crt_current}}" ${crt_current})
|
||||
endmacro(get_current_crt)
|
||||
|
||||
# Replaces or adds a flag to a variable.
|
||||
# Expects 'flag' to be padded with spaces.
|
||||
macro(set_flag_in_var flagsvar regex flag)
|
||||
string(REGEX MATCH "${${regex}}" current_flag "${${flagsvar}}")
|
||||
if("${current_flag}" STREQUAL "")
|
||||
set(${flagsvar} "${${flagsvar}}${${flag}}")
|
||||
else()
|
||||
string(REGEX REPLACE "${${regex}}" "${${flag}}" ${flagsvar} "${${flagsvar}}")
|
||||
endif()
|
||||
string(STRIP "${${flagsvar}}" ${flagsvar})
|
||||
# Make sure this change gets reflected in the cache/gui.
|
||||
# CMake requires the docstring parameter whenever set() touches the cache,
|
||||
# so get the existing docstring and re-use that.
|
||||
get_property(flagsvar_docs CACHE ${flagsvar} PROPERTY HELPSTRING)
|
||||
set(${flagsvar} "${${flagsvar}}" CACHE STRING "${flagsvar_docs}" FORCE)
|
||||
endmacro(set_flag_in_var)
|
||||
|
||||
|
||||
macro(choose_msvc_crt MSVC_CRT)
|
||||
if(LLVM_USE_CRT)
|
||||
message(FATAL_ERROR
|
||||
"LLVM_USE_CRT is deprecated. Use the CMAKE_BUILD_TYPE-specific
|
||||
variables (LLVM_USE_CRT_DEBUG, etc) instead.")
|
||||
endif()
|
||||
|
||||
make_crt_regex(MSVC_CRT_REGEX ${MSVC_CRT})
|
||||
|
||||
foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
|
||||
string(TOUPPER "${build_type}" build)
|
||||
if (NOT LLVM_USE_CRT_${build})
|
||||
get_current_crt(LLVM_USE_CRT_${build}
|
||||
MSVC_CRT_REGEX
|
||||
CMAKE_CXX_FLAGS_${build})
|
||||
set(LLVM_USE_CRT_${build}
|
||||
"${LLVM_USE_CRT_${build}}"
|
||||
CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations."
|
||||
FORCE)
|
||||
set_property(CACHE LLVM_USE_CRT_${build}
|
||||
PROPERTY STRINGS ;${${MSVC_CRT}})
|
||||
endif(NOT LLVM_USE_CRT_${build})
|
||||
endforeach(build_type)
|
||||
|
||||
foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
|
||||
string(TOUPPER "${build_type}" build)
|
||||
if ("${LLVM_USE_CRT_${build}}" STREQUAL "")
|
||||
set(flag_string " ")
|
||||
else()
|
||||
set(flag_string " /${LLVM_USE_CRT_${build}} ")
|
||||
list(FIND ${MSVC_CRT} ${LLVM_USE_CRT_${build}} idx)
|
||||
if (idx LESS 0)
|
||||
message(FATAL_ERROR
|
||||
"Invalid value for LLVM_USE_CRT_${build}: ${LLVM_USE_CRT_${build}}. Valid options are one of: ${${MSVC_CRT}}")
|
||||
endif (idx LESS 0)
|
||||
message(STATUS "Using ${build_type} VC++ CRT: ${LLVM_USE_CRT_${build}}")
|
||||
endif()
|
||||
foreach(lang C CXX)
|
||||
set_flag_in_var(CMAKE_${lang}_FLAGS_${build} MSVC_CRT_REGEX flag_string)
|
||||
endforeach(lang)
|
||||
endforeach(build_type)
|
||||
endmacro(choose_msvc_crt MSVC_CRT)
|
||||
|
||||
|
||||
# List of valid CRTs for MSVC
|
||||
set(MSVC_CRT
|
||||
MD
|
||||
MDd
|
||||
MT
|
||||
MTd)
|
||||
|
||||
choose_msvc_crt(MSVC_CRT)
|
||||
|
67
external/llvm/cmake/modules/CrossCompile.cmake
vendored
67
external/llvm/cmake/modules/CrossCompile.cmake
vendored
@ -1,67 +0,0 @@
|
||||
function(llvm_create_cross_target_internal target_name toolchain buildtype)
|
||||
|
||||
if(NOT DEFINED LLVM_${target_name}_BUILD)
|
||||
set(LLVM_${target_name}_BUILD "${CMAKE_BINARY_DIR}/${target_name}")
|
||||
set(LLVM_${target_name}_BUILD ${LLVM_${target_name}_BUILD} PARENT_SCOPE)
|
||||
message(STATUS "Setting native build dir to " ${LLVM_${target_name}_BUILD})
|
||||
endif(NOT DEFINED LLVM_${target_name}_BUILD)
|
||||
|
||||
if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake)
|
||||
set(CROSS_TOOLCHAIN_FLAGS_INIT
|
||||
-DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\")
|
||||
else()
|
||||
set(CROSS_TOOLCHAIN_FLAGS_INIT
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
)
|
||||
endif()
|
||||
set(CROSS_TOOLCHAIN_FLAGS_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT}
|
||||
CACHE STRING "Toolchain configuration for ${target_name}")
|
||||
|
||||
if (buildtype)
|
||||
set(build_type_flags "-DCMAKE_BUILD_TYPE=${buildtype}")
|
||||
endif()
|
||||
if (LLVM_USE_LINKER AND NOT CMAKE_CROSSCOMPILING)
|
||||
set(linker_flag "-DLLVM_USE_LINKER=${LLVM_USE_LINKER}")
|
||||
endif()
|
||||
if (LLVM_EXTERNAL_CLANG_SOURCE_DIR)
|
||||
# Propagate LLVM_EXTERNAL_CLANG_SOURCE_DIR so that clang-tblgen can be built
|
||||
set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${LLVM_EXTERNAL_CLANG_SOURCE_DIR}")
|
||||
endif()
|
||||
|
||||
add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_${target_name}_BUILD}
|
||||
COMMENT "Creating ${LLVM_${target_name}_BUILD}...")
|
||||
|
||||
add_custom_target(CREATE_LLVM_${target_name}
|
||||
DEPENDS ${LLVM_${target_name}_BUILD})
|
||||
|
||||
# Escape semicolons in the targets list so that cmake doesn't expand
|
||||
# them to spaces.
|
||||
string(REPLACE ";" "$<SEMICOLON>" targets_to_build_arg
|
||||
"${LLVM_TARGETS_TO_BUILD}")
|
||||
string(REPLACE ";" "$<SEMICOLON>" experimental_targets_to_build_arg
|
||||
"${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}")
|
||||
|
||||
add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt
|
||||
COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
|
||||
${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR}
|
||||
-DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE
|
||||
-DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}"
|
||||
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}"
|
||||
-DLLVM_TOOLS_TO_BUILD="all"
|
||||
${build_type_flags} ${linker_flag} ${external_clang_dir}
|
||||
WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}
|
||||
DEPENDS CREATE_LLVM_${target_name}
|
||||
COMMENT "Configuring ${target_name} LLVM...")
|
||||
|
||||
add_custom_target(CONFIGURE_LLVM_${target_name}
|
||||
DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt)
|
||||
|
||||
endfunction()
|
||||
|
||||
function(llvm_create_cross_target target_name sysroot)
|
||||
llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE})
|
||||
endfunction()
|
||||
|
||||
llvm_create_cross_target_internal(NATIVE "" Release)
|
@ -1,13 +0,0 @@
|
||||
# Determine if the compiler has GCC-compatible command-line syntax.
|
||||
|
||||
if(NOT DEFINED LLVM_COMPILER_IS_GCC_COMPATIBLE)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
|
||||
elseif( MSVC )
|
||||
set(LLVM_COMPILER_IS_GCC_COMPATIBLE OFF)
|
||||
elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
||||
set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
|
||||
elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel" )
|
||||
set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON)
|
||||
endif()
|
||||
endif()
|
103
external/llvm/cmake/modules/FindOCaml.cmake
vendored
103
external/llvm/cmake/modules/FindOCaml.cmake
vendored
@ -1,103 +0,0 @@
|
||||
# CMake find_package() module for the OCaml language.
|
||||
# Assumes ocamlfind will be used for compilation.
|
||||
# http://ocaml.org/
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# find_package(OCaml)
|
||||
#
|
||||
# If successful, the following variables will be defined:
|
||||
# OCAMLFIND
|
||||
# OCAML_VERSION
|
||||
# OCAML_STDLIB_PATH
|
||||
# HAVE_OCAMLOPT
|
||||
#
|
||||
# Also provides find_ocamlfind_package() macro.
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# find_ocamlfind_package(ctypes)
|
||||
#
|
||||
# In any case, the following variables are defined:
|
||||
#
|
||||
# HAVE_OCAML_${pkg}
|
||||
#
|
||||
# If successful, the following variables will be defined:
|
||||
#
|
||||
# OCAML_${pkg}_VERSION
|
||||
|
||||
include( FindPackageHandleStandardArgs )
|
||||
|
||||
find_program(OCAMLFIND
|
||||
NAMES ocamlfind)
|
||||
|
||||
if( OCAMLFIND )
|
||||
execute_process(
|
||||
COMMAND ${OCAMLFIND} ocamlc -version
|
||||
OUTPUT_VARIABLE OCAML_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${OCAMLFIND} ocamlc -where
|
||||
OUTPUT_VARIABLE OCAML_STDLIB_PATH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${OCAMLFIND} ocamlc -version
|
||||
OUTPUT_QUIET
|
||||
RESULT_VARIABLE find_ocaml_result)
|
||||
if( find_ocaml_result EQUAL 0 )
|
||||
set(HAVE_OCAMLOPT TRUE)
|
||||
else()
|
||||
set(HAVE_OCAMLOPT FALSE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package_handle_standard_args( OCaml DEFAULT_MSG
|
||||
OCAMLFIND
|
||||
OCAML_VERSION
|
||||
OCAML_STDLIB_PATH)
|
||||
|
||||
mark_as_advanced(
|
||||
OCAMLFIND)
|
||||
|
||||
function(find_ocamlfind_package pkg)
|
||||
CMAKE_PARSE_ARGUMENTS(ARG "OPTIONAL" "VERSION" "" ${ARGN})
|
||||
|
||||
execute_process(
|
||||
COMMAND "${OCAMLFIND}" "query" "${pkg}" "-format" "%v"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE version
|
||||
ERROR_VARIABLE error
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
if( NOT result EQUAL 0 AND NOT ARG_OPTIONAL )
|
||||
message(FATAL_ERROR ${error})
|
||||
endif()
|
||||
|
||||
if( result EQUAL 0 )
|
||||
set(found TRUE)
|
||||
else()
|
||||
set(found FALSE)
|
||||
endif()
|
||||
|
||||
if( found AND ARG_VERSION )
|
||||
if( version VERSION_LESS ARG_VERSION AND ARG_OPTIONAL )
|
||||
# If it's optional and the constraint is not satisfied, pretend
|
||||
# it wasn't found.
|
||||
set(found FALSE)
|
||||
elseif( version VERSION_LESS ARG_VERSION )
|
||||
message(FATAL_ERROR
|
||||
"ocamlfind package ${pkg} should have version ${ARG_VERSION} or newer")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
string(TOUPPER ${pkg} pkg)
|
||||
|
||||
set(HAVE_OCAML_${pkg} ${found}
|
||||
PARENT_SCOPE)
|
||||
|
||||
set(OCAML_${pkg}_VERSION ${version}
|
||||
PARENT_SCOPE)
|
||||
endfunction()
|
27
external/llvm/cmake/modules/FindSphinx.cmake
vendored
27
external/llvm/cmake/modules/FindSphinx.cmake
vendored
@ -1,27 +0,0 @@
|
||||
# CMake find_package() Module for Sphinx documentation generator
|
||||
# http://sphinx-doc.org/
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# find_package(Sphinx)
|
||||
#
|
||||
# If successful the following variables will be defined
|
||||
# SPHINX_FOUND
|
||||
# SPHINX_EXECUTABLE
|
||||
|
||||
find_program(SPHINX_EXECUTABLE
|
||||
NAMES sphinx-build sphinx-build2
|
||||
DOC "Path to sphinx-build executable")
|
||||
|
||||
# Handle REQUIRED and QUIET arguments
|
||||
# this will also set SPHINX_FOUND to true if SPHINX_EXECUTABLE exists
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Sphinx
|
||||
"Failed to locate sphinx-build executable"
|
||||
SPHINX_EXECUTABLE)
|
||||
|
||||
# Provide options for controlling different types of output
|
||||
option(SPHINX_OUTPUT_HTML "Output standalone HTML files" ON)
|
||||
option(SPHINX_OUTPUT_MAN "Output man pages" ON)
|
||||
|
||||
option(SPHINX_WARNINGS_AS_ERRORS "When building documentation treat warnings as errors" ON)
|
@ -1,39 +0,0 @@
|
||||
# CMake project that writes Subversion revision information to a header.
|
||||
#
|
||||
# Input variables:
|
||||
# SRC - Source directory
|
||||
# HEADER_FILE - The header file to write
|
||||
#
|
||||
# The output header will contain macros FIRST_REPOSITORY and FIRST_REVISION,
|
||||
# and SECOND_REPOSITORY and SECOND_REVISION if requested, where "FIRST" and
|
||||
# "SECOND" are substituted with the names specified in the input variables.
|
||||
|
||||
|
||||
|
||||
# Chop off cmake/modules/GetSVN.cmake
|
||||
get_filename_component(LLVM_DIR "${CMAKE_SCRIPT_MODE_FILE}" PATH)
|
||||
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)
|
||||
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)
|
||||
|
||||
set(CMAKE_MODULE_PATH
|
||||
${CMAKE_MODULE_PATH}
|
||||
"${LLVM_DIR}/cmake/modules")
|
||||
include(VersionFromVCS)
|
||||
|
||||
# Handle strange terminals
|
||||
set(ENV{TERM} "dumb")
|
||||
|
||||
function(append_info name path)
|
||||
add_version_info_from_vcs(REVISION ${path})
|
||||
string(STRIP "${REVISION}" REVISION)
|
||||
file(APPEND "${HEADER_FILE}.txt"
|
||||
"#define ${name} \"${REVISION}\"\n")
|
||||
endfunction()
|
||||
|
||||
append_info(${NAME} "${SOURCE_DIR}")
|
||||
|
||||
# Copy the file only if it has changed.
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${HEADER_FILE}.txt" "${HEADER_FILE}")
|
||||
file(REMOVE "${HEADER_FILE}.txt")
|
||||
|
29
external/llvm/cmake/modules/GetHostTriple.cmake
vendored
29
external/llvm/cmake/modules/GetHostTriple.cmake
vendored
@ -1,29 +0,0 @@
|
||||
# Returns the host triple.
|
||||
# Invokes config.guess
|
||||
|
||||
function( get_host_triple var )
|
||||
if( MSVC )
|
||||
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
|
||||
set( value "x86_64-pc-win32" )
|
||||
else()
|
||||
set( value "i686-pc-win32" )
|
||||
endif()
|
||||
elseif( MINGW AND NOT MSYS )
|
||||
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
|
||||
set( value "x86_64-w64-mingw32" )
|
||||
else()
|
||||
set( value "i686-pc-mingw32" )
|
||||
endif()
|
||||
else( MSVC )
|
||||
set(config_guess ${LLVM_MAIN_SRC_DIR}/cmake/config.guess)
|
||||
execute_process(COMMAND sh ${config_guess}
|
||||
RESULT_VARIABLE TT_RV
|
||||
OUTPUT_VARIABLE TT_OUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if( NOT TT_RV EQUAL 0 )
|
||||
message(FATAL_ERROR "Failed to execute ${config_guess}")
|
||||
endif( NOT TT_RV EQUAL 0 )
|
||||
set( value ${TT_OUT} )
|
||||
endif( MSVC )
|
||||
set( ${var} ${value} PARENT_SCOPE )
|
||||
endfunction( get_host_triple var )
|
141
external/llvm/cmake/modules/GetSVN.cmake
vendored
141
external/llvm/cmake/modules/GetSVN.cmake
vendored
@ -1,141 +0,0 @@
|
||||
# CMake project that writes Subversion revision information to a header.
|
||||
#
|
||||
# Input variables:
|
||||
# SOURCE_DIRS - A list of source directories.
|
||||
# NAMES - A list of macro prefixes for each of the source directories.
|
||||
# HEADER_FILE - The header file to write
|
||||
#
|
||||
# The output header will contain macros <NAME>_REPOSITORY and <NAME>_REVISION,
|
||||
# where "<NAME>" and is substituted with the names specified in the input
|
||||
# variables, for each of the SOURCE_DIRS given.
|
||||
|
||||
# Chop off cmake/modules/GetSVN.cmake
|
||||
get_filename_component(LLVM_DIR "${CMAKE_SCRIPT_MODE_FILE}" PATH)
|
||||
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)
|
||||
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)
|
||||
|
||||
# Handle strange terminals
|
||||
set(ENV{TERM} "dumb")
|
||||
|
||||
macro(get_source_info_svn path revision repository)
|
||||
# If svn is a bat file, find_program(Subversion) doesn't find it.
|
||||
# Explicitly search for that here; Subversion_SVN_EXECUTABLE will override
|
||||
# the find_program call in FindSubversion.cmake.
|
||||
find_program(Subversion_SVN_EXECUTABLE NAMES svn svn.bat)
|
||||
|
||||
# FindSubversion does not work with symlinks. See PR 8437
|
||||
if (NOT IS_SYMLINK "${path}")
|
||||
find_package(Subversion)
|
||||
endif()
|
||||
if (Subversion_FOUND)
|
||||
subversion_wc_info( ${path} Project )
|
||||
if (Project_WC_REVISION)
|
||||
set(${revision} ${Project_WC_REVISION} PARENT_SCOPE)
|
||||
endif()
|
||||
if (Project_WC_URL)
|
||||
set(${repository} ${Project_WC_URL} PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(get_source_info_git_svn path revision repository)
|
||||
find_program(git_executable NAMES git git.exe git.cmd)
|
||||
if (git_executable)
|
||||
execute_process(COMMAND ${git_executable} svn info
|
||||
WORKING_DIRECTORY ${path}
|
||||
TIMEOUT 5
|
||||
RESULT_VARIABLE git_result
|
||||
OUTPUT_VARIABLE git_output)
|
||||
if (git_result EQUAL 0)
|
||||
string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
|
||||
"\\2" git_svn_rev "${git_output}")
|
||||
set(${revision} ${git_svn_rev} PARENT_SCOPE)
|
||||
string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
|
||||
"\\2" git_url "${git_output}")
|
||||
set(${repository} ${git_url} PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(get_source_info_git path revision repository)
|
||||
find_program(git_executable NAMES git git.exe git.cmd)
|
||||
if (git_executable)
|
||||
execute_process(COMMAND ${git_executable} log -1 --pretty=format:%H
|
||||
WORKING_DIRECTORY ${path}
|
||||
TIMEOUT 5
|
||||
RESULT_VARIABLE git_result
|
||||
OUTPUT_VARIABLE git_output)
|
||||
if (git_result EQUAL 0)
|
||||
set(${revision} ${git_output} PARENT_SCOPE)
|
||||
endif()
|
||||
execute_process(COMMAND ${git_executable} remote -v
|
||||
WORKING_DIRECTORY ${path}
|
||||
TIMEOUT 5
|
||||
RESULT_VARIABLE git_result
|
||||
OUTPUT_VARIABLE git_output)
|
||||
if (git_result EQUAL 0)
|
||||
string(REGEX REPLACE "^(.*\n)?[^ \t]+[ \t]+([^ \t\n]+)[ \t]+\\(fetch\\).*"
|
||||
"\\2" git_url "${git_output}")
|
||||
set(${repository} "${git_url}" PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(get_source_info path revision repository)
|
||||
if (EXISTS "${path}/.svn")
|
||||
get_source_info_svn("${path}" revision repository)
|
||||
elseif (EXISTS "${path}/.git/svn/refs")
|
||||
get_source_info_git_svn("${path}" revision repository)
|
||||
elseif (EXISTS "${path}/.git")
|
||||
get_source_info_git("${path}" revision repository)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(append_info name path)
|
||||
get_source_info("${path}" revision repository)
|
||||
string(STRIP "${revision}" revision)
|
||||
string(STRIP "${repository}" repository)
|
||||
file(APPEND "${HEADER_FILE}.txt"
|
||||
"#define ${name}_REVISION \"${revision}\"\n")
|
||||
file(APPEND "${HEADER_FILE}.txt"
|
||||
"#define ${name}_REPOSITORY \"${repository}\"\n")
|
||||
endfunction()
|
||||
|
||||
function(validate_inputs source_dirs names)
|
||||
list(LENGTH source_dirs source_dirs_length)
|
||||
list(LENGTH names names_length)
|
||||
if (NOT source_dirs_length EQUAL names_length)
|
||||
message(FATAL_ERROR
|
||||
"GetSVN.cmake takes two arguments: a list of source directories, "
|
||||
"and a list of names. Expected two lists must be of equal length, "
|
||||
"but got ${source_dirs_length} source directories and "
|
||||
"${names_length} names.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
if (DEFINED SOURCE_DIRS AND DEFINED NAMES)
|
||||
validate_inputs("${SOURCE_DIRS}" "${NAMES}")
|
||||
|
||||
list(LENGTH SOURCE_DIRS source_dirs_length)
|
||||
math(EXPR source_dirs_max_index ${source_dirs_length}-1)
|
||||
foreach(index RANGE ${source_dirs_max_index})
|
||||
list(GET SOURCE_DIRS ${index} source_dir)
|
||||
list(GET NAMES ${index} name)
|
||||
append_info(${name} ${source_dir})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Allow -DFIRST_SOURCE_DIR arguments until Clang migrates to the new
|
||||
# -DSOURCE_DIRS argument.
|
||||
if(DEFINED FIRST_SOURCE_DIR)
|
||||
append_info(${FIRST_NAME} "${FIRST_SOURCE_DIR}")
|
||||
if(DEFINED SECOND_SOURCE_DIR)
|
||||
append_info(${SECOND_NAME} "${SECOND_SOURCE_DIR}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Copy the file only if it has changed.
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${HEADER_FILE}.txt" "${HEADER_FILE}")
|
||||
file(REMOVE "${HEADER_FILE}.txt")
|
||||
|
863
external/llvm/cmake/modules/HandleLLVMOptions.cmake
vendored
863
external/llvm/cmake/modules/HandleLLVMOptions.cmake
vendored
File diff suppressed because it is too large
Load Diff
@ -1,30 +0,0 @@
|
||||
# This CMake module is responsible for setting the standard library to libc++
|
||||
# if the user has requested it.
|
||||
|
||||
include(DetermineGCCCompatible)
|
||||
|
||||
if(NOT DEFINED LLVM_STDLIB_HANDLED)
|
||||
set(LLVM_STDLIB_HANDLED ON)
|
||||
|
||||
function(append value)
|
||||
foreach(variable ${ARGN})
|
||||
set(${variable} "${${variable}} ${value}" PARENT_SCOPE)
|
||||
endforeach(variable)
|
||||
endfunction()
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
if(LLVM_ENABLE_LIBCXX)
|
||||
if(LLVM_COMPILER_IS_GCC_COMPATIBLE)
|
||||
check_cxx_compiler_flag("-stdlib=libc++" CXX_SUPPORTS_STDLIB)
|
||||
if(CXX_SUPPORTS_STDLIB)
|
||||
append("-stdlib=libc++"
|
||||
CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS
|
||||
CMAKE_MODULE_LINKER_FLAGS)
|
||||
else()
|
||||
message(WARNING "Can't specify libc++ with '-stdlib='")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Not sure how to specify libc++ for this compiler")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
320
external/llvm/cmake/modules/LLVM-Config.cmake
vendored
320
external/llvm/cmake/modules/LLVM-Config.cmake
vendored
@ -1,320 +0,0 @@
|
||||
function(get_system_libs return_var)
|
||||
message(AUTHOR_WARNING "get_system_libs no longer needed")
|
||||
set(${return_var} "" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(link_system_libs target)
|
||||
message(AUTHOR_WARNING "link_system_libs no longer needed")
|
||||
endfunction()
|
||||
|
||||
# is_llvm_target_library(
|
||||
# library
|
||||
# Name of the LLVM library to check
|
||||
# return_var
|
||||
# Output variable name
|
||||
# ALL_TARGETS;INCLUDED_TARGETS;OMITTED_TARGETS
|
||||
# ALL_TARGETS - default looks at the full list of known targets
|
||||
# INCLUDED_TARGETS - looks only at targets being configured
|
||||
# OMITTED_TARGETS - looks only at targets that are not being configured
|
||||
# )
|
||||
function(is_llvm_target_library library return_var)
|
||||
cmake_parse_arguments(ARG "ALL_TARGETS;INCLUDED_TARGETS;OMITTED_TARGETS" "" "" ${ARGN})
|
||||
# Sets variable `return_var' to ON if `library' corresponds to a
|
||||
# LLVM supported target. To OFF if it doesn't.
|
||||
set(${return_var} OFF PARENT_SCOPE)
|
||||
string(TOUPPER "${library}" capitalized_lib)
|
||||
if(ARG_INCLUDED_TARGETS)
|
||||
string(TOUPPER "${LLVM_TARGETS_TO_BUILD}" targets)
|
||||
elseif(ARG_OMITTED_TARGETS)
|
||||
set(omitted_targets ${LLVM_ALL_TARGETS})
|
||||
list(REMOVE_ITEM omitted_targets ${LLVM_TARGETS_TO_BUILD})
|
||||
string(TOUPPER "${omitted_targets}" targets)
|
||||
else()
|
||||
string(TOUPPER "${LLVM_ALL_TARGETS}" targets)
|
||||
endif()
|
||||
foreach(t ${targets})
|
||||
if( capitalized_lib STREQUAL t OR
|
||||
capitalized_lib STREQUAL "${t}" OR
|
||||
capitalized_lib STREQUAL "${t}DESC" OR
|
||||
capitalized_lib STREQUAL "${t}CODEGEN" OR
|
||||
capitalized_lib STREQUAL "${t}ASMPARSER" OR
|
||||
capitalized_lib STREQUAL "${t}ASMPRINTER" OR
|
||||
capitalized_lib STREQUAL "${t}DISASSEMBLER" OR
|
||||
capitalized_lib STREQUAL "${t}INFO" OR
|
||||
capitalized_lib STREQUAL "${t}UTILS" )
|
||||
set(${return_var} ON PARENT_SCOPE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction(is_llvm_target_library)
|
||||
|
||||
function(is_llvm_target_specifier library return_var)
|
||||
is_llvm_target_library(${library} ${return_var} ${ARGN})
|
||||
string(TOUPPER "${library}" capitalized_lib)
|
||||
if(NOT ${return_var})
|
||||
if( capitalized_lib STREQUAL "ALLTARGETSASMPARSERS" OR
|
||||
capitalized_lib STREQUAL "ALLTARGETSDESCS" OR
|
||||
capitalized_lib STREQUAL "ALLTARGETSDISASSEMBLERS" OR
|
||||
capitalized_lib STREQUAL "ALLTARGETSINFOS" OR
|
||||
capitalized_lib STREQUAL "NATIVE" OR
|
||||
capitalized_lib STREQUAL "NATIVECODEGEN" )
|
||||
set(${return_var} ON PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
macro(llvm_config executable)
|
||||
cmake_parse_arguments(ARG "USE_SHARED" "" "" ${ARGN})
|
||||
set(link_components ${ARG_UNPARSED_ARGUMENTS})
|
||||
|
||||
if(USE_SHARED)
|
||||
# If USE_SHARED is specified, then we link against libLLVM,
|
||||
# but also against the component libraries below. This is
|
||||
# done in case libLLVM does not contain all of the components
|
||||
# the target requires.
|
||||
#
|
||||
# Strip LLVM_DYLIB_COMPONENTS out of link_components.
|
||||
# To do this, we need special handling for "all", since that
|
||||
# may imply linking to libraries that are not included in
|
||||
# libLLVM.
|
||||
|
||||
if (DEFINED link_components AND DEFINED LLVM_DYLIB_COMPONENTS)
|
||||
if("${LLVM_DYLIB_COMPONENTS}" STREQUAL "all")
|
||||
set(link_components "")
|
||||
else()
|
||||
list(REMOVE_ITEM link_components ${LLVM_DYLIB_COMPONENTS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(${executable} PRIVATE LLVM)
|
||||
endif()
|
||||
|
||||
explicit_llvm_config(${executable} ${link_components})
|
||||
endmacro(llvm_config)
|
||||
|
||||
|
||||
function(explicit_llvm_config executable)
|
||||
set( link_components ${ARGN} )
|
||||
|
||||
llvm_map_components_to_libnames(LIBRARIES ${link_components})
|
||||
get_target_property(t ${executable} TYPE)
|
||||
if(t STREQUAL "STATIC_LIBRARY")
|
||||
target_link_libraries(${executable} INTERFACE ${LIBRARIES})
|
||||
elseif(t STREQUAL "EXECUTABLE" OR t STREQUAL "SHARED_LIBRARY" OR t STREQUAL "MODULE_LIBRARY")
|
||||
target_link_libraries(${executable} PRIVATE ${LIBRARIES})
|
||||
else()
|
||||
# Use plain form for legacy user.
|
||||
target_link_libraries(${executable} ${LIBRARIES})
|
||||
endif()
|
||||
endfunction(explicit_llvm_config)
|
||||
|
||||
|
||||
# This is Deprecated
|
||||
function(llvm_map_components_to_libraries OUT_VAR)
|
||||
message(AUTHOR_WARNING "Using llvm_map_components_to_libraries() is deprecated. Use llvm_map_components_to_libnames() instead")
|
||||
explicit_map_components_to_libraries(result ${ARGN})
|
||||
set( ${OUT_VAR} ${result} ${sys_result} PARENT_SCOPE )
|
||||
endfunction(llvm_map_components_to_libraries)
|
||||
|
||||
# This is a variant intended for the final user:
|
||||
# Map LINK_COMPONENTS to actual libnames.
|
||||
function(llvm_map_components_to_libnames out_libs)
|
||||
set( link_components ${ARGN} )
|
||||
if(NOT LLVM_AVAILABLE_LIBS)
|
||||
# Inside LLVM itself available libs are in a global property.
|
||||
get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS)
|
||||
endif()
|
||||
string(TOUPPER "${LLVM_AVAILABLE_LIBS}" capitalized_libs)
|
||||
|
||||
get_property(LLVM_TARGETS_CONFIGURED GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED)
|
||||
|
||||
# Generally in our build system we avoid order-dependence. Unfortunately since
|
||||
# not all targets create the same set of libraries we actually need to ensure
|
||||
# that all build targets associated with a target are added before we can
|
||||
# process target dependencies.
|
||||
if(NOT LLVM_TARGETS_CONFIGURED)
|
||||
foreach(c ${link_components})
|
||||
is_llvm_target_specifier(${c} iltl_result ALL_TARGETS)
|
||||
if(iltl_result)
|
||||
message(FATAL_ERROR "Specified target library before target registration is complete.")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Expand some keywords:
|
||||
list(FIND LLVM_TARGETS_TO_BUILD "${LLVM_NATIVE_ARCH}" have_native_backend)
|
||||
list(FIND link_components "engine" engine_required)
|
||||
if( NOT engine_required EQUAL -1 )
|
||||
list(FIND LLVM_TARGETS_WITH_JIT "${LLVM_NATIVE_ARCH}" have_jit)
|
||||
if( NOT have_native_backend EQUAL -1 AND NOT have_jit EQUAL -1 )
|
||||
list(APPEND link_components "jit")
|
||||
list(APPEND link_components "native")
|
||||
else()
|
||||
list(APPEND link_components "interpreter")
|
||||
endif()
|
||||
endif()
|
||||
list(FIND link_components "native" native_required)
|
||||
if( NOT native_required EQUAL -1 )
|
||||
if( NOT have_native_backend EQUAL -1 )
|
||||
list(APPEND link_components ${LLVM_NATIVE_ARCH})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Translate symbolic component names to real libraries:
|
||||
foreach(c ${link_components})
|
||||
# add codegen, asmprinter, asmparser, disassembler
|
||||
list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
|
||||
if( NOT idx LESS 0 )
|
||||
if( TARGET LLVM${c}CodeGen )
|
||||
list(APPEND expanded_components "LLVM${c}CodeGen")
|
||||
else()
|
||||
if( TARGET LLVM${c} )
|
||||
list(APPEND expanded_components "LLVM${c}")
|
||||
else()
|
||||
message(FATAL_ERROR "Target ${c} is not in the set of libraries.")
|
||||
endif()
|
||||
endif()
|
||||
if( TARGET LLVM${c}AsmParser )
|
||||
list(APPEND expanded_components "LLVM${c}AsmParser")
|
||||
endif()
|
||||
if( TARGET LLVM${c}AsmPrinter )
|
||||
list(APPEND expanded_components "LLVM${c}AsmPrinter")
|
||||
endif()
|
||||
if( TARGET LLVM${c}Desc )
|
||||
list(APPEND expanded_components "LLVM${c}Desc")
|
||||
endif()
|
||||
if( TARGET LLVM${c}Disassembler )
|
||||
list(APPEND expanded_components "LLVM${c}Disassembler")
|
||||
endif()
|
||||
if( TARGET LLVM${c}Info )
|
||||
list(APPEND expanded_components "LLVM${c}Info")
|
||||
endif()
|
||||
if( TARGET LLVM${c}Utils )
|
||||
list(APPEND expanded_components "LLVM${c}Utils")
|
||||
endif()
|
||||
elseif( c STREQUAL "native" )
|
||||
# already processed
|
||||
elseif( c STREQUAL "nativecodegen" )
|
||||
list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen")
|
||||
if( TARGET LLVM${LLVM_NATIVE_ARCH}Desc )
|
||||
list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}Desc")
|
||||
endif()
|
||||
if( TARGET LLVM${LLVM_NATIVE_ARCH}Info )
|
||||
list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}Info")
|
||||
endif()
|
||||
elseif( c STREQUAL "backend" )
|
||||
# same case as in `native'.
|
||||
elseif( c STREQUAL "engine" )
|
||||
# already processed
|
||||
elseif( c STREQUAL "all" )
|
||||
list(APPEND expanded_components ${LLVM_AVAILABLE_LIBS})
|
||||
elseif( c STREQUAL "AllTargetsAsmPrinters" )
|
||||
# Link all the asm printers from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
if( TARGET LLVM${t}AsmPrinter )
|
||||
list(APPEND expanded_components "LLVM${t}AsmPrinter")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsAsmParsers" )
|
||||
# Link all the asm parsers from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
if( TARGET LLVM${t}AsmParser )
|
||||
list(APPEND expanded_components "LLVM${t}AsmParser")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsDescs" )
|
||||
# Link all the descs from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
if( TARGET LLVM${t}Desc )
|
||||
list(APPEND expanded_components "LLVM${t}Desc")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsDisassemblers" )
|
||||
# Link all the disassemblers from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
if( TARGET LLVM${t}Disassembler )
|
||||
list(APPEND expanded_components "LLVM${t}Disassembler")
|
||||
endif()
|
||||
endforeach(t)
|
||||
elseif( c STREQUAL "AllTargetsInfos" )
|
||||
# Link all the infos from all the targets
|
||||
foreach(t ${LLVM_TARGETS_TO_BUILD})
|
||||
if( TARGET LLVM${t}Info )
|
||||
list(APPEND expanded_components "LLVM${t}Info")
|
||||
endif()
|
||||
endforeach(t)
|
||||
else( NOT idx LESS 0 )
|
||||
# Canonize the component name:
|
||||
string(TOUPPER "${c}" capitalized)
|
||||
list(FIND capitalized_libs LLVM${capitalized} lib_idx)
|
||||
if( lib_idx LESS 0 )
|
||||
# The component is unknown. Maybe is an omitted target?
|
||||
is_llvm_target_library(${c} iltl_result OMITTED_TARGETS)
|
||||
if(iltl_result)
|
||||
# A missing library to a directly referenced omitted target would be bad.
|
||||
message(FATAL_ERROR "Library '${c}' is a direct reference to a target library for an omitted target.")
|
||||
else()
|
||||
# If it is not an omitted target we should assume it is a component
|
||||
# that hasn't yet been processed by CMake. Missing components will
|
||||
# cause errors later in the configuration, so we can safely assume
|
||||
# that this is valid here.
|
||||
list(APPEND expanded_components LLVM${c})
|
||||
endif()
|
||||
else( lib_idx LESS 0 )
|
||||
list(GET LLVM_AVAILABLE_LIBS ${lib_idx} canonical_lib)
|
||||
list(APPEND expanded_components ${canonical_lib})
|
||||
endif( lib_idx LESS 0 )
|
||||
endif( NOT idx LESS 0 )
|
||||
endforeach(c)
|
||||
|
||||
set(${out_libs} ${expanded_components} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Perform a post-order traversal of the dependency graph.
|
||||
# This duplicates the algorithm used by llvm-config, originally
|
||||
# in tools/llvm-config/llvm-config.cpp, function ComputeLibsForComponents.
|
||||
function(expand_topologically name required_libs visited_libs)
|
||||
list(FIND visited_libs ${name} found)
|
||||
if( found LESS 0 )
|
||||
list(APPEND visited_libs ${name})
|
||||
set(visited_libs ${visited_libs} PARENT_SCOPE)
|
||||
|
||||
get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name})
|
||||
foreach( lib_dep ${lib_deps} )
|
||||
expand_topologically(${lib_dep} "${required_libs}" "${visited_libs}")
|
||||
set(required_libs ${required_libs} PARENT_SCOPE)
|
||||
set(visited_libs ${visited_libs} PARENT_SCOPE)
|
||||
endforeach()
|
||||
|
||||
list(APPEND required_libs ${name})
|
||||
set(required_libs ${required_libs} PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Expand dependencies while topologically sorting the list of libraries:
|
||||
function(llvm_expand_dependencies out_libs)
|
||||
set(expanded_components ${ARGN})
|
||||
|
||||
set(required_libs)
|
||||
set(visited_libs)
|
||||
foreach( lib ${expanded_components} )
|
||||
expand_topologically(${lib} "${required_libs}" "${visited_libs}")
|
||||
endforeach()
|
||||
|
||||
list(REVERSE required_libs)
|
||||
set(${out_libs} ${required_libs} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(explicit_map_components_to_libraries out_libs)
|
||||
llvm_map_components_to_libnames(link_libs ${ARGN})
|
||||
llvm_expand_dependencies(expanded_components ${link_libs})
|
||||
# Return just the libraries included in this build:
|
||||
set(result)
|
||||
foreach(c ${expanded_components})
|
||||
if( TARGET ${c} )
|
||||
set(result ${result} ${c})
|
||||
endif()
|
||||
endforeach(c)
|
||||
set(${out_libs} ${result} PARENT_SCOPE)
|
||||
endfunction(explicit_map_components_to_libraries)
|
93
external/llvm/cmake/modules/LLVMConfig.cmake.in
vendored
93
external/llvm/cmake/modules/LLVMConfig.cmake.in
vendored
@ -1,93 +0,0 @@
|
||||
# This file provides information and services to the final user.
|
||||
|
||||
@LLVM_CONFIG_CODE@
|
||||
|
||||
set(LLVM_VERSION_MAJOR @LLVM_VERSION_MAJOR@)
|
||||
set(LLVM_VERSION_MINOR @LLVM_VERSION_MINOR@)
|
||||
set(LLVM_VERSION_PATCH @LLVM_VERSION_PATCH@)
|
||||
set(LLVM_PACKAGE_VERSION @PACKAGE_VERSION@)
|
||||
|
||||
set(LLVM_BUILD_TYPE @CMAKE_BUILD_TYPE@)
|
||||
|
||||
set(LLVM_COMMON_DEPENDS @LLVM_COMMON_DEPENDS@)
|
||||
|
||||
set(LLVM_AVAILABLE_LIBS @LLVM_AVAILABLE_LIBS@)
|
||||
|
||||
set(LLVM_ALL_TARGETS @LLVM_ALL_TARGETS@)
|
||||
|
||||
set(LLVM_TARGETS_TO_BUILD @LLVM_TARGETS_TO_BUILD@)
|
||||
|
||||
set(LLVM_TARGETS_WITH_JIT @LLVM_TARGETS_WITH_JIT@)
|
||||
|
||||
@all_llvm_lib_deps@
|
||||
|
||||
set(TARGET_TRIPLE "@TARGET_TRIPLE@")
|
||||
|
||||
set(LLVM_ABI_BREAKING_CHECKS @LLVM_ABI_BREAKING_CHECKS@)
|
||||
|
||||
set(LLVM_ENABLE_ASSERTIONS @LLVM_ENABLE_ASSERTIONS@)
|
||||
|
||||
set(LLVM_ENABLE_EH @LLVM_ENABLE_EH@)
|
||||
|
||||
set(LLVM_ENABLE_RTTI @LLVM_ENABLE_RTTI@)
|
||||
|
||||
set(LLVM_ENABLE_TERMINFO @LLVM_ENABLE_TERMINFO@)
|
||||
|
||||
set(LLVM_ENABLE_THREADS @LLVM_ENABLE_THREADS@)
|
||||
|
||||
set(LLVM_ENABLE_ZLIB @LLVM_ENABLE_ZLIB@)
|
||||
|
||||
set(LLVM_LIBXML2_ENABLED @LLVM_LIBXML2_ENABLED@)
|
||||
|
||||
set(LLVM_ENABLE_DIA_SDK @LLVM_ENABLE_DIA_SDK@)
|
||||
|
||||
set(LLVM_NATIVE_ARCH @LLVM_NATIVE_ARCH@)
|
||||
|
||||
set(LLVM_ENABLE_PIC @LLVM_ENABLE_PIC@)
|
||||
|
||||
set(LLVM_BUILD_32_BITS @LLVM_BUILD_32_BITS@)
|
||||
|
||||
if (NOT "@LLVM_PTHREAD_LIB@" STREQUAL "")
|
||||
set(LLVM_PTHREAD_LIB "@LLVM_PTHREAD_LIB@")
|
||||
endif()
|
||||
|
||||
set(LLVM_ENABLE_PLUGINS @LLVM_ENABLE_PLUGINS@)
|
||||
set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS @LLVM_EXPORT_SYMBOLS_FOR_PLUGINS@)
|
||||
set(LLVM_PLUGIN_EXT @LLVM_PLUGIN_EXT@)
|
||||
|
||||
set(LLVM_ON_UNIX @LLVM_ON_UNIX@)
|
||||
set(LLVM_ON_WIN32 @LLVM_ON_WIN32@)
|
||||
|
||||
set(LLVM_LIBDIR_SUFFIX @LLVM_LIBDIR_SUFFIX@)
|
||||
|
||||
set(LLVM_INCLUDE_DIRS "@LLVM_CONFIG_INCLUDE_DIRS@")
|
||||
set(LLVM_LIBRARY_DIRS "@LLVM_CONFIG_LIBRARY_DIRS@")
|
||||
|
||||
# These variables are duplicated, but they must match the LLVM variables of the
|
||||
# same name. The variables ending in "S" could some day become lists, and are
|
||||
# preserved for convention and compatibility.
|
||||
set(LLVM_INCLUDE_DIR "@LLVM_CONFIG_INCLUDE_DIRS@")
|
||||
set(LLVM_LIBRARY_DIR "@LLVM_CONFIG_LIBRARY_DIRS@")
|
||||
|
||||
set(LLVM_DEFINITIONS "@LLVM_DEFINITIONS@")
|
||||
set(LLVM_CMAKE_DIR "@LLVM_CONFIG_CMAKE_DIR@")
|
||||
set(LLVM_BINARY_DIR "@LLVM_CONFIG_BINARY_DIR@")
|
||||
set(LLVM_TOOLS_BINARY_DIR "@LLVM_CONFIG_TOOLS_BINARY_DIR@")
|
||||
set(LLVM_TOOLS_INSTALL_DIR "@LLVM_TOOLS_INSTALL_DIR@")
|
||||
set(LLVM_HAVE_OPT_VIEWER_MODULES @LLVM_HAVE_OPT_VIEWER_MODULES@)
|
||||
|
||||
if(NOT TARGET LLVMSupport)
|
||||
set(LLVM_EXPORTED_TARGETS "@LLVM_CONFIG_EXPORTS@")
|
||||
include("@LLVM_CONFIG_EXPORTS_FILE@")
|
||||
@llvm_config_include_buildtree_only_exports@
|
||||
endif()
|
||||
|
||||
# By creating intrinsics_gen here, subprojects that depend on LLVM's
|
||||
# tablegen-generated headers can always depend on this target whether building
|
||||
# in-tree with LLVM or not.
|
||||
if(NOT TARGET intrinsics_gen)
|
||||
add_custom_target(intrinsics_gen)
|
||||
endif()
|
||||
|
||||
set_property(GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED On)
|
||||
include(${LLVM_CMAKE_DIR}/LLVM-Config.cmake)
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user