diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index cb642ec3..382bc2b5 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.13.4) +include(CMakePrintHelpers) + set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) if(NOT DEFINED LLVM_VERSION_MAJOR) @@ -30,23 +32,16 @@ if(POLICY CMP0116) cmake_policy(SET CMP0116 OLD) endif() -if (NOT PACKAGE_VERSION) +# if (NOT PACKAGE_VERSION) set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}") -endif() - -if ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQUAL "")) - message(WARNING "Visual Studio generators use the x86 host compiler by " - "default, even for 64-bit targets. This can result in linker " - "instability and out of memory errors. To use the 64-bit " - "host compiler, pass -Thost=x64 on the CMake command line.") -endif() +# endif() -if (CMAKE_GENERATOR STREQUAL "Xcode" AND NOT CMAKE_OSX_ARCHITECTURES) - # Some CMake features like object libraries get confused if you don't - # explicitly specify an architecture setting with the Xcode generator. - set(CMAKE_OSX_ARCHITECTURES "x86_64") -endif() +# if (CMAKE_GENERATOR STREQUAL "Xcode" AND NOT CMAKE_OSX_ARCHITECTURES) +# # Some CMake features like object libraries get confused if you don't +# # explicitly specify an architecture setting with the Xcode generator. +# set(CMAKE_OSX_ARCHITECTURES "x86_64") +# endif() project(LLVM VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} @@ -54,13 +49,13 @@ project(LLVM set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to") set(CMAKE_CXX_STANDARD_REQUIRED YES) -if (CYGWIN) - # Cygwin is a bit stricter and lack things like 'strdup', 'stricmp', etc in - # c++xx mode. - set(CMAKE_CXX_EXTENSIONS YES) -else() +# if (CYGWIN) +# # Cygwin is a bit stricter and lack things like 'strdup', 'stricmp', etc in +# # c++xx mode. +# set(CMAKE_CXX_EXTENSIONS YES) +# else() set(CMAKE_CXX_EXTENSIONS NO) -endif() +# endif() if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "No build type selected, default to Debug") @@ -142,47 +137,48 @@ endif() unset(SHOULD_ENABLE_PROJECT) # Build llvm with ccache if the package is present -set(LLVM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build") -if(LLVM_CCACHE_BUILD) - find_program(CCACHE_PROGRAM ccache) - if(CCACHE_PROGRAM) - set(LLVM_CCACHE_MAXSIZE "" CACHE STRING "Size of ccache") - set(LLVM_CCACHE_DIR "" CACHE STRING "Directory to keep ccached data") - set(LLVM_CCACHE_PARAMS "CCACHE_CPP2=yes CCACHE_HASHDIR=yes" - CACHE STRING "Parameters to pass through to ccache") - - set(CCACHE_PROGRAM "${LLVM_CCACHE_PARAMS} ${CCACHE_PROGRAM}") - if (LLVM_CCACHE_MAXSIZE) - set(CCACHE_PROGRAM "CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} ${CCACHE_PROGRAM}") - endif() - if (LLVM_CCACHE_DIR) - set(CCACHE_PROGRAM "CCACHE_DIR=${LLVM_CCACHE_DIR} ${CCACHE_PROGRAM}") - endif() - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM}) - else() - message(FATAL_ERROR "Unable to find the program ccache. Set LLVM_CCACHE_BUILD to OFF") - endif() -endif() - -option(LLVM_DEPENDENCY_DEBUGGING "Dependency debugging mode to verify correctly expressed library dependencies (Darwin only)" OFF) +# set(LLVM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build") +# if(LLVM_CCACHE_BUILD) +# find_program(CCACHE_PROGRAM ccache) +# if(CCACHE_PROGRAM) +# set(LLVM_CCACHE_MAXSIZE "" CACHE STRING "Size of ccache") +# set(LLVM_CCACHE_DIR "" CACHE STRING "Directory to keep ccached data") +# set(LLVM_CCACHE_PARAMS "CCACHE_CPP2=yes CCACHE_HASHDIR=yes" +# CACHE STRING "Parameters to pass through to ccache") +# +# set(CCACHE_PROGRAM "${LLVM_CCACHE_PARAMS} ${CCACHE_PROGRAM}") +# if (LLVM_CCACHE_MAXSIZE) +# set(CCACHE_PROGRAM "CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} ${CCACHE_PROGRAM}") +# endif() +# if (LLVM_CCACHE_DIR) +# set(CCACHE_PROGRAM "CCACHE_DIR=${LLVM_CCACHE_DIR} ${CCACHE_PROGRAM}") +# endif() +# set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM}) +# else() +# message(FATAL_ERROR "Unable to find the program ccache. Set LLVM_CCACHE_BUILD to OFF") +# endif() +# endif() + +# option(LLVM_DEPENDENCY_DEBUGGING "Dependency debugging mode to verify correctly expressed library dependencies (Darwin only)" OFF) # Some features of the LLVM build may be disallowed when dependency debugging is # enabled. In particular you cannot use ccache because we want to force compile # operations to always happen. -if(LLVM_DEPENDENCY_DEBUGGING) - if(NOT CMAKE_HOST_APPLE) - message(FATAL_ERROR "Dependency debugging is only currently supported on Darwin hosts.") - endif() - if(LLVM_CCACHE_BUILD) - message(FATAL_ERROR "Cannot enable dependency debugging while using ccache.") - endif() -endif() - -option(LLVM_ENABLE_DAGISEL_COV "Debug: Prints tablegen patterns that were used for selecting" OFF) -option(LLVM_ENABLE_GISEL_COV "Enable collection of GlobalISel rule coverage" OFF) -if(LLVM_ENABLE_GISEL_COV) - set(LLVM_GISEL_COV_PREFIX "${CMAKE_BINARY_DIR}/gisel-coverage-" CACHE STRING "Provide a filename prefix to collect the GlobalISel rule coverage") -endif() +# ROB: LLVM_DEPENDENCY_DEBUGGING is OFF +# if(LLVM_DEPENDENCY_DEBUGGING) +# if(NOT CMAKE_HOST_APPLE) +# message(FATAL_ERROR "Dependency debugging is only currently supported on Darwin hosts.") +# endif() +# if(LLVM_CCACHE_BUILD) +# message(FATAL_ERROR "Cannot enable dependency debugging while using ccache.") +# endif() +# endif() + +# option(LLVM_ENABLE_DAGISEL_COV "Debug: Prints tablegen patterns that were used for selecting" OFF) +# option(LLVM_ENABLE_GISEL_COV "Enable collection of GlobalISel rule coverage" OFF) +# if(LLVM_ENABLE_GISEL_COV) +# set(LLVM_GISEL_COV_PREFIX "${CMAKE_BINARY_DIR}/gisel-coverage-" CACHE STRING "Provide a filename prefix to collect the GlobalISel rule coverage") +# endif() # Add path for custom modules set(CMAKE_MODULE_PATH @@ -193,32 +189,32 @@ set(CMAKE_MODULE_PATH # Generate a CompilationDatabase (compile_commands.json file) for our build, # for use by clang_complete, YouCompleteMe, etc. -set(CMAKE_EXPORT_COMPILE_COMMANDS 1) +# set(CMAKE_EXPORT_COMPILE_COMMANDS 1) -option(LLVM_INSTALL_BINUTILS_SYMLINKS - "Install symlinks from the binutils tool names to the corresponding LLVM tools." OFF) +# option(LLVM_INSTALL_BINUTILS_SYMLINKS +# "Install symlinks from the binutils tool names to the corresponding LLVM tools." OFF) -option(LLVM_INSTALL_CCTOOLS_SYMLINKS - "Install symlinks from the cctools tool names to the corresponding LLVM tools." OFF) +# option(LLVM_INSTALL_CCTOOLS_SYMLINKS +# "Install symlinks from the cctools tool names to the corresponding LLVM tools." OFF) -option(LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF) +# option(LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF) -option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) +# option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) # Unfortunatly Clang is too eager to search directories for module maps, which can cause the # installed version of the maps to be found when building LLVM from source. Therefore we turn off # the installation by default. See llvm.org/PR31905. -option(LLVM_INSTALL_MODULEMAPS "Install the modulemap files in the 'install' target." OFF) +# option(LLVM_INSTALL_MODULEMAPS "Install the modulemap files in the 'install' target." OFF) -option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) -if ( LLVM_USE_FOLDERS ) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) -endif() +# option(LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON) +# if ( LLVM_USE_FOLDERS ) +# set_property(GLOBAL PROPERTY USE_FOLDERS ON) +# endif() include(VersionFromVCS) -option(LLVM_APPEND_VC_REV - "Embed the version control system revision in LLVM" ON) +# option(LLVM_APPEND_VC_REV +# "Embed the version control system revision in LLVM" ON) set(PACKAGE_NAME LLVM) set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") @@ -271,12 +267,12 @@ endif() set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" ) -set(LLVM_TOOLS_INSTALL_DIR "bin" CACHE STRING "Path for binary subdirectory (defaults to 'bin')") -mark_as_advanced(LLVM_TOOLS_INSTALL_DIR) +# set(LLVM_TOOLS_INSTALL_DIR "bin" CACHE STRING "Path for binary subdirectory (defaults to 'bin')") +# mark_as_advanced(LLVM_TOOLS_INSTALL_DIR) -set(LLVM_UTILS_INSTALL_DIR "${LLVM_TOOLS_INSTALL_DIR}" CACHE STRING - "Path to install LLVM utilities (enabled by LLVM_INSTALL_UTILS=ON) (defaults to LLVM_TOOLS_INSTALL_DIR)") -mark_as_advanced(LLVM_UTILS_INSTALL_DIR) +# set(LLVM_UTILS_INSTALL_DIR "${LLVM_TOOLS_INSTALL_DIR}" CACHE STRING +# "Path to install LLVM utilities (enabled by LLVM_INSTALL_UTILS=ON) (defaults to LLVM_TOOLS_INSTALL_DIR)") +# mark_as_advanced(LLVM_UTILS_INSTALL_DIR) # They are used as destination of target generators. set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) @@ -333,66 +329,66 @@ set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD "" option(BUILD_SHARED_LIBS "Build all libraries as shared libraries instead of static" OFF) -option(LLVM_ENABLE_BACKTRACES "Enable embedding backtraces on crash." OFF) -if(LLVM_ENABLE_BACKTRACES) - set(ENABLE_BACKTRACES 1) -endif() +# option(LLVM_ENABLE_BACKTRACES "Enable embedding backtraces on crash." OFF) +# if(LLVM_ENABLE_BACKTRACES) +# set(ENABLE_BACKTRACES 1) +# endif() option(LLVM_ENABLE_UNWIND_TABLES "Emit unwind tables for the libraries" ON) -option(LLVM_ENABLE_CRASH_OVERRIDES "Enable crash overrides." OFF) -if(LLVM_ENABLE_CRASH_OVERRIDES) - set(ENABLE_CRASH_OVERRIDES 1) -endif() +# option(LLVM_ENABLE_CRASH_OVERRIDES "Enable crash overrides." OFF) +# if(LLVM_ENABLE_CRASH_OVERRIDES) +# set(ENABLE_CRASH_OVERRIDES 1) +# endif() -option(LLVM_ENABLE_CRASH_DUMPS "Turn on memory dumps on crashes. Currently only implemented on Windows." OFF) +# option(LLVM_ENABLE_CRASH_DUMPS "Turn on memory dumps on crashes. Currently only implemented on Windows." OFF) -option(LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF) -set(FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so") -set(FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h") +# option(LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF) +# set(FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so") +# set(FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h") set(LLVM_TARGET_ARCH "host" CACHE STRING "Set target to use for LLVM JIT or use \"host\" for automatic detection.") -option(LLVM_ENABLE_TERMINFO "Use terminfo database if available." OFF) +# option(LLVM_ENABLE_TERMINFO "Use terminfo database if available." OFF) -set(LLVM_ENABLE_LIBXML2 "OFF" CACHE STRING "Use libxml2 if available. Can be ON, OFF, or FORCE_ON") +# set(LLVM_ENABLE_LIBXML2 "OFF" CACHE STRING "Use libxml2 if available. Can be ON, OFF, or FORCE_ON") -option(LLVM_ENABLE_LIBEDIT "Use libedit if available." OFF) +# option(LLVM_ENABLE_LIBEDIT "Use libedit if available." OFF) -option(LLVM_ENABLE_LIBPFM "Use libpfm for performance counters if available." OFF) +# option(LLVM_ENABLE_LIBPFM "Use libpfm for performance counters if available." OFF) # On z/OS, threads cannot be used because TLS is not supported. -if (CMAKE_SYSTEM_NAME MATCHES "OS390") - option(LLVM_ENABLE_THREADS "Use threads if available." OFF) -else() +# if (CMAKE_SYSTEM_NAME MATCHES "OS390") +# option(LLVM_ENABLE_THREADS "Use threads if available." OFF) +# else() option(LLVM_ENABLE_THREADS "Use threads if available." ON) -endif() +# endif() -set(LLVM_ENABLE_ZLIB "OFF" CACHE STRING "Use zlib for compression/decompression if available. Can be ON, OFF, or FORCE_ON") +# set(LLVM_ENABLE_ZLIB "OFF" CACHE STRING "Use zlib for compression/decompression if available. Can be ON, OFF, or FORCE_ON") set(LLVM_Z3_INSTALL_DIR "" CACHE STRING "Install directory of the Z3 solver.") -option(LLVM_ENABLE_Z3_SOLVER - "Enable Support for the Z3 constraint solver in LLVM." - OFF -) +# option(LLVM_ENABLE_Z3_SOLVER +# "Enable Support for the Z3 constraint solver in LLVM." +# OFF +# ) -if (LLVM_ENABLE_Z3_SOLVER) - find_package(Z3 4.7.1) - - if (LLVM_Z3_INSTALL_DIR) - if (NOT Z3_FOUND) - message(FATAL_ERROR "Z3 >= 4.7.1 has not been found in LLVM_Z3_INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.") - endif() - endif() - - if (NOT Z3_FOUND) - message(FATAL_ERROR "LLVM_ENABLE_Z3_SOLVER cannot be enabled when Z3 is not available.") - endif() - - set(LLVM_WITH_Z3 1) -endif() +# if (LLVM_ENABLE_Z3_SOLVER) +# find_package(Z3 4.7.1) +# +# if (LLVM_Z3_INSTALL_DIR) +# if (NOT Z3_FOUND) +# message(FATAL_ERROR "Z3 >= 4.7.1 has not been found in LLVM_Z3_INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.") +# endif() +# endif() +# +# if (NOT Z3_FOUND) +# message(FATAL_ERROR "LLVM_ENABLE_Z3_SOLVER cannot be enabled when Z3 is not available.") +# endif() +# +# set(LLVM_WITH_Z3 1) +# endif() set(LLVM_ENABLE_Z3_SOLVER_DEFAULT "${Z3_FOUND}") @@ -406,21 +402,21 @@ set(LLVM_TARGETS_TO_BUILD ${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}) list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD) -option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON) -option(LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF) -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." ON) -else() - option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." OFF) -endif() +# option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON) # ROB: Forced to OFF by external CMakeLists +# option(LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF) +# if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +# option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." ON) +# else() + # option(LLVM_ENABLE_MODULE_DEBUGGING "Compile with -gmodules." OFF) +# endif() option(LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY "Compile with -fmodules-local-submodule-visibility." ON) -option(LLVM_ENABLE_LIBCXX "Use libc++ if available." OFF) -option(LLVM_STATIC_LINK_CXX_STDLIB "Statically link the standard library." OFF) -option(LLVM_ENABLE_LLD "Use lld as C and C++ linker." OFF) -option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) -option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) +# option(LLVM_ENABLE_LIBCXX "Use libc++ if available." OFF) +# option(LLVM_STATIC_LINK_CXX_STDLIB "Statically link the standard library." OFF) +# option(LLVM_ENABLE_LLD "Use lld as C and C++ linker." OFF) +# option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." OFF) # ROB: was ON (don't care about warnings) +# option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) -option(LLVM_ENABLE_DUMP "Enable dump functions even when assertions are disabled" OFF) +# option(LLVM_ENABLE_DUMP "Enable dump functions even when assertions are disabled" OFF) if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF) @@ -428,7 +424,7 @@ else() option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON) endif() -option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF) +# option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF) # While adding scalable vector support to LLVM, we temporarily want to # allow an implicit conversion of TypeSize to uint64_t, and to allow @@ -439,154 +435,156 @@ option(LLVM_ENABLE_EXPENSIVE_CHECKS "Enable expensive checks" OFF) # Enabling this flag makes it easier to find cases where the compiler makes # assumptions on the size being 'fixed size', when building tests for # SVE/SVE2 or other scalable vector architectures. -option(LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS - "Enable assertions that type is not scalable in implicit conversion from TypeSize to uint64_t and calls to getNumElements" OFF) +# option(LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS +# "Enable assertions that type is not scalable in implicit conversion from TypeSize to uint64_t and calls to getNumElements" OFF) set(LLVM_ABI_BREAKING_CHECKS "WITH_ASSERTS" CACHE STRING "Enable abi-breaking checks. Can be WITH_ASSERTS, FORCE_ON or FORCE_OFF.") -option(LLVM_FORCE_USE_OLD_TOOLCHAIN - "Set to ON to force using an old, unsupported host toolchain." OFF) +# option(LLVM_FORCE_USE_OLD_TOOLCHAIN +# "Set to ON to force using an old, unsupported host toolchain." OFF) set(LLVM_LOCAL_RPATH "" CACHE FILEPATH "If set, an absolute path added as rpath on binaries that do not already contain an executable-relative rpath.") -option(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN - "Set to ON to only warn when using a toolchain which is about to be deprecated, instead of emitting an error." OFF) +# option(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN +# "Set to ON to only warn when using a toolchain which is about to be deprecated, instead of emitting an error." OFF) -option(LLVM_USE_INTEL_JITEVENTS - "Use Intel JIT API to inform Intel(R) VTune(TM) Amplifier XE 2011 about JIT code" - OFF) - -if( LLVM_USE_INTEL_JITEVENTS ) - # Verify we are on a supported platform - if( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) - message(FATAL_ERROR - "Intel JIT API support is available on Linux and Windows only.") - endif() -endif( LLVM_USE_INTEL_JITEVENTS ) +# option(LLVM_USE_INTEL_JITEVENTS +# "Use Intel JIT API to inform Intel(R) VTune(TM) Amplifier XE 2011 about JIT code" +# OFF) +# +# if( LLVM_USE_INTEL_JITEVENTS ) +# # Verify we are on a supported platform +# if( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) +# message(FATAL_ERROR +# "Intel JIT API support is available on Linux and Windows only.") +# endif() +# endif( LLVM_USE_INTEL_JITEVENTS ) -option(LLVM_USE_OPROFILE - "Use opagent JIT interface to inform OProfile about JIT code" OFF) +# option(LLVM_USE_OPROFILE +# "Use opagent JIT interface to inform OProfile about JIT code" OFF) -option(LLVM_EXTERNALIZE_DEBUGINFO - "Generate dSYM files and strip executables and libraries (Darwin Only)" OFF) +# option(LLVM_EXTERNALIZE_DEBUGINFO +# "Generate dSYM files and strip executables and libraries (Darwin Only)" OFF) -set(LLVM_CODESIGNING_IDENTITY "" CACHE STRING - "Sign executables and dylibs with the given identity or skip if empty (Darwin Only)") +# set(LLVM_CODESIGNING_IDENTITY "" CACHE STRING +# "Sign executables and dylibs with the given identity or skip if empty (Darwin Only)") # If enabled, verify we are on a platform that supports oprofile. -if( LLVM_USE_OPROFILE ) - if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) - message(FATAL_ERROR "OProfile support is available on Linux only.") - endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) -endif( LLVM_USE_OPROFILE ) +# if( LLVM_USE_OPROFILE ) +# if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) +# message(FATAL_ERROR "OProfile support is available on Linux only.") +# endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) +# endif( LLVM_USE_OPROFILE ) -option(LLVM_USE_PERF - "Use perf JIT interface to inform perf about JIT code" OFF) +# option(LLVM_USE_PERF +# "Use perf JIT interface to inform perf about JIT code" OFF) # If enabled, verify we are on a platform that supports perf. -if( LLVM_USE_PERF ) - if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) - message(FATAL_ERROR "perf support is available on Linux only.") - endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) -endif( LLVM_USE_PERF ) - -set(LLVM_USE_SANITIZER "" CACHE STRING - "Define the sanitizer used to build binaries and tests.") -option(LLVM_OPTIMIZE_SANITIZED_BUILDS "Pass -O1 on debug sanitizer builds" ON) -set(LLVM_UBSAN_FLAGS - "-fsanitize=undefined -fno-sanitize=vptr,function -fno-sanitize-recover=all" - CACHE STRING - "Compile flags set to enable UBSan. Only used if LLVM_USE_SANITIZER contains 'Undefined'.") -set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH - "Path to fuzzing library for linking with fuzz targets") - -option(LLVM_USE_SPLIT_DWARF - "Use -gsplit-dwarf when compiling llvm." OFF) +# if( LLVM_USE_PERF ) +# if( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) +# message(FATAL_ERROR "perf support is available on Linux only.") +# endif( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" ) +# endif( LLVM_USE_PERF ) + +# set(LLVM_USE_SANITIZER "" CACHE STRING +# "Define the sanitizer used to build binaries and tests.") +# option(LLVM_OPTIMIZE_SANITIZED_BUILDS "Pass -O1 on debug sanitizer builds" ON) # ROB: we have our own sanitize infrastructure +# set(LLVM_UBSAN_FLAGS +# "-fsanitize=undefined -fno-sanitize=vptr,function -fno-sanitize-recover=all" +# CACHE STRING +# "Compile flags set to enable UBSan. Only used if LLVM_USE_SANITIZER contains 'Undefined'.") +# ROB: don't fuzzing +# set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH +# "Path to fuzzing library for linking with fuzz targets") + +# option(LLVM_USE_SPLIT_DWARF +# "Use -gsplit-dwarf when compiling llvm." OFF) # Define an option controlling whether we should build for 32-bit on 64-bit # platforms, where supported. -if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT (WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX")) - # TODO: support other platforms and toolchains. - option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF) -endif() +# if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT (WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX")) +# # TODO: support other platforms and toolchains. +# # option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF) +# endif() # Define the default arguments to use with 'lit', and an option for the user to # override. -set(LIT_ARGS_DEFAULT "-sv") -if (MSVC_IDE OR XCODE) - set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar") -endif() -set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit") +# set(LIT_ARGS_DEFAULT "-sv") +# # if (MSVC_IDE OR XCODE) +# # set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar") +# # endif() +# set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit") # On Win32 hosts, provide an option to specify the path to the GnuWin32 tools. -if( WIN32 AND NOT CYGWIN ) - set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools") -endif() - -set(LLVM_INTEGRATED_CRT_ALLOC "" CACHE PATH "Replace the Windows CRT allocator with any of {rpmalloc|mimalloc|snmalloc}. Only works with /MT enabled.") -if(LLVM_INTEGRATED_CRT_ALLOC) - if(NOT WIN32) - message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC is only supported on Windows.") - endif() - if(LLVM_USE_SANITIZER) - message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC cannot be used along with LLVM_USE_SANITIZER!") - endif() - if(CMAKE_BUILD_TYPE AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") - message(FATAL_ERROR "The Debug target isn't supported along with LLVM_INTEGRATED_CRT_ALLOC!") - endif() -endif() +# if( WIN32 AND NOT CYGWIN ) +# set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools") +# endif() + +# set(LLVM_INTEGRATED_CRT_ALLOC "" CACHE PATH "Replace the Windows CRT allocator with any of {rpmalloc|mimalloc|snmalloc}. Only works with /MT enabled.") +# if(LLVM_INTEGRATED_CRT_ALLOC) +# if(NOT WIN32) +# message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC is only supported on Windows.") +# endif() +# # LLVM_USE_SANITIZER is OFF +# # if(LLVM_USE_SANITIZER) +# # message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC cannot be used along with LLVM_USE_SANITIZER!") +# # endif() +# if(CMAKE_BUILD_TYPE AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") +# message(FATAL_ERROR "The Debug target isn't supported along with LLVM_INTEGRATED_CRT_ALLOC!") +# endif() +# endif() # Define options to control the inclusion and default build behavior for # components which may not strictly be necessary (tools, examples, and tests). # # This is primarily to support building smaller or faster project files. -option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." OFF) -option(LLVM_BUILD_TOOLS - "Build the LLVM tools. If OFF, just generate build targets." OFF) - -option(LLVM_INCLUDE_UTILS "Generate build targets for the LLVM utils." OFF) -option(LLVM_BUILD_UTILS - "Build LLVM utility binaries. If OFF, just generate build targets." OFF) - -option(LLVM_INCLUDE_RUNTIMES "Generate build targets for the LLVM runtimes." OFF) -option(LLVM_BUILD_RUNTIMES - "Build the LLVM runtimes. If OFF, just generate build targets." OFF) - -option(LLVM_BUILD_RUNTIME - "Build the LLVM runtime libraries." OFF) -option(LLVM_BUILD_EXAMPLES - "Build the LLVM example programs. If OFF, just generate build targets." OFF) -option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" OFF) - -if(LLVM_BUILD_EXAMPLES) - add_definitions(-DBUILD_EXAMPLES) -endif(LLVM_BUILD_EXAMPLES) - -option(LLVM_BUILD_TESTS - "Build LLVM unit tests. If OFF, just generate build targets." OFF) -option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." OFF) -option(LLVM_INCLUDE_GO_TESTS "Include the Go bindings tests in test build targets." OFF) - -option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default -targets. If OFF, benchmarks still could be built using Benchmarks target." OFF) -option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF) - -option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF) -option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." OFF) -option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API documentation." OFF) -option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF) -option (LLVM_ENABLE_OCAMLDOC "Build OCaml bindings documentation." OFF) -option (LLVM_ENABLE_BINDINGS "Build bindings." OFF) - -set(LLVM_INSTALL_DOXYGEN_HTML_DIR "share/doc/llvm/doxygen-html" - CACHE STRING "Doxygen-generated HTML documentation install directory") -set(LLVM_INSTALL_OCAMLDOC_HTML_DIR "share/doc/llvm/ocaml-html" - CACHE STRING "OCamldoc-generated HTML documentation install directory") - -option (LLVM_BUILD_EXTERNAL_COMPILER_RT - "Build compiler-rt as an external project." OFF) +# option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." OFF) +# option(LLVM_BUILD_TOOLS +# "Build the LLVM tools. If OFF, just generate build targets." OFF) + +# option(LLVM_INCLUDE_UTILS "Generate build targets for the LLVM utils." OFF) +# option(LLVM_BUILD_UTILS +# "Build LLVM utility binaries. If OFF, just generate build targets." OFF) + +# option(LLVM_INCLUDE_RUNTIMES "Generate build targets for the LLVM runtimes." OFF) +# option(LLVM_BUILD_RUNTIMES +# "Build the LLVM runtimes. If OFF, just generate build targets." OFF) + +# option(LLVM_BUILD_RUNTIME +# "Build the LLVM runtime libraries." OFF) +# option(LLVM_BUILD_EXAMPLES +# "Build the LLVM example programs. If OFF, just generate build targets." OFF) +# option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" OFF) + +# if(LLVM_BUILD_EXAMPLES) +# add_definitions(-DBUILD_EXAMPLES) +# endif(LLVM_BUILD_EXAMPLES) + +# option(LLVM_BUILD_TESTS +# "Build LLVM unit tests. If OFF, just generate build targets." OFF) +# option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." OFF) +# option(LLVM_INCLUDE_GO_TESTS "Include the Go bindings tests in test build targets." OFF) + +# option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default +# targets. If OFF, benchmarks still could be built using Benchmarks target." OFF) +# option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF) + +# option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF) +# option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." OFF) +# option (LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API documentation." OFF) +# option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF) +# option (LLVM_ENABLE_OCAMLDOC "Build OCaml bindings documentation." OFF) +# option (LLVM_ENABLE_BINDINGS "Build bindings." OFF) + +# set(LLVM_INSTALL_DOXYGEN_HTML_DIR "share/doc/llvm/doxygen-html" +# CACHE STRING "Doxygen-generated HTML documentation install directory") +# set(LLVM_INSTALL_OCAMLDOC_HTML_DIR "share/doc/llvm/ocaml-html" +# CACHE STRING "OCamldoc-generated HTML documentation install directory") + +# option (LLVM_BUILD_EXTERNAL_COMPILER_RT +# "Build compiler-rt as an external project." OFF) option (LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO "Show target and host info when tools are invoked with --version." ON) @@ -599,57 +597,60 @@ if(NOT DEFINED LLVM_DYLIB_COMPONENTS) "Semicolon-separated list of components to include in libLLVM, or \"all\".") endif() -if(MSVC) - option(LLVM_BUILD_LLVM_C_DYLIB "Build LLVM-C.dll (Windows only)" ON) - # Set this variable to OFF here so it can't be set with a command-line - # argument. - set (LLVM_LINK_LLVM_DYLIB OFF) - if (BUILD_SHARED_LIBS) - message(FATAL_ERROR "BUILD_SHARED_LIBS options is not supported on Windows.") - endif() -else() - option(LLVM_LINK_LLVM_DYLIB "Link tools against the libllvm dynamic library" OFF) - option(LLVM_BUILD_LLVM_C_DYLIB "Build libllvm-c re-export library (Darwin only)" OFF) - set(LLVM_BUILD_LLVM_DYLIB_default OFF) - if(LLVM_LINK_LLVM_DYLIB OR LLVM_BUILD_LLVM_C_DYLIB) - set(LLVM_BUILD_LLVM_DYLIB_default ON) - endif() - option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" ${LLVM_BUILD_LLVM_DYLIB_default}) -endif() - -if (LLVM_LINK_LLVM_DYLIB AND BUILD_SHARED_LIBS) - message(FATAL_ERROR "Cannot enable BUILD_SHARED_LIBS with LLVM_LINK_LLVM_DYLIB. We recommend disabling BUILD_SHARED_LIBS.") -endif() - -option(LLVM_OPTIMIZED_TABLEGEN "Force TableGen to be built with optimization" OFF) +# if(MSVC) +# option(LLVM_BUILD_LLVM_C_DYLIB "Build LLVM-C.dll (Windows only)" ON) +# # Set this variable to OFF here so it can't be set with a command-line +# # argument. +# set (LLVM_LINK_LLVM_DYLIB OFF) +# if (BUILD_SHARED_LIBS) +# message(FATAL_ERROR "BUILD_SHARED_LIBS options is not supported on Windows.") +# endif() +# else() + # option(LLVM_LINK_LLVM_DYLIB "Link tools against the libllvm dynamic library" OFF) + # option(LLVM_BUILD_LLVM_C_DYLIB "Build libllvm-c re-export library (Darwin only)" OFF) + # set(LLVM_BUILD_LLVM_DYLIB_default OFF) + # ROB: both are OFF + # if(LLVM_LINK_LLVM_DYLIB OR LLVM_BUILD_LLVM_C_DYLIB) + # set(LLVM_BUILD_LLVM_DYLIB_default ON) + # endif() + # option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" ${LLVM_BUILD_LLVM_DYLIB_default}) +# endif() + +# ROB: LLVM_LINK_LLVM_DYLIB is OFF +# if (LLVM_LINK_LLVM_DYLIB AND BUILD_SHARED_LIBS) +# message(FATAL_ERROR "Cannot enable BUILD_SHARED_LIBS with LLVM_LINK_LLVM_DYLIB. We recommend disabling BUILD_SHARED_LIBS.") +# endif() + +# option(LLVM_OPTIMIZED_TABLEGEN "Force TableGen to be built with optimization" OFF) if(CMAKE_CROSSCOMPILING OR (LLVM_OPTIMIZED_TABLEGEN AND (LLVM_ENABLE_ASSERTIONS OR CMAKE_CONFIGURATION_TYPES))) set(LLVM_USE_HOST_TOOLS ON) endif() -if (MSVC_IDE) - option(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION "Configure project to use Visual Studio native visualizers" TRUE) -endif() - -if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE OR - LLVM_ENABLE_IR_PGO) - if(NOT LLVM_PROFILE_MERGE_POOL_SIZE) - # A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine - # for spining disks. Anything higher may only help on slower mediums. - set(LLVM_PROFILE_MERGE_POOL_SIZE "4") - endif() - if(NOT LLVM_PROFILE_FILE_PATTERN) - if(NOT LLVM_PROFILE_DATA_DIR) - file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR) - endif() - file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN) - endif() - if(NOT LLVM_CSPROFILE_FILE_PATTERN) - if(NOT LLVM_CSPROFILE_DATA_DIR) - file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/csprofiles" LLVM_CSPROFILE_DATA_DIR) - endif() - file(TO_NATIVE_PATH "${LLVM_CSPROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_CSPROFILE_FILE_PATTERN) - endif() -endif() +# if (MSVC_IDE) +# option(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION "Configure project to use Visual Studio native visualizers" TRUE) +# endif() + +# ROB: nah, neither of these +# if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE OR +# LLVM_ENABLE_IR_PGO) +# if(NOT LLVM_PROFILE_MERGE_POOL_SIZE) +# # A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine +# # for spining disks. Anything higher may only help on slower mediums. +# set(LLVM_PROFILE_MERGE_POOL_SIZE "4") +# endif() +# if(NOT LLVM_PROFILE_FILE_PATTERN) +# if(NOT LLVM_PROFILE_DATA_DIR) +# file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR) +# endif() +# file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN) +# endif() +# if(NOT LLVM_CSPROFILE_FILE_PATTERN) +# if(NOT LLVM_CSPROFILE_DATA_DIR) +# file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/csprofiles" LLVM_CSPROFILE_DATA_DIR) +# endif() +# file(TO_NATIVE_PATH "${LLVM_CSPROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_CSPROFILE_FILE_PATTERN) +# endif() +# endif() if (LLVM_BUILD_STATIC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") @@ -663,9 +664,9 @@ if (LLVM_BUILD_STATIC) endif() # Use libtool instead of ar if you are both on an Apple host, and targeting Apple. -if(CMAKE_HOST_APPLE AND APPLE) - include(UseLibtool) -endif() +# if(CMAKE_HOST_APPLE AND APPLE) +# include(UseLibtool) +# endif() # Override the default target with an environment variable named by LLVM_TARGET_TRIPLE_ENV. set(LLVM_TARGET_TRIPLE_ENV CACHE STRING "The name of environment variable to override default target. Disabled by blank.") @@ -674,8 +675,8 @@ mark_as_advanced(LLVM_TARGET_TRIPLE_ENV) set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL "Enable per-target runtimes directory") -set(LLVM_PROFDATA_FILE "" CACHE FILEPATH - "Profiling data file to use when compiling in order to improve runtime performance.") +# set(LLVM_PROFDATA_FILE "" CACHE FILEPATH +# "Profiling data file to use when compiling in order to improve runtime performance.") # All options referred to from HandleLLVMOptions have to be specified # BEFORE this include, otherwise options will not be correctly set on @@ -694,19 +695,19 @@ set(TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}") message(STATUS "LLVM host triple: ${LLVM_HOST_TRIPLE}") message(STATUS "LLVM default target triple: ${LLVM_DEFAULT_TARGET_TRIPLE}") -if(WIN32 OR CYGWIN) - if(BUILD_SHARED_LIBS OR LLVM_BUILD_LLVM_DYLIB) - set(LLVM_ENABLE_PLUGINS_default ON) - else() - set(LLVM_ENABLE_PLUGINS_default OFF) - endif() -else() - set(LLVM_ENABLE_PLUGINS_default ${LLVM_ENABLE_PIC}) -endif() -option(LLVM_ENABLE_PLUGINS "Enable plugin support" ${LLVM_ENABLE_PLUGINS_default}) +# if(WIN32 OR CYGWIN) +# if(BUILD_SHARED_LIBS ) # OR LLVM_BUILD_LLVM_DYLIB) # ROB: LLVM_BUILD_LLVM_DYLIB is OFF +# set(LLVM_ENABLE_PLUGINS_default ON) +# else() +# set(LLVM_ENABLE_PLUGINS_default OFF) +# endif() +# else() + # set(LLVM_ENABLE_PLUGINS_default ${LLVM_ENABLE_PIC}) +# endif() +# option(LLVM_ENABLE_PLUGINS "Enable plugin support" ${LLVM_ENABLE_PLUGINS_default}) # ROB: OFF because PIC is OFF -set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER FALSE CACHE BOOL - "Enable the experimental new pass manager by default.") +# set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER FALSE CACHE BOOL +# "Enable the experimental new pass manager by default.") include(HandleLLVMOptions) @@ -782,12 +783,12 @@ set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} # We will expose the conditional compilation variable, # LLVM_HAVE_TF_API, through llvm-config.h, so that a user of the LLVM library may # also leverage the dependency. -set(TENSORFLOW_C_LIB_PATH "" CACHE PATH "Path to TensorFlow C library install") -if (TENSORFLOW_C_LIB_PATH) - find_library(tensorflow_c_api tensorflow PATHS ${TENSORFLOW_C_LIB_PATH}/lib NO_DEFAULT_PATH REQUIRED) - set(LLVM_HAVE_TF_API "ON" CACHE BOOL "Full Tensorflow API available") - include_directories(${TENSORFLOW_C_LIB_PATH}/include) -endif() +# set(TENSORFLOW_C_LIB_PATH "" CACHE PATH "Path to TensorFlow C library install") +# if (TENSORFLOW_C_LIB_PATH) +# find_library(tensorflow_c_api tensorflow PATHS ${TENSORFLOW_C_LIB_PATH}/lib NO_DEFAULT_PATH REQUIRED) +# set(LLVM_HAVE_TF_API "ON" CACHE BOOL "Full Tensorflow API available") +# include_directories(${TENSORFLOW_C_LIB_PATH}/include) +# endif() # For up-to-date instructions for installing the Tensorflow dependency, refer to # the bot setup script: https://github.com/google/ml-compiler-opt/blob/master/buildbot/buildbot_init.sh @@ -795,21 +796,21 @@ endif() # python3 -m pip install --upgrade pip && python3 -m pip install --user tf_nightly==2.3.0.dev20200528 # Then set TENSORFLOW_AOT_PATH to the package install - usually it's ~/.local/lib/python3.7/site-packages/tensorflow # -set(TENSORFLOW_AOT_PATH "" CACHE PATH "Path to TensorFlow pip install dir") - -if (NOT TENSORFLOW_AOT_PATH STREQUAL "") - set(LLVM_HAVE_TF_AOT "ON" CACHE BOOL "Tensorflow AOT available") - set(TENSORFLOW_AOT_COMPILER - "${TENSORFLOW_AOT_PATH}/../../../../bin/saved_model_cli" - CACHE PATH "Path to the Tensorflow AOT compiler") - include_directories(${TENSORFLOW_AOT_PATH}/include) - add_subdirectory(${TENSORFLOW_AOT_PATH}/xla_aot_runtime_src - ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/tf_runtime) -endif() +# set(TENSORFLOW_AOT_PATH "" CACHE PATH "Path to TensorFlow pip install dir") +# +# if (NOT TENSORFLOW_AOT_PATH STREQUAL "") +# set(LLVM_HAVE_TF_AOT "ON" CACHE BOOL "Tensorflow AOT available") +# set(TENSORFLOW_AOT_COMPILER +# "${TENSORFLOW_AOT_PATH}/../../../../bin/saved_model_cli" +# CACHE PATH "Path to the Tensorflow AOT compiler") +# include_directories(${TENSORFLOW_AOT_PATH}/include) +# add_subdirectory(${TENSORFLOW_AOT_PATH}/xla_aot_runtime_src +# ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/tf_runtime) +# endif() # Keep the legacy CMake flag ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER for # compatibility. -set(LLVM_ENABLE_NEW_PASS_MANAGER ${ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER}) +# set(LLVM_ENABLE_NEW_PASS_MANAGER ${ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER}) # Configure the three LLVM configuration header files. configure_file( @@ -841,63 +842,63 @@ add_custom_target(srpm COMMAND rpmbuild -bs --define '_topdir ${LLVM_SRPM_DIR}' ${LLVM_SRPM_BINARY_SPECFILE}) set_target_properties(srpm PROPERTIES FOLDER "Misc") -if(APPLE AND DARWIN_LTO_LIBRARY) - set(CMAKE_EXE_LINKER_FLAGS - "${CMAKE_EXE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") - set(CMAKE_SHARED_LINKER_FLAGS - "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") - set(CMAKE_MODULE_LINKER_FLAGS - "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") -endif() +# if(APPLE AND DARWIN_LTO_LIBRARY) +# set(CMAKE_EXE_LINKER_FLAGS +# "${CMAKE_EXE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") +# set(CMAKE_SHARED_LINKER_FLAGS +# "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") +# set(CMAKE_MODULE_LINKER_FLAGS +# "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-lto_library -Wl,${DARWIN_LTO_LIBRARY}") +# endif() # Build with _XOPEN_SOURCE on AIX, as stray macros in _ALL_SOURCE mode tend to # break things. In this case we need to enable the large-file API as well. -if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX") - add_definitions("-D_XOPEN_SOURCE=700") - add_definitions("-D_LARGE_FILE_API") - - # CMake versions less than 3.16 set default linker flags to include -brtl, as - # well as setting -G when building libraries, so clear them out. Note we only - # try to clear the form that CMake will set as part of its initial - # configuration, it is still possible the user may force it as part of a - # compound option. - if(CMAKE_VERSION VERSION_LESS 3.16) - string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}") - string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS - "${CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS}") - endif() - - # Modules should be built with -shared -Wl,-G, so we can use runtime linking - # with plugins. - string(APPEND CMAKE_MODULE_LINKER_FLAGS " -shared -Wl,-G") - - # Also set the correct flags for building shared libraries. - string(APPEND CMAKE_SHARED_LINKER_FLAGS " -shared") -endif() +# if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX") +# add_definitions("-D_XOPEN_SOURCE=700") +# add_definitions("-D_LARGE_FILE_API") +# +# # CMake versions less than 3.16 set default linker flags to include -brtl, as +# # well as setting -G when building libraries, so clear them out. Note we only +# # try to clear the form that CMake will set as part of its initial +# # configuration, it is still possible the user may force it as part of a +# # compound option. +# if(CMAKE_VERSION VERSION_LESS 3.16) +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-brtl([ \t]+|$)" " " CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)(-Wl,)?-G([ \t]+|$)" " " CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}") +# string(REGEX REPLACE "(^|[ \t]+)-Wl,-G," " -Wl," CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS +# "${CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS}") +# endif() +# +# # Modules should be built with -shared -Wl,-G, so we can use runtime linking +# # with plugins. +# string(APPEND CMAKE_MODULE_LINKER_FLAGS " -shared -Wl,-G") +# +# # Also set the correct flags for building shared libraries. +# string(APPEND CMAKE_SHARED_LINKER_FLAGS " -shared") +# endif() # Build with _XOPEN_SOURCE on z/OS. -if (CMAKE_SYSTEM_NAME MATCHES "OS390") - add_definitions("-D_XOPEN_SOURCE=600") - add_definitions("-D_OPEN_SYS") # Needed for process information. - add_definitions("-D_OPEN_SYS_FILE_EXT") # Needed for EBCDIC I/O. -endif() +# if (CMAKE_SYSTEM_NAME MATCHES "OS390") +# add_definitions("-D_XOPEN_SOURCE=600") +# add_definitions("-D_OPEN_SYS") # Needed for process information. +# add_definitions("-D_OPEN_SYS_FILE_EXT") # Needed for EBCDIC I/O. +# endif() # Build with _FILE_OFFSET_BITS=64 on Solaris to match g++ >= 9. -if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") - add_definitions("-D_FILE_OFFSET_BITS=64") -endif() +# if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "SunOS") +# add_definitions("-D_FILE_OFFSET_BITS=64") +# endif() set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -913,10 +914,10 @@ if(LLVM_TARGET_IS_CROSSCOMPILE_HOST) # (this is a variable that CrossCompile sets on recursive invocations) endif() -if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) - # special hack for Solaris to handle crazy system sys/regset.h - include_directories("${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/Solaris") -endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) +# if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) +# # special hack for Solaris to handle crazy system sys/regset.h +# include_directories("${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/Solaris") +# endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) # Make sure we don't get -rdynamic in every binary. For those that need it, # use export_executable_symbols(target). @@ -925,11 +926,11 @@ set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") include(AddLLVM) include(TableGen) -if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) - # People report that -O3 is unreliable on MinGW. The traditional - # build also uses -O2 for that reason: - llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") -endif() +# if( MINGW AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) +# # People report that -O3 is unreliable on MinGW. The traditional +# # build also uses -O2 for that reason: +# llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") +# endif() # Put this before tblgen. Else we have a circular dependence. add_subdirectory(lib/Demangle) @@ -942,103 +943,110 @@ add_subdirectory(include/llvm) add_subdirectory(lib) -if( LLVM_INCLUDE_UTILS ) - add_subdirectory(utils/FileCheck) - add_subdirectory(utils/PerfectShuffle) - add_subdirectory(utils/count) - add_subdirectory(utils/not) - add_subdirectory(utils/yaml-bench) -else() - if ( LLVM_INCLUDE_TESTS ) - message(FATAL_ERROR "Including tests when not building utils will not work. - Either set LLVM_INCLUDE_UTILS to On, or set LLVM_INCLUDE_TESTS to Off.") - endif() -endif() +# ROB: LLVM_INCLUDE_UTILS is OFF +# if( LLVM_INCLUDE_UTILS ) +# add_subdirectory(utils/FileCheck) +# add_subdirectory(utils/PerfectShuffle) +# add_subdirectory(utils/count) +# add_subdirectory(utils/not) +# add_subdirectory(utils/yaml-bench) +# else() +# ROB: LLVM_INCLUDE_TESTS is OFF + # if ( LLVM_INCLUDE_TESTS ) + # message(FATAL_ERROR "Including tests when not building utils will not work. + # Either set LLVM_INCLUDE_UTILS to On, or set LLVM_INCLUDE_TESTS to Off.") + # endif() +# endif() # Use LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION instead of LLVM_INCLUDE_UTILS because it is not really a util -if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION) - add_subdirectory(utils/LLVMVisualizers) -endif() +# ROB: LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION is OFF +# if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION) +# add_subdirectory(utils/LLVMVisualizers) +# endif() -foreach( binding ${LLVM_BINDINGS_LIST} ) - if( EXISTS "${LLVM_MAIN_SRC_DIR}/bindings/${binding}/CMakeLists.txt" ) - add_subdirectory(bindings/${binding}) - endif() -endforeach() +# foreach( binding ${LLVM_BINDINGS_LIST} ) +# if( EXISTS "${LLVM_MAIN_SRC_DIR}/bindings/${binding}/CMakeLists.txt" ) +# add_subdirectory(bindings/${binding}) +# endif() +# endforeach() # add_subdirectory(projects) -if( LLVM_INCLUDE_TOOLS ) - add_subdirectory(tools) -endif() - -if( LLVM_INCLUDE_RUNTIMES ) - add_subdirectory(runtimes) -endif() - -if( LLVM_INCLUDE_EXAMPLES ) - add_subdirectory(examples) -endif() - -if( LLVM_INCLUDE_TESTS ) - if(EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite AND TARGET clang) - include(LLVMExternalProjectUtils) - llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite - USE_TOOLCHAIN - EXCLUDE_FROM_ALL - NO_INSTALL - ALWAYS_CLEAN) - endif() - add_subdirectory(utils/lit) - add_subdirectory(test) - add_subdirectory(unittests) - if( LLVM_INCLUDE_UTILS ) - add_subdirectory(utils/unittest) - endif() - - if (WIN32) - # This utility is used to prevent crashing tests from calling Dr. Watson on - # Windows. - add_subdirectory(utils/KillTheDoctor) - endif() - - # Add a global check rule now that all subdirectories have been traversed - # and we know the total set of lit testsuites. - get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) - get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) - get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) - get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) - get_property(LLVM_ADDITIONAL_TEST_TARGETS - GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS) - get_property(LLVM_ADDITIONAL_TEST_DEPENDS - GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS) - add_lit_target(check-all - "Running all regression tests" - ${LLVM_LIT_TESTSUITES} - PARAMS ${LLVM_LIT_PARAMS} - DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS} - ARGS ${LLVM_LIT_EXTRA_ARGS} - ) - if(TARGET check-runtimes) - add_dependencies(check-all check-runtimes) - endif() - add_custom_target(test-depends - DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_DEPENDS}) - set_target_properties(test-depends PROPERTIES FOLDER "Tests") -endif() - -if (LLVM_INCLUDE_DOCS) - add_subdirectory(docs) -endif() +# if( LLVM_INCLUDE_TOOLS ) +# add_subdirectory(tools) +# endif() + +# if( LLVM_INCLUDE_RUNTIMES ) +# add_subdirectory(runtimes) +# endif() + +# if( LLVM_INCLUDE_EXAMPLES ) +# add_subdirectory(examples) +# endif() + +# ROB: LLVM_INCLUDE_TESTS is OFF +# if( LLVM_INCLUDE_TESTS ) +# if(EXISTS ${LLVM_MAIN_SRC_DIR}/projects/test-suite AND TARGET clang) +# include(LLVMExternalProjectUtils) +# llvm_ExternalProject_Add(test-suite ${LLVM_MAIN_SRC_DIR}/projects/test-suite +# USE_TOOLCHAIN +# EXCLUDE_FROM_ALL +# NO_INSTALL +# ALWAYS_CLEAN) +# endif() +# add_subdirectory(utils/lit) +# add_subdirectory(test) +# add_subdirectory(unittests) +# # ROB: LLVM_INCLUDE_UTILS is OFF +# # if( LLVM_INCLUDE_UTILS ) +# # add_subdirectory(utils/unittest) +# # endif() +# +# if (WIN32) +# # This utility is used to prevent crashing tests from calling Dr. Watson on +# # Windows. +# add_subdirectory(utils/KillTheDoctor) +# endif() +# +# # Add a global check rule now that all subdirectories have been traversed +# # and we know the total set of lit testsuites. +# get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) +# get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) +# get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) +# get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) +# get_property(LLVM_ADDITIONAL_TEST_TARGETS +# GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS) +# get_property(LLVM_ADDITIONAL_TEST_DEPENDS +# GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS) +# add_lit_target(check-all +# "Running all regression tests" +# ${LLVM_LIT_TESTSUITES} +# PARAMS ${LLVM_LIT_PARAMS} +# DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS} +# ARGS ${LLVM_LIT_EXTRA_ARGS} +# ) +# if(TARGET check-runtimes) +# add_dependencies(check-all check-runtimes) +# endif() +# add_custom_target(test-depends +# DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_DEPENDS}) +# set_target_properties(test-depends PROPERTIES FOLDER "Tests") +# endif() + +# if (LLVM_INCLUDE_DOCS) +# add_subdirectory(docs) +# endif() add_subdirectory(cmake/modules) # Do this last so that all lit targets have already been created. -if (LLVM_INCLUDE_UTILS) - add_subdirectory(utils/llvm-lit) -endif() +# ROB: LLVM_INCLUDE_UTILS is OFF +# if (LLVM_INCLUDE_UTILS) +# add_subdirectory(utils/llvm-lit) +# endif() -if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) +# ROB: LLVM_INSTALL_TOOLCHAIN_ONLY is OFF +# if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) install(DIRECTORY include/llvm include/llvm-c DESTINATION include COMPONENT llvm-headers @@ -1063,19 +1071,20 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) PATTERN "config.h" EXCLUDE ) - if (LLVM_INSTALL_MODULEMAPS) - install(DIRECTORY include/llvm include/llvm-c - DESTINATION include - COMPONENT llvm-headers - FILES_MATCHING - PATTERN "module.modulemap" - ) - install(FILES include/llvm/module.install.modulemap - DESTINATION include/llvm - COMPONENT llvm-headers - RENAME "module.extern.modulemap" - ) - endif(LLVM_INSTALL_MODULEMAPS) +# ROB: LLVM_INSTALL_MODULEMAPS is OFF + # if (LLVM_INSTALL_MODULEMAPS) + # install(DIRECTORY include/llvm include/llvm-c + # DESTINATION include + # COMPONENT llvm-headers + # FILES_MATCHING + # PATTERN "module.modulemap" + # ) + # install(FILES include/llvm/module.install.modulemap + # DESTINATION include/llvm + # COMPONENT llvm-headers + # RENAME "module.extern.modulemap" + # ) + # endif(LLVM_INSTALL_MODULEMAPS) # Installing the headers needs to depend on generating any public # tablegen'd headers. @@ -1109,7 +1118,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) endif() endforeach() endif() -endif() +# endif() # This must be at the end of the LLVM root CMakeLists file because it must run # after all targets are created. @@ -1118,25 +1127,26 @@ llvm_distribution_add_targets() process_llvm_pass_plugins(GEN_CONFIG) # This allows us to deploy the Universal CRT DLLs by passing -DCMAKE_INSTALL_UCRT_LIBRARIES=ON to CMake -if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_INSTALL_UCRT_LIBRARIES) - include(InstallRequiredSystemLibraries) -endif() - -if (LLVM_INCLUDE_BENCHMARKS) - # Override benchmark defaults so that when the library itself is updated these - # modifications are not lost. - set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark testing" FORCE) - set(BENCHMARK_ENABLE_EXCEPTIONS OFF CACHE BOOL "Disable benchmark exceptions" FORCE) - set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "Don't install benchmark" FORCE) - set(BENCHMARK_DOWNLOAD_DEPENDENCIES OFF CACHE BOOL "Don't download dependencies" FORCE) - set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "Disable Google Test in benchmark" FORCE) - # Since LLVM requires C++11 it is safe to assume that std::regex is available. - set(HAVE_STD_REGEX ON CACHE BOOL "OK" FORCE) - - add_subdirectory(utils/benchmark) - add_subdirectory(benchmarks) -endif() - -if (LLVM_INCLUDE_UTILS AND LLVM_INCLUDE_TOOLS) - add_subdirectory(utils/llvm-locstats) -endif() +# if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_INSTALL_UCRT_LIBRARIES) +# include(InstallRequiredSystemLibraries) +# endif() + +# if (LLVM_INCLUDE_BENCHMARKS) +# # Override benchmark defaults so that when the library itself is updated these +# # modifications are not lost. +# set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark testing" FORCE) +# set(BENCHMARK_ENABLE_EXCEPTIONS OFF CACHE BOOL "Disable benchmark exceptions" FORCE) +# set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "Don't install benchmark" FORCE) +# set(BENCHMARK_DOWNLOAD_DEPENDENCIES OFF CACHE BOOL "Don't download dependencies" FORCE) +# set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "Disable Google Test in benchmark" FORCE) +# # Since LLVM requires C++11 it is safe to assume that std::regex is available. +# set(HAVE_STD_REGEX ON CACHE BOOL "OK" FORCE) +# +# add_subdirectory(utils/benchmark) +# add_subdirectory(benchmarks) +# endif() + +# ROB: LLVM_INCLUDE_UTILS is OFF +# if (LLVM_INCLUDE_UTILS AND LLVM_INCLUDE_TOOLS) +# add_subdirectory(utils/llvm-locstats) +# endif() diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake index a3d81b74..f65dbadc 100644 --- a/llvm/cmake/config-ix.cmake +++ b/llvm/cmake/config-ix.cmake @@ -1,7 +1,7 @@ -if( WIN32 AND NOT CYGWIN ) - # We consider Cygwin as another Unix - set(PURE_WINDOWS 1) -endif() +# if( WIN32 AND NOT CYGWIN ) +# # We consider Cygwin as another Unix +# set(PURE_WINDOWS 1) +# endif() include(CheckIncludeFile) include(CheckLibraryExists) @@ -116,47 +116,49 @@ if(HAVE_LIBPTHREAD) set(LLVM_PTHREAD_LIB ${CMAKE_THREAD_LIBS_INIT}) endif() -if(LLVM_ENABLE_ZLIB) - if(LLVM_ENABLE_ZLIB STREQUAL FORCE_ON) - find_package(ZLIB REQUIRED) - elseif(NOT LLVM_USE_SANITIZER MATCHES "Memory.*") - find_package(ZLIB) - endif() - if(ZLIB_FOUND) - # Check if zlib we found is usable; for example, we may have found a 32-bit - # library on a 64-bit system which would result in a link-time failure. - cmake_push_check_state() - list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) - list(APPEND CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY}) - check_symbol_exists(compress2 zlib.h HAVE_ZLIB) - cmake_pop_check_state() - if(LLVM_ENABLE_ZLIB STREQUAL FORCE_ON AND NOT HAVE_ZLIB) - message(FATAL_ERROR "Failed to configure zlib") - endif() - endif() - set(LLVM_ENABLE_ZLIB "${HAVE_ZLIB}") -endif() - -if(LLVM_ENABLE_LIBXML2) - if(LLVM_ENABLE_LIBXML2 STREQUAL FORCE_ON) - find_package(LibXml2 REQUIRED) - elseif(NOT LLVM_USE_SANITIZER MATCHES "Memory.*") - find_package(LibXml2) - endif() - if(LibXml2_FOUND) - # Check if libxml2 we found is usable; for example, we may have found a 32-bit - # library on a 64-bit system which would result in a link-time failure. - cmake_push_check_state() - list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBXML2_INCLUDE_DIRS}) - list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBXML2_LIBRARIES}) - check_symbol_exists(xmlReadMemory libxml/xmlreader.h HAVE_LIBXML2) - cmake_pop_check_state() - if(LLVM_ENABLE_LIBXML2 STREQUAL FORCE_ON AND NOT HAVE_LIBXML2) - message(FATAL_ERROR "Failed to configure libxml2") - endif() - endif() - set(LLVM_ENABLE_LIBXML2 "${HAVE_LIBXML2}") -endif() +# ROB: LLVM_ENABLE_ZLIB is OFF +# if(LLVM_ENABLE_ZLIB) +# if(LLVM_ENABLE_ZLIB STREQUAL FORCE_ON) +# find_package(ZLIB REQUIRED) +# elseif(NOT LLVM_USE_SANITIZER MATCHES "Memory.*") +# find_package(ZLIB) +# endif() +# if(ZLIB_FOUND) +# # Check if zlib we found is usable; for example, we may have found a 32-bit +# # library on a 64-bit system which would result in a link-time failure. +# cmake_push_check_state() +# list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) +# list(APPEND CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY}) +# check_symbol_exists(compress2 zlib.h HAVE_ZLIB) +# cmake_pop_check_state() +# if(LLVM_ENABLE_ZLIB STREQUAL FORCE_ON AND NOT HAVE_ZLIB) +# message(FATAL_ERROR "Failed to configure zlib") +# endif() +# endif() +# set(LLVM_ENABLE_ZLIB "${HAVE_ZLIB}") +# endif() + +# ROB: LLVM_ENABLE_LIBXML2 is OFF +# if(LLVM_ENABLE_LIBXML2) +# if(LLVM_ENABLE_LIBXML2 STREQUAL FORCE_ON) +# find_package(LibXml2 REQUIRED) +# elseif(NOT LLVM_USE_SANITIZER MATCHES "Memory.*") +# find_package(LibXml2) +# endif() +# if(LibXml2_FOUND) +# # Check if libxml2 we found is usable; for example, we may have found a 32-bit +# # library on a 64-bit system which would result in a link-time failure. +# cmake_push_check_state() +# list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBXML2_INCLUDE_DIRS}) +# list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBXML2_LIBRARIES}) +# check_symbol_exists(xmlReadMemory libxml/xmlreader.h HAVE_LIBXML2) +# cmake_pop_check_state() +# if(LLVM_ENABLE_LIBXML2 STREQUAL FORCE_ON AND NOT HAVE_LIBXML2) +# message(FATAL_ERROR "Failed to configure libxml2") +# endif() +# endif() +# set(LLVM_ENABLE_LIBXML2 "${HAVE_LIBXML2}") +# endif() # Don't look for these libraries if we're using MSan, since uninstrumented third # party code may call MSan interceptors like strlen, leading to false positives. @@ -164,24 +166,28 @@ if(NOT LLVM_USE_SANITIZER MATCHES "Memory.*") # Don't look for these libraries on Windows. if (NOT PURE_WINDOWS) # Skip libedit if using ASan as it contains memory leaks. - if (LLVM_ENABLE_LIBEDIT AND HAVE_HISTEDIT_H AND NOT LLVM_USE_SANITIZER MATCHES ".*Address.*") - check_library_exists(edit el_init "" HAVE_LIBEDIT) - else() + # ROB: LLVM_ENABLE_LIBEDIT is OFF + # if (LLVM_ENABLE_LIBEDIT AND HAVE_HISTEDIT_H AND NOT LLVM_USE_SANITIZER MATCHES ".*Address.*") + # check_library_exists(edit el_init "" HAVE_LIBEDIT) + # else() set(HAVE_LIBEDIT 0) - endif() - if(LLVM_ENABLE_TERMINFO STREQUAL FORCE_ON) - set(MAYBE_REQUIRED REQUIRED) - else() + # endif() + # ROB: LLVM_ENABLE_TERMINFO is OFF + # if(LLVM_ENABLE_TERMINFO STREQUAL FORCE_ON) + # set(MAYBE_REQUIRED REQUIRED) + # else() set(MAYBE_REQUIRED) - endif() - if(LLVM_ENABLE_TERMINFO) - find_library(TERMINFO_LIB NAMES terminfo tinfo curses ncurses ncursesw ${MAYBE_REQUIRED}) - endif() - if(TERMINFO_LIB) - set(LLVM_ENABLE_TERMINFO 1) - else() + # endif() + # ROB: LLVM_ENABLE_TERMINFO is OFF + # if(LLVM_ENABLE_TERMINFO) + # find_library(TERMINFO_LIB NAMES terminfo tinfo curses ncurses ncursesw ${MAYBE_REQUIRED}) + # endif() + # ROB: LLVM_ENABLE_TERMINFO is OFF + # if(TERMINFO_LIB) + # set(LLVM_ENABLE_TERMINFO 1) + # else() set(LLVM_ENABLE_TERMINFO 0) - endif() + # endif() else() set(LLVM_ENABLE_TERMINFO 0) endif() @@ -242,30 +248,30 @@ check_symbol_exists(strerror string.h HAVE_STRERROR) check_symbol_exists(strerror_r string.h HAVE_STRERROR_R) check_symbol_exists(strerror_s string.h HAVE_DECL_STRERROR_S) check_symbol_exists(setenv stdlib.h HAVE_SETENV) -if( PURE_WINDOWS ) - check_symbol_exists(_chsize_s io.h HAVE__CHSIZE_S) - - check_function_exists(_alloca HAVE__ALLOCA) - check_function_exists(__alloca HAVE___ALLOCA) - check_function_exists(__chkstk HAVE___CHKSTK) - check_function_exists(__chkstk_ms HAVE___CHKSTK_MS) - check_function_exists(___chkstk HAVE____CHKSTK) - check_function_exists(___chkstk_ms HAVE____CHKSTK_MS) - - check_function_exists(__ashldi3 HAVE___ASHLDI3) - check_function_exists(__ashrdi3 HAVE___ASHRDI3) - check_function_exists(__divdi3 HAVE___DIVDI3) - check_function_exists(__fixdfdi HAVE___FIXDFDI) - check_function_exists(__fixsfdi HAVE___FIXSFDI) - check_function_exists(__floatdidf HAVE___FLOATDIDF) - check_function_exists(__lshrdi3 HAVE___LSHRDI3) - check_function_exists(__moddi3 HAVE___MODDI3) - check_function_exists(__udivdi3 HAVE___UDIVDI3) - check_function_exists(__umoddi3 HAVE___UMODDI3) - - check_function_exists(__main HAVE___MAIN) - check_function_exists(__cmpdi2 HAVE___CMPDI2) -endif() +# if( PURE_WINDOWS ) +# check_symbol_exists(_chsize_s io.h HAVE__CHSIZE_S) +# +# check_function_exists(_alloca HAVE__ALLOCA) +# check_function_exists(__alloca HAVE___ALLOCA) +# check_function_exists(__chkstk HAVE___CHKSTK) +# check_function_exists(__chkstk_ms HAVE___CHKSTK_MS) +# check_function_exists(___chkstk HAVE____CHKSTK) +# check_function_exists(___chkstk_ms HAVE____CHKSTK_MS) +# +# check_function_exists(__ashldi3 HAVE___ASHLDI3) +# check_function_exists(__ashrdi3 HAVE___ASHRDI3) +# check_function_exists(__divdi3 HAVE___DIVDI3) +# check_function_exists(__fixdfdi HAVE___FIXDFDI) +# check_function_exists(__fixsfdi HAVE___FIXSFDI) +# check_function_exists(__floatdidf HAVE___FLOATDIDF) +# check_function_exists(__lshrdi3 HAVE___LSHRDI3) +# check_function_exists(__moddi3 HAVE___MODDI3) +# check_function_exists(__udivdi3 HAVE___UDIVDI3) +# check_function_exists(__umoddi3 HAVE___UMODDI3) +# +# check_function_exists(__main HAVE___MAIN) +# check_function_exists(__cmpdi2 HAVE___CMPDI2) +# endif() if( HAVE_DLFCN_H ) if( HAVE_LIBDL ) list(APPEND CMAKE_REQUIRED_LIBRARIES dl) @@ -300,56 +306,58 @@ if (NOT PURE_WINDOWS) endif() # available programs checks -function(llvm_find_program name) - string(TOUPPER ${name} NAME) - string(REGEX REPLACE "\\." "_" NAME ${NAME}) - - find_program(LLVM_PATH_${NAME} NAMES ${ARGV}) - mark_as_advanced(LLVM_PATH_${NAME}) - if(LLVM_PATH_${NAME}) - set(HAVE_${NAME} 1 CACHE INTERNAL "Is ${name} available ?") - mark_as_advanced(HAVE_${NAME}) - else(LLVM_PATH_${NAME}) - set(HAVE_${NAME} "" CACHE INTERNAL "Is ${name} available ?") - endif(LLVM_PATH_${NAME}) -endfunction() - -if (LLVM_ENABLE_DOXYGEN) - llvm_find_program(dot) -endif () - -if( LLVM_ENABLE_FFI ) - find_path(FFI_INCLUDE_PATH ffi.h PATHS ${FFI_INCLUDE_DIR}) - if( EXISTS "${FFI_INCLUDE_PATH}/ffi.h" ) - set(FFI_HEADER ffi.h CACHE INTERNAL "") - set(HAVE_FFI_H 1 CACHE INTERNAL "") - else() - find_path(FFI_INCLUDE_PATH ffi/ffi.h PATHS ${FFI_INCLUDE_DIR}) - if( EXISTS "${FFI_INCLUDE_PATH}/ffi/ffi.h" ) - set(FFI_HEADER ffi/ffi.h CACHE INTERNAL "") - set(HAVE_FFI_FFI_H 1 CACHE INTERNAL "") - endif() - endif() - - if( NOT FFI_HEADER ) - message(FATAL_ERROR "libffi includes are not found.") - endif() - - find_library(FFI_LIBRARY_PATH ffi PATHS ${FFI_LIBRARY_DIR}) - if( NOT FFI_LIBRARY_PATH ) - message(FATAL_ERROR "libffi is not found.") - endif() - - list(APPEND CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH}) - list(APPEND CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH}) - check_symbol_exists(ffi_call ${FFI_HEADER} HAVE_FFI_CALL) - list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH}) - list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH}) -else() +# function(llvm_find_program name) +# string(TOUPPER ${name} NAME) +# string(REGEX REPLACE "\\." "_" NAME ${NAME}) +# +# find_program(LLVM_PATH_${NAME} NAMES ${ARGV}) +# mark_as_advanced(LLVM_PATH_${NAME}) +# if(LLVM_PATH_${NAME}) +# set(HAVE_${NAME} 1 CACHE INTERNAL "Is ${name} available ?") +# mark_as_advanced(HAVE_${NAME}) +# else(LLVM_PATH_${NAME}) +# set(HAVE_${NAME} "" CACHE INTERNAL "Is ${name} available ?") +# endif(LLVM_PATH_${NAME}) +# endfunction() + +# ROB: LLVM_ENABLE_DOXYGEN is OFF +# if (LLVM_ENABLE_DOXYGEN) +# llvm_find_program(dot) +# endif () + +# ROB: LLVM_ENABLE_FFI is OFF +# if( LLVM_ENABLE_FFI ) +# find_path(FFI_INCLUDE_PATH ffi.h PATHS ${FFI_INCLUDE_DIR}) +# if( EXISTS "${FFI_INCLUDE_PATH}/ffi.h" ) +# set(FFI_HEADER ffi.h CACHE INTERNAL "") +# set(HAVE_FFI_H 1 CACHE INTERNAL "") +# else() +# find_path(FFI_INCLUDE_PATH ffi/ffi.h PATHS ${FFI_INCLUDE_DIR}) +# if( EXISTS "${FFI_INCLUDE_PATH}/ffi/ffi.h" ) +# set(FFI_HEADER ffi/ffi.h CACHE INTERNAL "") +# set(HAVE_FFI_FFI_H 1 CACHE INTERNAL "") +# endif() +# endif() +# +# if( NOT FFI_HEADER ) +# message(FATAL_ERROR "libffi includes are not found.") +# endif() +# +# find_library(FFI_LIBRARY_PATH ffi PATHS ${FFI_LIBRARY_DIR}) +# if( NOT FFI_LIBRARY_PATH ) +# message(FATAL_ERROR "libffi is not found.") +# endif() +# +# list(APPEND CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH}) +# list(APPEND CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH}) +# check_symbol_exists(ffi_call ${FFI_HEADER} HAVE_FFI_CALL) +# list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH}) +# list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH}) +# else() unset(HAVE_FFI_FFI_H CACHE) unset(HAVE_FFI_H CACHE) unset(HAVE_FFI_CALL CACHE) -endif( LLVM_ENABLE_FFI ) +# endif( LLVM_ENABLE_FFI ) # Whether we can use std::is_trivially_copyable to verify llvm::is_trivially_copyable. set (HAVE_STD_IS_TRIVIALLY_COPYABLE 1) @@ -358,37 +366,38 @@ set (HAVE_STD_IS_TRIVIALLY_COPYABLE 1) # Define LLVM_HAS_ATOMICS if gcc or MSVC atomic builtins are supported. include(CheckAtomic) -if( LLVM_ENABLE_PIC ) - set(ENABLE_PIC 1) -else() +# ROB: LLVM_ENABLE_PIC is OFF +# if( LLVM_ENABLE_PIC ) +# set(ENABLE_PIC 1) +# else() set(ENABLE_PIC 0) check_cxx_compiler_flag("-fno-pie" SUPPORTS_NO_PIE_FLAG) if(SUPPORTS_NO_PIE_FLAG) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-pie") endif() -endif() +# endif() -check_cxx_compiler_flag("-Wvariadic-macros" SUPPORTS_VARIADIC_MACROS_FLAG) -check_cxx_compiler_flag("-Wgnu-zero-variadic-macro-arguments" - SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG) +# check_cxx_compiler_flag("-Wvariadic-macros" SUPPORTS_VARIADIC_MACROS_FLAG) +# check_cxx_compiler_flag("-Wgnu-zero-variadic-macro-arguments" +# SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG) -set(USE_NO_MAYBE_UNINITIALIZED 0) -set(USE_NO_UNINITIALIZED 0) +# set(USE_NO_MAYBE_UNINITIALIZED 0) +# set(USE_NO_UNINITIALIZED 0) # Disable gcc's potentially uninitialized use analysis as it presents lots of # false positives. -if (CMAKE_COMPILER_IS_GNUCXX) - check_cxx_compiler_flag("-Wmaybe-uninitialized" HAS_MAYBE_UNINITIALIZED) - if (HAS_MAYBE_UNINITIALIZED) - set(USE_NO_MAYBE_UNINITIALIZED 1) - else() - # Only recent versions of gcc make the distinction between -Wuninitialized - # and -Wmaybe-uninitialized. If -Wmaybe-uninitialized isn't supported, just - # turn off all uninitialized use warnings. - check_cxx_compiler_flag("-Wuninitialized" HAS_UNINITIALIZED) - set(USE_NO_UNINITIALIZED ${HAS_UNINITIALIZED}) - endif() -endif() +# if (CMAKE_COMPILER_IS_GNUCXX) +# check_cxx_compiler_flag("-Wmaybe-uninitialized" HAS_MAYBE_UNINITIALIZED) +# if (HAS_MAYBE_UNINITIALIZED) +# set(USE_NO_MAYBE_UNINITIALIZED 1) +# else() +# # Only recent versions of gcc make the distinction between -Wuninitialized +# # and -Wmaybe-uninitialized. If -Wmaybe-uninitialized isn't supported, just +# # turn off all uninitialized use warnings. +# check_cxx_compiler_flag("-Wuninitialized" HAS_UNINITIALIZED) +# set(USE_NO_UNINITIALIZED ${HAS_UNINITIALIZED}) +# endif() +# endif() # By default, we target the host, but this can be overridden at CMake # invocation time. @@ -478,37 +487,37 @@ else () endif () endif () -if( MSVC ) - set(SHLIBEXT ".lib") - set(stricmp "_stricmp") - set(strdup "_strdup") - - # See if the DIA SDK is available and usable. - set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK" CACHE PATH - "Path to the DIA SDK") - - # Due to a bug in MSVC 2013's installation software, it is possible - # for MSVC 2013 to write the DIA SDK into the Visual Studio 2012 - # install directory. If this happens, the installation is corrupt - # and there's nothing we can do. It happens with enough frequency - # though that we should handle it. We do so by simply checking that - # the DIA SDK folder exists. Should this happen you will need to - # uninstall VS 2012 and then re-install VS 2013. - if (IS_DIRECTORY "${MSVC_DIA_SDK_DIR}") - set(HAVE_DIA_SDK 1) - else() - set(HAVE_DIA_SDK 0) - endif() - - option(LLVM_ENABLE_DIA_SDK "Use MSVC DIA SDK for debugging if available." - ${HAVE_DIA_SDK}) - - if(LLVM_ENABLE_DIA_SDK AND NOT HAVE_DIA_SDK) - message(FATAL_ERROR "DIA SDK not found. If you have both VS 2012 and 2013 installed, you may need to uninstall the former and re-install the latter afterwards.") - endif() -else() - set(LLVM_ENABLE_DIA_SDK 0) -endif( MSVC ) +# if( MSVC ) +# set(SHLIBEXT ".lib") +# set(stricmp "_stricmp") +# set(strdup "_strdup") +# +# # See if the DIA SDK is available and usable. +# set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK" CACHE PATH +# "Path to the DIA SDK") +# +# # Due to a bug in MSVC 2013's installation software, it is possible +# # for MSVC 2013 to write the DIA SDK into the Visual Studio 2012 +# # install directory. If this happens, the installation is corrupt +# # and there's nothing we can do. It happens with enough frequency +# # though that we should handle it. We do so by simply checking that +# # the DIA SDK folder exists. Should this happen you will need to +# # uninstall VS 2012 and then re-install VS 2013. +# if (IS_DIRECTORY "${MSVC_DIA_SDK_DIR}") +# set(HAVE_DIA_SDK 1) +# else() +# set(HAVE_DIA_SDK 0) +# endif() +# +# option(LLVM_ENABLE_DIA_SDK "Use MSVC DIA SDK for debugging if available." +# ${HAVE_DIA_SDK}) +# +# if(LLVM_ENABLE_DIA_SDK AND NOT HAVE_DIA_SDK) +# message(FATAL_ERROR "DIA SDK not found. If you have both VS 2012 and 2013 installed, you may need to uninstall the former and re-install the latter afterwards.") +# endif() +# else() +# set(LLVM_ENABLE_DIA_SDK 0) +# endif( MSVC ) # FIXME: Signal handler return type, currently hardcoded to 'void' set(RETSIGTYPE void) @@ -526,46 +535,49 @@ else( LLVM_ENABLE_THREADS ) message(STATUS "Threads disabled.") endif() -if (LLVM_ENABLE_DOXYGEN) - message(STATUS "Doxygen enabled.") - find_package(Doxygen REQUIRED) - - if (DOXYGEN_FOUND) - # If we find doxygen and we want to enable doxygen by default create a - # global aggregate doxygen target for generating llvm and any/all - # subprojects doxygen documentation. - if (LLVM_BUILD_DOCS) - add_custom_target(doxygen ALL) - endif() - - option(LLVM_DOXYGEN_EXTERNAL_SEARCH "Enable doxygen external search." OFF) - if (LLVM_DOXYGEN_EXTERNAL_SEARCH) - set(LLVM_DOXYGEN_SEARCHENGINE_URL "" CACHE STRING "URL to use for external search.") - set(LLVM_DOXYGEN_SEARCH_MAPPINGS "" CACHE STRING "Doxygen Search Mappings") - endif() - endif() -else() - message(STATUS "Doxygen disabled.") -endif() - -set(LLVM_BINDINGS "") -find_program(GO_EXECUTABLE NAMES go DOC "go executable") -if(WIN32 OR NOT LLVM_ENABLE_BINDINGS) - message(STATUS "Go bindings disabled.") -else() - if(GO_EXECUTABLE STREQUAL "GO_EXECUTABLE-NOTFOUND") - message(STATUS "Go bindings disabled.") - else() - execute_process(COMMAND ${GO_EXECUTABLE} run ${PROJECT_SOURCE_DIR}/bindings/go/conftest.go - RESULT_VARIABLE GO_CONFTEST) - if(GO_CONFTEST STREQUAL "0") - set(LLVM_BINDINGS "${LLVM_BINDINGS} go") - message(STATUS "Go bindings enabled.") - else() - message(STATUS "Go bindings disabled, need at least Go 1.2.") - endif() - endif() -endif() +# ROB: LLVM_ENABLE_DOXYGEN is OFF +# if (LLVM_ENABLE_DOXYGEN) +# message(STATUS "Doxygen enabled.") +# find_package(Doxygen REQUIRED) +# +# if (DOXYGEN_FOUND) +# # If we find doxygen and we want to enable doxygen by default create a +# # global aggregate doxygen target for generating llvm and any/all +# # subprojects doxygen documentation. +# # if (LLVM_BUILD_DOCS) +# # # ROB: LLVM_BUILD_DOCS is off +# # add_custom_target(doxygen ALL) +# # endif() +# +# option(LLVM_DOXYGEN_EXTERNAL_SEARCH "Enable doxygen external search." OFF) +# if (LLVM_DOXYGEN_EXTERNAL_SEARCH) +# set(LLVM_DOXYGEN_SEARCHENGINE_URL "" CACHE STRING "URL to use for external search.") +# set(LLVM_DOXYGEN_SEARCH_MAPPINGS "" CACHE STRING "Doxygen Search Mappings") +# endif() +# endif() +# else() + # message(STATUS "Doxygen disabled.") +# endif() + +# set(LLVM_BINDINGS "") +# find_program(GO_EXECUTABLE NAMES go DOC "go executable") +# ROB: LLVM_ENABLE_BINDINGS is false +# if(WIN32 OR NOT LLVM_ENABLE_BINDINGS) + # message(STATUS "Go bindings disabled.") +# else() +# if(GO_EXECUTABLE STREQUAL "GO_EXECUTABLE-NOTFOUND") +# message(STATUS "Go bindings disabled.") +# else() +# execute_process(COMMAND ${GO_EXECUTABLE} run ${PROJECT_SOURCE_DIR}/bindings/go/conftest.go +# RESULT_VARIABLE GO_CONFTEST) +# if(GO_CONFTEST STREQUAL "0") +# set(LLVM_BINDINGS "${LLVM_BINDINGS} go") +# message(STATUS "Go bindings enabled.") +# else() +# message(STATUS "Go bindings disabled, need at least Go 1.2.") +# endif() +# endif() +# endif() find_program(GOLD_EXECUTABLE NAMES ${LLVM_DEFAULT_TARGET_TRIPLE}-ld.gold ld.gold ${LLVM_DEFAULT_TARGET_TRIPLE}-ld ld DOC "The gold linker") set(LLVM_BINUTILS_INCDIR "" CACHE PATH @@ -585,88 +597,89 @@ if(CMAKE_GENERATOR STREQUAL "Ninja" AND set(LLVM_TOUCH_STATIC_LIBRARIES ON) endif() -if(CMAKE_HOST_APPLE AND APPLE) - if(NOT CMAKE_XCRUN) - find_program(CMAKE_XCRUN NAMES xcrun) - endif() - if(CMAKE_XCRUN) - execute_process(COMMAND ${CMAKE_XCRUN} -find ld - OUTPUT_VARIABLE LD64_EXECUTABLE - OUTPUT_STRIP_TRAILING_WHITESPACE) - else() - find_program(LD64_EXECUTABLE NAMES ld DOC "The ld64 linker") - endif() - - if(LD64_EXECUTABLE) - set(LD64_EXECUTABLE ${LD64_EXECUTABLE} CACHE PATH "ld64 executable") - message(STATUS "Found ld64 - ${LD64_EXECUTABLE}") - endif() -endif() +# if(CMAKE_HOST_APPLE AND APPLE) +# if(NOT CMAKE_XCRUN) +# find_program(CMAKE_XCRUN NAMES xcrun) +# endif() +# if(CMAKE_XCRUN) +# execute_process(COMMAND ${CMAKE_XCRUN} -find ld +# OUTPUT_VARIABLE LD64_EXECUTABLE +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# else() +# find_program(LD64_EXECUTABLE NAMES ld DOC "The ld64 linker") +# endif() +# +# if(LD64_EXECUTABLE) +# set(LD64_EXECUTABLE ${LD64_EXECUTABLE} CACHE PATH "ld64 executable") +# message(STATUS "Found ld64 - ${LD64_EXECUTABLE}") +# endif() +# endif() # Keep the version requirements in sync with bindings/ocaml/README.txt. -include(FindOCaml) -include(AddOCaml) -if(WIN32 OR NOT LLVM_ENABLE_BINDINGS) - message(STATUS "OCaml bindings disabled.") -else() - find_package(OCaml) - if( NOT OCAML_FOUND ) - message(STATUS "OCaml bindings disabled.") - else() - if( OCAML_VERSION VERSION_LESS "4.00.0" ) - message(STATUS "OCaml bindings disabled, need OCaml >=4.00.0.") - else() - find_ocamlfind_package(ctypes VERSION 0.4 OPTIONAL) - if( HAVE_OCAML_CTYPES ) - message(STATUS "OCaml bindings enabled.") - find_ocamlfind_package(oUnit VERSION 2 OPTIONAL) - set(LLVM_BINDINGS "${LLVM_BINDINGS} ocaml") - - set(LLVM_OCAML_INSTALL_PATH "${OCAML_STDLIB_PATH}" CACHE STRING - "Install directory for LLVM OCaml packages") - else() - message(STATUS "OCaml bindings disabled, need ctypes >=0.4.") - endif() - endif() - endif() -endif() - -string(REPLACE " " ";" LLVM_BINDINGS_LIST "${LLVM_BINDINGS}") - -function(find_python_module module) - string(REPLACE "." "_" module_name ${module}) - string(TOUPPER ${module_name} module_upper) - set(FOUND_VAR PY_${module_upper}_FOUND) - if (DEFINED ${FOUND_VAR}) - return() - endif() - - execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "import ${module}" - RESULT_VARIABLE status - ERROR_QUIET) - - if(status) - set(${FOUND_VAR} OFF CACHE BOOL "Failed to find python module '${module}'") - message(STATUS "Could NOT find Python module ${module}") - else() - set(${FOUND_VAR} ON CACHE BOOL "Found python module '${module}'") - message(STATUS "Found Python module ${module}") - endif() -endfunction() - -set (PYTHON_MODULES - pygments - # Some systems still don't have pygments.lexers.c_cpp which was introduced in - # version 2.0 in 2014... - pygments.lexers.c_cpp - yaml - ) -foreach(module ${PYTHON_MODULES}) - find_python_module(${module}) -endforeach() - -if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND) - set (LLVM_HAVE_OPT_VIEWER_MODULES 1) -else() - set (LLVM_HAVE_OPT_VIEWER_MODULES 0) -endif() +# include(FindOCaml) +# include(AddOCaml) +# ROB: LLVM_ENABLE_BINDINGS is OFF +# if(WIN32 OR NOT LLVM_ENABLE_BINDINGS) + # message(STATUS "OCaml bindings disabled.") +# else() +# find_package(OCaml) +# if( NOT OCAML_FOUND ) +# message(STATUS "OCaml bindings disabled.") +# else() +# if( OCAML_VERSION VERSION_LESS "4.00.0" ) +# message(STATUS "OCaml bindings disabled, need OCaml >=4.00.0.") +# else() +# find_ocamlfind_package(ctypes VERSION 0.4 OPTIONAL) +# if( HAVE_OCAML_CTYPES ) +# message(STATUS "OCaml bindings enabled.") +# find_ocamlfind_package(oUnit VERSION 2 OPTIONAL) +# set(LLVM_BINDINGS "${LLVM_BINDINGS} ocaml") +# +# set(LLVM_OCAML_INSTALL_PATH "${OCAML_STDLIB_PATH}" CACHE STRING +# "Install directory for LLVM OCaml packages") +# else() +# message(STATUS "OCaml bindings disabled, need ctypes >=0.4.") +# endif() +# endif() +# endif() +# endif() + +# string(REPLACE " " ";" LLVM_BINDINGS_LIST "${LLVM_BINDINGS}") + +# function(find_python_module module) +# string(REPLACE "." "_" module_name ${module}) +# string(TOUPPER ${module_name} module_upper) +# set(FOUND_VAR PY_${module_upper}_FOUND) +# if (DEFINED ${FOUND_VAR}) +# return() +# endif() +# +# execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "import ${module}" +# RESULT_VARIABLE status +# ERROR_QUIET) +# +# if(status) +# set(${FOUND_VAR} OFF CACHE BOOL "Failed to find python module '${module}'") +# message(STATUS "Could NOT find Python module ${module}") +# else() +# set(${FOUND_VAR} ON CACHE BOOL "Found python module '${module}'") +# message(STATUS "Found Python module ${module}") +# endif() +# endfunction() + +# set (PYTHON_MODULES +# pygments +# # Some systems still don't have pygments.lexers.c_cpp which was introduced in +# # version 2.0 in 2014... +# pygments.lexers.c_cpp +# yaml +# ) +# foreach(module ${PYTHON_MODULES}) +# find_python_module(${module}) +# endforeach() + +# if(PY_PYGMENTS_FOUND AND PY_PYGMENTS_LEXERS_C_CPP_FOUND AND PY_YAML_FOUND) +# set (LLVM_HAVE_OPT_VIEWER_MODULES 1) +# else() +# set (LLVM_HAVE_OPT_VIEWER_MODULES 0) +# endif() diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 97c9980c..5994ac8a 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -17,9 +17,9 @@ function(llvm_update_compile_flags name) message(AUTHOR_WARNING "Exception handling requires RTTI. Enabling RTTI for ${name}") set(LLVM_REQUIRES_RTTI ON) endif() - if(MSVC) - list(APPEND LLVM_COMPILE_FLAGS "/EHsc") - endif() + # if(MSVC) + # list(APPEND LLVM_COMPILE_FLAGS "/EHsc") + # endif() else() if(LLVM_COMPILER_IS_GCC_COMPATIBLE) list(APPEND LLVM_COMPILE_FLAGS "-fno-exceptions") @@ -27,9 +27,9 @@ function(llvm_update_compile_flags name) list(APPEND LLVM_COMPILE_FLAGS "-fno-unwind-tables") list(APPEND LLVM_COMPILE_FLAGS "-fno-asynchronous-unwind-tables") endif() - elseif(MSVC) - list(APPEND LLVM_COMPILE_DEFINITIONS _HAS_EXCEPTIONS=0) - list(APPEND LLVM_COMPILE_FLAGS "/EHs-c-") + # elseif(MSVC) + # list(APPEND LLVM_COMPILE_DEFINITIONS _HAS_EXCEPTIONS=0) + # list(APPEND LLVM_COMPILE_FLAGS "/EHs-c-") elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL") list(APPEND LLVM_COMPILE_FLAGS "-qnoeh") endif() @@ -43,13 +43,13 @@ function(llvm_update_compile_flags name) list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0) if (LLVM_COMPILER_IS_GCC_COMPATIBLE) list(APPEND LLVM_COMPILE_FLAGS "-fno-rtti") - elseif (MSVC) - list(APPEND LLVM_COMPILE_FLAGS "/GR-") + # elseif (MSVC) + # list(APPEND LLVM_COMPILE_FLAGS "/GR-") elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL") list(APPEND LLVM_COMPILE_FLAGS "-qnortti") endif () - elseif(MSVC) - list(APPEND LLVM_COMPILE_FLAGS "/GR") + # elseif(MSVC) + # list(APPEND LLVM_COMPILE_FLAGS "/GR") endif() # Assume that; @@ -126,9 +126,9 @@ function(add_llvm_symbol_exports target_name export_file) VERBATIM COMMENT "Creating export file for ${target_name}") set(export_file_linker_flag "${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}") - if(MSVC) - set(export_file_linker_flag "/DEF:\"${export_file_linker_flag}\"") - endif() + # if(MSVC) + # set(export_file_linker_flag "/DEF:\"${export_file_linker_flag}\"") + # endif() set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " ${export_file_linker_flag}") endif() @@ -166,20 +166,20 @@ function(add_llvm_symbol_exports target_name export_file) endfunction(add_llvm_symbol_exports) if (NOT DEFINED LLVM_LINKER_DETECTED) - if(APPLE) - execute_process( - COMMAND "${CMAKE_LINKER}" -v - ERROR_VARIABLE stderr - ) - if("${stderr}" MATCHES "PROJECT:ld64") - set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") - set(LLVM_LINKER_IS_LD64 YES CACHE INTERNAL "") - message(STATUS "Linker detection: ld64") - else() - set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "") - message(STATUS "Linker detection: unknown") - endif() - elseif(NOT WIN32) + # if(APPLE) + # execute_process( + # COMMAND "${CMAKE_LINKER}" -v + # ERROR_VARIABLE stderr + # ) + # if("${stderr}" MATCHES "PROJECT:ld64") + # set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + # set(LLVM_LINKER_IS_LD64 YES CACHE INTERNAL "") + # message(STATUS "Linker detection: ld64") + # else() + # set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "") + # message(STATUS "Linker detection: unknown") + # endif() + # elseif(NOT WIN32) # Detect what linker we have here if( LLVM_USE_LINKER ) set(command ${CMAKE_C_COMPILER} -fuse-ld=${LLVM_USE_LINKER} -Wl,--version) @@ -213,7 +213,7 @@ if (NOT DEFINED LLVM_LINKER_DETECTED) set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "") message(STATUS "Linker detection: unknown") endif() - endif() + # endif() endif() function(add_link_opts target_name) @@ -269,12 +269,12 @@ function(set_output_directory target) # module_dir -- corresponding to LIBRARY_OUTPUT_DIRECTORY. # It affects output of add_library(MODULE). - if(WIN32 OR CYGWIN) - # DLL platform - set(module_dir ${ARG_BINARY_DIR}) - else() + # if(WIN32 OR CYGWIN) + # # DLL platform + # set(module_dir ${ARG_BINARY_DIR}) + # else() set(module_dir ${ARG_LIBRARY_DIR}) - endif() + # endif() if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") foreach(build_mode ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER "${build_mode}" CONFIG_SUFFIX) @@ -311,18 +311,19 @@ endfunction() # function(add_windows_version_resource_file OUT_VAR) set(sources ${ARGN}) - if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") - set(resource_file ${LLVM_SOURCE_DIR}/resources/windows_version_resource.rc) - if(EXISTS ${resource_file}) - set(sources ${sources} ${resource_file}) - source_group("Resource Files" ${resource_file}) - set(windows_resource_file ${resource_file} PARENT_SCOPE) - endif() - endif(MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + # if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + # set(resource_file ${LLVM_SOURCE_DIR}/resources/windows_version_resource.rc) + # if(EXISTS ${resource_file}) + # set(sources ${sources} ${resource_file}) + # source_group("Resource Files" ${resource_file}) + # set(windows_resource_file ${resource_file} PARENT_SCOPE) + # endif() + # endif(MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") set(${OUT_VAR} ${sources} PARENT_SCOPE) endfunction(add_windows_version_resource_file) +# ROB: Function is never called # set_windows_version_resource_properties(name resource_file... # VERSION_MAJOR int # Optional major version number (defaults to LLVM_VERSION_MAJOR) @@ -335,46 +336,46 @@ endfunction(add_windows_version_resource_file) # PRODUCT_NAME # Optional product name string (defaults to "LLVM") # ) -function(set_windows_version_resource_properties name resource_file) - cmake_parse_arguments(ARG - "" - "VERSION_MAJOR;VERSION_MINOR;VERSION_PATCHLEVEL;VERSION_STRING;PRODUCT_NAME" - "" - ${ARGN}) - - if (NOT DEFINED ARG_VERSION_MAJOR) - set(ARG_VERSION_MAJOR ${LLVM_VERSION_MAJOR}) - endif() - - if (NOT DEFINED ARG_VERSION_MINOR) - set(ARG_VERSION_MINOR ${LLVM_VERSION_MINOR}) - endif() - - if (NOT DEFINED ARG_VERSION_PATCHLEVEL) - set(ARG_VERSION_PATCHLEVEL ${LLVM_VERSION_PATCH}) - endif() - - if (NOT DEFINED ARG_VERSION_STRING) - set(ARG_VERSION_STRING ${PACKAGE_VERSION}) - endif() - - if (NOT DEFINED ARG_PRODUCT_NAME) - set(ARG_PRODUCT_NAME "LLVM") - endif() - - set_property(SOURCE ${resource_file} - PROPERTY COMPILE_FLAGS /nologo) - set_property(SOURCE ${resource_file} - PROPERTY COMPILE_DEFINITIONS - "RC_VERSION_FIELD_1=${ARG_VERSION_MAJOR}" - "RC_VERSION_FIELD_2=${ARG_VERSION_MINOR}" - "RC_VERSION_FIELD_3=${ARG_VERSION_PATCHLEVEL}" - "RC_VERSION_FIELD_4=0" - "RC_FILE_VERSION=\"${ARG_VERSION_STRING}\"" - "RC_INTERNAL_NAME=\"${name}\"" - "RC_PRODUCT_NAME=\"${ARG_PRODUCT_NAME}\"" - "RC_PRODUCT_VERSION=\"${ARG_VERSION_STRING}\"") -endfunction(set_windows_version_resource_properties) +# function(set_windows_version_resource_properties name resource_file) +# cmake_parse_arguments(ARG +# "" +# "VERSION_MAJOR;VERSION_MINOR;VERSION_PATCHLEVEL;VERSION_STRING;PRODUCT_NAME" +# "" +# ${ARGN}) +# +# if (NOT DEFINED ARG_VERSION_MAJOR) +# set(ARG_VERSION_MAJOR ${LLVM_VERSION_MAJOR}) +# endif() +# +# if (NOT DEFINED ARG_VERSION_MINOR) +# set(ARG_VERSION_MINOR ${LLVM_VERSION_MINOR}) +# endif() +# +# if (NOT DEFINED ARG_VERSION_PATCHLEVEL) +# set(ARG_VERSION_PATCHLEVEL ${LLVM_VERSION_PATCH}) +# endif() +# +# if (NOT DEFINED ARG_VERSION_STRING) +# set(ARG_VERSION_STRING ${PACKAGE_VERSION}) +# endif() +# +# if (NOT DEFINED ARG_PRODUCT_NAME) +# set(ARG_PRODUCT_NAME "LLVM") +# endif() +# +# set_property(SOURCE ${resource_file} +# PROPERTY COMPILE_FLAGS /nologo) +# set_property(SOURCE ${resource_file} +# PROPERTY COMPILE_DEFINITIONS +# "RC_VERSION_FIELD_1=${ARG_VERSION_MAJOR}" +# "RC_VERSION_FIELD_2=${ARG_VERSION_MINOR}" +# "RC_VERSION_FIELD_3=${ARG_VERSION_PATCHLEVEL}" +# "RC_VERSION_FIELD_4=0" +# "RC_FILE_VERSION=\"${ARG_VERSION_STRING}\"" +# "RC_INTERNAL_NAME=\"${name}\"" +# "RC_PRODUCT_NAME=\"${ARG_PRODUCT_NAME}\"" +# "RC_PRODUCT_VERSION=\"${ARG_VERSION_STRING}\"") +# endfunction(set_windows_version_resource_properties) # llvm_add_library(name sources... # SHARED;STATIC @@ -455,11 +456,11 @@ function(llvm_add_library name) ${ALL_FILES} ) llvm_update_compile_flags(${obj_name}) - if(CMAKE_GENERATOR STREQUAL "Xcode") - set(DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/Dummy.c) - file(WRITE ${DUMMY_FILE} "// This file intentionally empty\n") - set_property(SOURCE ${DUMMY_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wno-empty-translation-unit") - endif() + # if(CMAKE_GENERATOR STREQUAL "Xcode") + # set(DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/Dummy.c) + # file(WRITE ${DUMMY_FILE} "// This file intentionally empty\n") + # set_property(SOURCE ${DUMMY_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wno-empty-translation-unit") + # endif() set(ALL_FILES "$" ${DUMMY_FILE}) # Do add_dependencies(obj) later due to CMake issue 14747. @@ -528,12 +529,14 @@ function(llvm_add_library name) endif() endif() - setup_dependency_debugging(${name} ${LLVM_COMMON_DEPENDS}) + # ROB: dependency debugging is off + # setup_dependency_debugging(${name} ${LLVM_COMMON_DEPENDS}) - if(DEFINED windows_resource_file) - set_windows_version_resource_properties(${name} ${windows_resource_file}) - set(windows_resource_file ${windows_resource_file} PARENT_SCOPE) - endif() + # ROB: windows_resource_file is never set + # if(DEFINED windows_resource_file) + # set_windows_version_resource_properties(${name} ${windows_resource_file}) + # set(windows_resource_file ${windows_resource_file} PARENT_SCOPE) + # endif() set_output_directory(${name} BINARY_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR} LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) # $ doesn't require compile flags. @@ -556,11 +559,11 @@ function(llvm_add_library name) endif() if(ARG_SHARED) - if(MSVC) - set_target_properties(${name} PROPERTIES - PREFIX "" - ) - endif() + # if(MSVC) + # set_target_properties(${name} PROPERTIES + # PREFIX "" + # ) + # endif() # Set SOVERSION on shared libraries that lack explicit SONAME # specifier, on *nix systems that are not Darwin. @@ -610,18 +613,19 @@ function(llvm_add_library name) set(libtype PRIVATE) endif() - if(ARG_MODULE AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS AND ARG_PLUGIN_TOOL AND (WIN32 OR CYGWIN)) - # On DLL platforms symbols are imported from the tool by linking against it. - set(llvm_libs ${ARG_PLUGIN_TOOL}) - elseif (NOT ARG_COMPONENT_LIB) - if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) - set(llvm_libs LLVM) - else() + # if(ARG_MODULE AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS AND ARG_PLUGIN_TOOL AND (WIN32 OR CYGWIN)) + # # On DLL platforms symbols are imported from the tool by linking against it. + # set(llvm_libs ${ARG_PLUGIN_TOOL}) + if (NOT ARG_COMPONENT_LIB) + # ROB: LLVM_LINK_LLVM_DYLIB is OFF + # if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) + # set(llvm_libs LLVM) + # else() llvm_map_components_to_libnames(llvm_libs ${ARG_LINK_COMPONENTS} ${LLVM_LINK_COMPONENTS} ) - endif() + # endif() else() # Components have not been defined explicitly in CMake, so add the # dependency information for this library through their name, and let @@ -655,8 +659,8 @@ function(llvm_add_library name) endif() if(ARG_SHARED OR ARG_MODULE) - llvm_externalize_debuginfo(${name}) - llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) + # llvm_externalize_debuginfo(${name}) + # llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) endif() # clang and newer versions of ninja use high-resolutions timestamps, # but older versions of libtool on Darwin don't, so the archive will @@ -792,6 +796,7 @@ macro(add_llvm_library name) elseif(ARG_BUILDTREE_ONLY) set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY ${name}) else() + # ROB: LLVM_INSTALL_TOOLCHAIN_ONLY is OFF if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN) set(export_to_llvmexports) @@ -849,11 +854,11 @@ macro(add_llvm_executable name) add_windows_version_resource_file(ALL_FILES ${ALL_FILES}) - if(XCODE) - # Note: the dummy.cpp source file provides no definitions. However, - # it forces Xcode to properly link the static library. - list(APPEND ALL_FILES "${LLVM_MAIN_SRC_DIR}/cmake/dummy.cpp") - endif() + # if(XCODE) + # # Note: the dummy.cpp source file provides no definitions. However, + # # it forces Xcode to properly link the static library. + # list(APPEND ALL_FILES "${LLVM_MAIN_SRC_DIR}/cmake/dummy.cpp") + # endif() if( EXCLUDE_FROM_ALL ) add_executable(${name} EXCLUDE_FROM_ALL ${ALL_FILES}) @@ -861,7 +866,8 @@ macro(add_llvm_executable name) add_executable(${name} ${ALL_FILES}) endif() - setup_dependency_debugging(${name} ${LLVM_COMMON_DEPENDS}) + # ROB: dependency debugging is off + # setup_dependency_debugging(${name} ${LLVM_COMMON_DEPENDS}) if(NOT ARG_NO_INSTALL_RPATH) llvm_setup_rpath(${name}) @@ -874,9 +880,10 @@ macro(add_llvm_executable name) set_property(TARGET ${name} PROPERTY INSTALL_RPATH "${LLVM_LOCAL_RPATH}") endif() - if(DEFINED windows_resource_file) - set_windows_version_resource_properties(${name} ${windows_resource_file}) - endif() + # ROB: windows_resource_file is never set + # if(DEFINED windows_resource_file) + # set_windows_version_resource_properties(${name} ${windows_resource_file}) + # endif() # $ doesn't require compile flags. if(NOT LLVM_ENABLE_OBJLIB) @@ -899,9 +906,10 @@ macro(add_llvm_executable name) add_llvm_symbol_exports( ${name} ${LLVM_EXPORTED_SYMBOL_FILE} ) endif(LLVM_EXPORTED_SYMBOL_FILE) - if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) - set(USE_SHARED USE_SHARED) - endif() + # ROB: LLVM_LINK_LLVM_DYLIB is OFF + # if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) + # set(USE_SHARED USE_SHARED) + # endif() set(EXCLUDE_FROM_ALL OFF) set_output_directory(${name} BINARY_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR} LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) @@ -911,7 +919,7 @@ macro(add_llvm_executable name) endif( LLVM_COMMON_DEPENDS ) if(NOT ARG_IGNORE_EXTERNALIZE_DEBUGINFO) - llvm_externalize_debuginfo(${name}) + # llvm_externalize_debuginfo(${name}) endif() if (LLVM_PTHREAD_LIB) # libpthreads overrides some standard library symbols, so main @@ -920,67 +928,67 @@ macro(add_llvm_executable name) target_link_libraries(${name} PRIVATE ${LLVM_PTHREAD_LIB}) endif() - llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) + # llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) endmacro(add_llvm_executable name) -# add_llvm_pass_plugin(name [NO_MODULE] ...) -# Add ${name} as an llvm plugin. -# If option LLVM_${name_upper}_LINK_INTO_TOOLS is set to ON, the plugin is registered statically. -# Otherwise a pluggable shared library is registered. +# # add_llvm_pass_plugin(name [NO_MODULE] ...) +# # Add ${name} as an llvm plugin. +# # If option LLVM_${name_upper}_LINK_INTO_TOOLS is set to ON, the plugin is registered statically. +# # Otherwise a pluggable shared library is registered. +# # +# # If NO_MODULE is specified, when option LLVM_${name_upper}_LINK_INTO_TOOLS is set to OFF, +# # only an object library is built, and no module is built. This is specific to the Polly use case. +# # +# # The SUBPROJECT argument contains the LLVM project the plugin belongs +# # to. If set, the plugin will link statically by default it if the +# # project was enabled. +# function(add_llvm_pass_plugin name) +# cmake_parse_arguments(ARG +# "NO_MODULE" "SUBPROJECT" "" +# ${ARGN}) # -# If NO_MODULE is specified, when option LLVM_${name_upper}_LINK_INTO_TOOLS is set to OFF, -# only an object library is built, and no module is built. This is specific to the Polly use case. +# string(TOUPPER ${name} name_upper) # -# The SUBPROJECT argument contains the LLVM project the plugin belongs -# to. If set, the plugin will link statically by default it if the -# project was enabled. -function(add_llvm_pass_plugin name) - cmake_parse_arguments(ARG - "NO_MODULE" "SUBPROJECT" "" - ${ARGN}) - - string(TOUPPER ${name} name_upper) - - # Enable the plugin by default if it was explicitly enabled by the user. - # Note: If was set to "all", LLVM's CMakeLists.txt replaces it with a - # list of all projects, counting as explicitly enabled. - set(link_into_tools_default OFF) - if (ARG_SUBPROJECT AND LLVM_TOOL_${name_upper}_BUILD) - set(link_into_tools_default ON) - endif() - option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" ${link_into_tools_default}) - - # If we statically link the plugin, don't use llvm dylib because we're going - # to be part of it. - if(LLVM_${name_upper}_LINK_INTO_TOOLS) - list(APPEND ARG_UNPARSED_ARGUMENTS DISABLE_LLVM_LINK_LLVM_DYLIB) - endif() - - if(LLVM_${name_upper}_LINK_INTO_TOOLS) - list(REMOVE_ITEM ARG_UNPARSED_ARGUMENTS BUILDTREE_ONLY) - # process_llvm_pass_plugins takes care of the actual linking, just create an - # object library as of now - add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) - target_compile_definitions(${name} PRIVATE LLVM_${name_upper}_LINK_INTO_TOOLS) - set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS LLVM_LINK_INTO_TOOLS) - if (TARGET intrinsics_gen) - add_dependencies(obj.${name} intrinsics_gen) - endif() - if (TARGET omp_gen) - add_dependencies(obj.${name} omp_gen) - endif() - if (TARGET acc_gen) - add_dependencies(obj.${name} acc_gen) - endif() - set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) - elseif(NOT ARG_NO_MODULE) - add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) - else() - add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) - endif() - message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") - -endfunction(add_llvm_pass_plugin) +# # Enable the plugin by default if it was explicitly enabled by the user. +# # Note: If was set to "all", LLVM's CMakeLists.txt replaces it with a +# # list of all projects, counting as explicitly enabled. +# set(link_into_tools_default OFF) +# if (ARG_SUBPROJECT AND LLVM_TOOL_${name_upper}_BUILD) +# set(link_into_tools_default ON) +# endif() +# option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" ${link_into_tools_default}) +# +# # If we statically link the plugin, don't use llvm dylib because we're going +# # to be part of it. +# if(LLVM_${name_upper}_LINK_INTO_TOOLS) +# list(APPEND ARG_UNPARSED_ARGUMENTS DISABLE_LLVM_LINK_LLVM_DYLIB) +# endif() +# +# if(LLVM_${name_upper}_LINK_INTO_TOOLS) +# list(REMOVE_ITEM ARG_UNPARSED_ARGUMENTS BUILDTREE_ONLY) +# # process_llvm_pass_plugins takes care of the actual linking, just create an +# # object library as of now +# add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) +# target_compile_definitions(${name} PRIVATE LLVM_${name_upper}_LINK_INTO_TOOLS) +# set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS LLVM_LINK_INTO_TOOLS) +# if (TARGET intrinsics_gen) +# add_dependencies(obj.${name} intrinsics_gen) +# endif() +# if (TARGET omp_gen) +# add_dependencies(obj.${name} omp_gen) +# endif() +# if (TARGET acc_gen) +# add_dependencies(obj.${name} acc_gen) +# endif() +# set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) +# elseif(NOT ARG_NO_MODULE) +# add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) +# else() +# add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) +# endif() +# message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") +# +# endfunction(add_llvm_pass_plugin) # process_llvm_pass_plugins([GEN_CONFIG]) # @@ -1091,85 +1099,86 @@ function(process_llvm_pass_plugins) endif() endfunction() -function(export_executable_symbols target) - if (LLVM_EXPORTED_SYMBOL_FILE) - # The symbol file should contain the symbols we want the executable to - # export - set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) - elseif (LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) - # Extract the symbols to export from the static libraries that the - # executable links against. - set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) - set(exported_symbol_file ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${target}.symbols) - # We need to consider not just the direct link dependencies, but also the - # transitive link dependencies. Do this by starting with the set of direct - # dependencies, then the dependencies of those dependencies, and so on. - get_target_property(new_libs ${target} LINK_LIBRARIES) - set(link_libs ${new_libs}) - while(NOT "${new_libs}" STREQUAL "") - foreach(lib ${new_libs}) - if(TARGET ${lib}) - get_target_property(lib_type ${lib} TYPE) - if("${lib_type}" STREQUAL "STATIC_LIBRARY") - list(APPEND static_libs ${lib}) - else() - list(APPEND other_libs ${lib}) - endif() - get_target_property(transitive_libs ${lib} INTERFACE_LINK_LIBRARIES) - foreach(transitive_lib ${transitive_libs}) - list(FIND link_libs ${transitive_lib} idx) - if(TARGET ${transitive_lib} AND idx EQUAL -1) - list(APPEND newer_libs ${transitive_lib}) - list(APPEND link_libs ${transitive_lib}) - endif() - endforeach(transitive_lib) - endif() - endforeach(lib) - set(new_libs ${newer_libs}) - set(newer_libs "") - endwhile() - list(REMOVE_DUPLICATES static_libs) - if (MSVC) - set(mangling microsoft) - else() - set(mangling itanium) - endif() - add_custom_command(OUTPUT ${exported_symbol_file} - COMMAND "${Python3_EXECUTABLE}" ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py --mangling=${mangling} ${static_libs} -o ${exported_symbol_file} - WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR} - DEPENDS ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py ${static_libs} - VERBATIM - COMMENT "Generating export list for ${target}") - add_llvm_symbol_exports( ${target} ${exported_symbol_file} ) - # If something links against this executable then we want a - # transitive link against only the libraries whose symbols - # we aren't exporting. - set_target_properties(${target} PROPERTIES INTERFACE_LINK_LIBRARIES "${other_libs}") - # The default import library suffix that cmake uses for cygwin/mingw is - # ".dll.a", but for clang.exe that causes a collision with libclang.dll, - # where the import libraries of both get named libclang.dll.a. Use a suffix - # of ".exe.a" to avoid this. - if(CYGWIN OR MINGW) - set_target_properties(${target} PROPERTIES IMPORT_SUFFIX ".exe.a") - endif() - elseif(NOT (WIN32 OR CYGWIN)) - # On Windows auto-exporting everything doesn't work because of the limit on - # the size of the exported symbol table, but on other platforms we can do - # it without any trouble. - set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) - if (APPLE) - set_property(TARGET ${target} APPEND_STRING PROPERTY - LINK_FLAGS " -rdynamic") - endif() - endif() -endfunction() +# function(export_executable_symbols target) +# if (LLVM_EXPORTED_SYMBOL_FILE) +# # The symbol file should contain the symbols we want the executable to +# # export +# set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) +# elseif (LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) +# # Extract the symbols to export from the static libraries that the +# # executable links against. +# set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) +# set(exported_symbol_file ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${target}.symbols) +# # We need to consider not just the direct link dependencies, but also the +# # transitive link dependencies. Do this by starting with the set of direct +# # dependencies, then the dependencies of those dependencies, and so on. +# get_target_property(new_libs ${target} LINK_LIBRARIES) +# set(link_libs ${new_libs}) +# while(NOT "${new_libs}" STREQUAL "") +# foreach(lib ${new_libs}) +# if(TARGET ${lib}) +# get_target_property(lib_type ${lib} TYPE) +# if("${lib_type}" STREQUAL "STATIC_LIBRARY") +# list(APPEND static_libs ${lib}) +# else() +# list(APPEND other_libs ${lib}) +# endif() +# get_target_property(transitive_libs ${lib} INTERFACE_LINK_LIBRARIES) +# foreach(transitive_lib ${transitive_libs}) +# list(FIND link_libs ${transitive_lib} idx) +# if(TARGET ${transitive_lib} AND idx EQUAL -1) +# list(APPEND newer_libs ${transitive_lib}) +# list(APPEND link_libs ${transitive_lib}) +# endif() +# endforeach(transitive_lib) +# endif() +# endforeach(lib) +# set(new_libs ${newer_libs}) +# set(newer_libs "") +# endwhile() +# list(REMOVE_DUPLICATES static_libs) +# # if (MSVC) +# # set(mangling microsoft) +# # else() +# set(mangling itanium) +# # endif() +# add_custom_command(OUTPUT ${exported_symbol_file} +# COMMAND "${Python3_EXECUTABLE}" ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py --mangling=${mangling} ${static_libs} -o ${exported_symbol_file} +# WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR} +# DEPENDS ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py ${static_libs} +# VERBATIM +# COMMENT "Generating export list for ${target}") +# add_llvm_symbol_exports( ${target} ${exported_symbol_file} ) +# # If something links against this executable then we want a +# # transitive link against only the libraries whose symbols +# # we aren't exporting. +# set_target_properties(${target} PROPERTIES INTERFACE_LINK_LIBRARIES "${other_libs}") +# # The default import library suffix that cmake uses for cygwin/mingw is +# # ".dll.a", but for clang.exe that causes a collision with libclang.dll, +# # where the import libraries of both get named libclang.dll.a. Use a suffix +# # of ".exe.a" to avoid this. +# if(CYGWIN OR MINGW) +# set_target_properties(${target} PROPERTIES IMPORT_SUFFIX ".exe.a") +# endif() +# elseif(NOT (WIN32 OR CYGWIN)) +# # On Windows auto-exporting everything doesn't work because of the limit on +# # the size of the exported symbol table, but on other platforms we can do +# # it without any trouble. +# set_target_properties(${target} PROPERTIES ENABLE_EXPORTS 1) +# # if (APPLE) +# # set_property(TARGET ${target} APPEND_STRING PROPERTY +# # LINK_FLAGS " -rdynamic") +# # endif() +# endif() +# endfunction() # Export symbols if LLVM plugins are enabled. -function(export_executable_symbols_for_plugins target) - if(LLVM_ENABLE_PLUGINS OR LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) - export_executable_symbols(${target}) - endif() -endfunction() +# function(export_executable_symbols_for_plugins target) +# ROB: LLVM_ENABLE_PLUGINS is OFF +# if(LLVM_ENABLE_PLUGINS OR LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) +# export_executable_symbols(${target}) +# endif() +# endfunction() if(NOT LLVM_TOOLCHAIN_TOOLS) set (LLVM_TOOLCHAIN_TOOLS @@ -1202,114 +1211,123 @@ if(NOT LLVM_TOOLCHAIN_TOOLS) ) endif() -macro(add_llvm_tool name) - if( NOT LLVM_BUILD_TOOLS ) - set(EXCLUDE_FROM_ALL ON) - endif() - add_llvm_executable(${name} ${ARGN}) - - if ( ${name} IN_LIST LLVM_TOOLCHAIN_TOOLS OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) - if( LLVM_BUILD_TOOLS ) - set(export_to_llvmexports) - if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR - NOT LLVM_DISTRIBUTION_COMPONENTS) - set(export_to_llvmexports EXPORT LLVMExports) - set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) - endif() - - install(TARGETS ${name} - ${export_to_llvmexports} - RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR} - COMPONENT ${name}) - - if (NOT LLVM_ENABLE_IDE) - add_llvm_install_targets(install-${name} - DEPENDS ${name} - COMPONENT ${name}) - endif() - endif() - endif() - if( LLVM_BUILD_TOOLS ) - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) - endif() - set_target_properties(${name} PROPERTIES FOLDER "Tools") -endmacro(add_llvm_tool name) - - -macro(add_llvm_example name) - if( NOT LLVM_BUILD_EXAMPLES ) - set(EXCLUDE_FROM_ALL ON) - endif() - add_llvm_executable(${name} ${ARGN}) - if( LLVM_BUILD_EXAMPLES ) - install(TARGETS ${name} RUNTIME DESTINATION examples) - endif() - set_target_properties(${name} PROPERTIES FOLDER "Examples") -endmacro(add_llvm_example name) - -macro(add_llvm_example_library name) - if( NOT LLVM_BUILD_EXAMPLES ) - set(EXCLUDE_FROM_ALL ON) - add_llvm_library(${name} BUILDTREE_ONLY ${ARGN}) - else() - add_llvm_library(${name} ${ARGN}) - endif() - - set_target_properties(${name} PROPERTIES FOLDER "Examples") -endmacro(add_llvm_example_library name) +# ROB: Function isn't used anywhere +# macro(add_llvm_tool name) +# # ROB: LLVM_BUILD_TOOLS is OFF +# # if( NOT LLVM_BUILD_TOOLS ) +# set(EXCLUDE_FROM_ALL ON) +# # endif() +# add_llvm_executable(${name} ${ARGN}) +# +# # ROB: LLVM_BUILD_TOOLS is OFF +# # if ( ${name} IN_LIST LLVM_TOOLCHAIN_TOOLS OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) +# # # if( LLVM_BUILD_TOOLS ) +# # # set(export_to_llvmexports) +# # # if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR +# # # NOT LLVM_DISTRIBUTION_COMPONENTS) +# # # set(export_to_llvmexports EXPORT LLVMExports) +# # # set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) +# # # endif() +# # # +# # # install(TARGETS ${name} +# # # ${export_to_llvmexports} +# # # RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR} +# # # COMPONENT ${name}) +# # # +# # # if (NOT LLVM_ENABLE_IDE) +# # # add_llvm_install_targets(install-${name} +# # # DEPENDS ${name} +# # # COMPONENT ${name}) +# # # endif() +# # # endif() +# # endif() +# # if( LLVM_BUILD_TOOLS ) +# # set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) +# # endif() +# set_target_properties(${name} PROPERTIES FOLDER "Tools") +# endmacro(add_llvm_tool name) + + +# macro(add_llvm_example name) +# # if( NOT LLVM_BUILD_EXAMPLES ) +# # ROB: LLVM_BUILD_EXAMPLES is OFF +# set(EXCLUDE_FROM_ALL ON) +# # endif() +# add_llvm_executable(${name} ${ARGN}) +# # if( LLVM_BUILD_EXAMPLES ) +# # ROB: LLVM_BUILD_EXAMPLES is OFF +# # install(TARGETS ${name} RUNTIME DESTINATION examples) +# # endif() +# set_target_properties(${name} PROPERTIES FOLDER "Examples") +# endmacro(add_llvm_example name) +# +# macro(add_llvm_example_library name) +# # if( NOT LLVM_BUILD_EXAMPLES ) +# # ROB: LLVM_BUILD_EXAMPLES is OFF +# set(EXCLUDE_FROM_ALL ON) +# add_llvm_library(${name} BUILDTREE_ONLY ${ARGN}) +# # else() +# # add_llvm_library(${name} ${ARGN}) +# # endif() +# +# set_target_properties(${name} PROPERTIES FOLDER "Examples") +# endmacro(add_llvm_example_library name) # This is a macro that is used to create targets for executables that are needed # for development, but that are not intended to be installed by default. -macro(add_llvm_utility name) - if ( NOT LLVM_BUILD_UTILS ) - set(EXCLUDE_FROM_ALL ON) - endif() - - add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN}) - set_target_properties(${name} PROPERTIES FOLDER "Utils") - if ( ${name} IN_LIST LLVM_TOOLCHAIN_UTILITIES OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) - if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) - set(export_to_llvmexports) - if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR - NOT LLVM_DISTRIBUTION_COMPONENTS) - set(export_to_llvmexports EXPORT LLVMExports) - set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) - endif() - - install(TARGETS ${name} - ${export_to_llvmexports} - RUNTIME DESTINATION ${LLVM_UTILS_INSTALL_DIR} - COMPONENT ${name}) - - if (NOT LLVM_ENABLE_IDE) - add_llvm_install_targets(install-${name} - DEPENDS ${name} - COMPONENT ${name}) - endif() - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) - elseif(LLVM_BUILD_UTILS) - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY ${name}) - endif() - endif() -endmacro(add_llvm_utility name) - -macro(add_llvm_fuzzer name) - cmake_parse_arguments(ARG "" "DUMMY_MAIN" "" ${ARGN}) - if( LLVM_LIB_FUZZING_ENGINE ) - set(LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN}) - add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS}) - target_link_libraries(${name} PRIVATE ${LLVM_LIB_FUZZING_ENGINE}) - set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") - elseif( LLVM_USE_SANITIZE_COVERAGE ) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer") - set(LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN}) - add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS}) - set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") - elseif( ARG_DUMMY_MAIN ) - add_llvm_executable(${name} ${ARG_DUMMY_MAIN} ${ARG_UNPARSED_ARGUMENTS}) - set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") - endif() -endmacro() +# macro(add_llvm_utility name) +# # ROB: LLVM_BUILD_UTILS is OFF +# # if ( NOT LLVM_BUILD_UTILS ) +# set(EXCLUDE_FROM_ALL ON) +# # endif() +# +# add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN}) +# set_target_properties(${name} PROPERTIES FOLDER "Utils") +# if ( ${name} IN_LIST LLVM_TOOLCHAIN_UTILITIES OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) +# # ROB: LLVM_BUILD_UTILS is OFF +# # if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) +# # # ROB: LLVM_INSTALL_UTILS is OFF +# # # set(export_to_llvmexports) +# # # if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR +# # # NOT LLVM_DISTRIBUTION_COMPONENTS) +# # # set(export_to_llvmexports EXPORT LLVMExports) +# # # set_property(GLOBAL PROPERTY LLVM_HAS_EXPORTS True) +# # # endif() +# # # +# # # install(TARGETS ${name} +# # # ${export_to_llvmexports} +# # # RUNTIME DESTINATION ${LLVM_UTILS_INSTALL_DIR} +# # # COMPONENT ${name}) +# # # +# # # if (NOT LLVM_ENABLE_IDE) +# # # add_llvm_install_targets(install-${name} +# # # DEPENDS ${name} +# # # COMPONENT ${name}) +# # # endif() +# # # set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) +# # elseif(LLVM_BUILD_UTILS) +# # set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY ${name}) +# # endif() +# endif() +# endmacro(add_llvm_utility name) + +# macro(add_llvm_fuzzer name) +# cmake_parse_arguments(ARG "" "DUMMY_MAIN" "" ${ARGN}) +# if( LLVM_LIB_FUZZING_ENGINE ) +# set(LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN}) +# add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS}) +# target_link_libraries(${name} PRIVATE ${LLVM_LIB_FUZZING_ENGINE}) +# set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") +# elseif( LLVM_USE_SANITIZE_COVERAGE ) +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer") +# set(LLVM_OPTIONAL_SOURCES ${ARG_DUMMY_MAIN}) +# add_llvm_executable(${name} ${ARG_UNPARSED_ARGUMENTS}) +# set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") +# elseif( ARG_DUMMY_MAIN ) +# add_llvm_executable(${name} ${ARG_DUMMY_MAIN} ${ARG_UNPARSED_ARGUMENTS}) +# set_target_properties(${name} PROPERTIES FOLDER "Fuzzers") +# endif() +# endmacro() macro(add_llvm_target target_name) include_directories(BEFORE @@ -1329,234 +1347,241 @@ endfunction(canonicalize_tool_name) # Custom add_subdirectory wrapper # Takes in a project name (i.e. LLVM), the subdirectory name, and an optional # path if it differs from the name. -function(add_llvm_subdirectory project type name) - set(add_llvm_external_dir "${ARGN}") - if("${add_llvm_external_dir}" STREQUAL "") - set(add_llvm_external_dir ${name}) - endif() - canonicalize_tool_name(${name} nameUPPER) - set(canonical_full_name ${project}_${type}_${nameUPPER}) - get_property(already_processed GLOBAL PROPERTY ${canonical_full_name}_PROCESSED) - if(already_processed) - return() - endif() - set_property(GLOBAL PROPERTY ${canonical_full_name}_PROCESSED YES) - - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}/CMakeLists.txt) - # Treat it as in-tree subproject. - option(${canonical_full_name}_BUILD - "Whether to build ${name} as part of ${project}" On) - mark_as_advanced(${project}_${type}_${name}_BUILD) - if(${canonical_full_name}_BUILD) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir} ${add_llvm_external_dir}) - endif() - else() - set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR - "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" - CACHE PATH "Path to ${name} source directory") - set(${canonical_full_name}_BUILD_DEFAULT ON) - if(NOT LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR OR NOT EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}) - set(${canonical_full_name}_BUILD_DEFAULT OFF) - endif() - if("${LLVM_EXTERNAL_${nameUPPER}_BUILD}" STREQUAL "OFF") - set(${canonical_full_name}_BUILD_DEFAULT OFF) - endif() - option(${canonical_full_name}_BUILD - "Whether to build ${name} as part of LLVM" - ${${canonical_full_name}_BUILD_DEFAULT}) - if (${canonical_full_name}_BUILD) - if(EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}) - add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${add_llvm_external_dir}) - elseif(NOT "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" STREQUAL "") - message(WARNING "Nonexistent directory for ${name}: ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}") - endif() - endif() - endif() -endfunction() +# function(add_llvm_subdirectory project type name) +# set(add_llvm_external_dir "${ARGN}") +# if("${add_llvm_external_dir}" STREQUAL "") +# set(add_llvm_external_dir ${name}) +# endif() +# canonicalize_tool_name(${name} nameUPPER) +# set(canonical_full_name ${project}_${type}_${nameUPPER}) +# get_property(already_processed GLOBAL PROPERTY ${canonical_full_name}_PROCESSED) +# if(already_processed) +# return() +# endif() +# set_property(GLOBAL PROPERTY ${canonical_full_name}_PROCESSED YES) +# +# if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}/CMakeLists.txt) +# # Treat it as in-tree subproject. +# option(${canonical_full_name}_BUILD +# "Whether to build ${name} as part of ${project}" On) +# mark_as_advanced(${project}_${type}_${name}_BUILD) +# if(${canonical_full_name}_BUILD) +# add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir} ${add_llvm_external_dir}) +# endif() +# else() +# set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR +# "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" +# CACHE PATH "Path to ${name} source directory") +# set(${canonical_full_name}_BUILD_DEFAULT ON) +# if(NOT LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR OR NOT EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}) +# set(${canonical_full_name}_BUILD_DEFAULT OFF) +# endif() +# if("${LLVM_EXTERNAL_${nameUPPER}_BUILD}" STREQUAL "OFF") +# set(${canonical_full_name}_BUILD_DEFAULT OFF) +# endif() +# option(${canonical_full_name}_BUILD +# "Whether to build ${name} as part of LLVM" +# ${${canonical_full_name}_BUILD_DEFAULT}) +# if (${canonical_full_name}_BUILD) +# if(EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}) +# add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${add_llvm_external_dir}) +# elseif(NOT "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" STREQUAL "") +# message(WARNING "Nonexistent directory for ${name}: ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}") +# endif() +# endif() +# endif() +# endfunction() # Add external project that may want to be built as part of llvm such as Clang, # lld, and Polly. This adds two options. One for the source directory of the # project, which defaults to ${CMAKE_CURRENT_SOURCE_DIR}/${name}. Another to # enable or disable building it with everything else. # Additional parameter can be specified as the name of directory. -macro(add_llvm_external_project name) - add_llvm_subdirectory(LLVM TOOL ${name} ${ARGN}) -endmacro() - -macro(add_llvm_tool_subdirectory name) - add_llvm_external_project(${name}) -endmacro(add_llvm_tool_subdirectory) - -function(get_project_name_from_src_var var output) - string(REGEX MATCH "LLVM_EXTERNAL_(.*)_SOURCE_DIR" - MACHED_TOOL "${var}") - if(MACHED_TOOL) - set(${output} ${CMAKE_MATCH_1} PARENT_SCOPE) - else() - set(${output} PARENT_SCOPE) - endif() -endfunction() - -function(create_subdirectory_options project type) - file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") - foreach(dir ${sub-dirs}) - if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") - canonicalize_tool_name(${dir} name) - option(${project}_${type}_${name}_BUILD - "Whether to build ${name} as part of ${project}" On) - mark_as_advanced(${project}_${type}_${name}_BUILD) - endif() - endforeach() -endfunction(create_subdirectory_options) - -function(create_llvm_tool_options) - create_subdirectory_options(LLVM TOOL) -endfunction(create_llvm_tool_options) - -function(llvm_add_implicit_projects project) - set(list_of_implicit_subdirs "") - file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") - foreach(dir ${sub-dirs}) - if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") - canonicalize_tool_name(${dir} name) - if (${project}_TOOL_${name}_BUILD) - get_filename_component(fn "${dir}" NAME) - list(APPEND list_of_implicit_subdirs "${fn}") - endif() - endif() - endforeach() - - foreach(external_proj ${list_of_implicit_subdirs}) - add_llvm_subdirectory(${project} TOOL "${external_proj}" ${ARGN}) - endforeach() -endfunction(llvm_add_implicit_projects) - -function(add_llvm_implicit_projects) - llvm_add_implicit_projects(LLVM) -endfunction(add_llvm_implicit_projects) +# ROB: Macro isnt used anywhere +# macro(add_llvm_external_project name) +# add_llvm_subdirectory(LLVM TOOL ${name} ${ARGN}) +# endmacro() + +# ROB: Macro isn't used anywhere +# macro(add_llvm_tool_subdirectory name) +# add_llvm_external_project(${name}) +# endmacro(add_llvm_tool_subdirectory) + +# function(get_project_name_from_src_var var output) +# string(REGEX MATCH "LLVM_EXTERNAL_(.*)_SOURCE_DIR" +# MACHED_TOOL "${var}") +# if(MACHED_TOOL) +# set(${output} ${CMAKE_MATCH_1} PARENT_SCOPE) +# else() +# set(${output} PARENT_SCOPE) +# endif() +# endfunction() + +# function(create_subdirectory_options project type) +# file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") +# foreach(dir ${sub-dirs}) +# if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") +# canonicalize_tool_name(${dir} name) +# option(${project}_${type}_${name}_BUILD +# "Whether to build ${name} as part of ${project}" On) +# mark_as_advanced(${project}_${type}_${name}_BUILD) +# endif() +# endforeach() +# endfunction(create_subdirectory_options) + +# function(create_llvm_tool_options) +# create_subdirectory_options(LLVM TOOL) +# endfunction(create_llvm_tool_options) + +# function(llvm_add_implicit_projects project) +# set(list_of_implicit_subdirs "") +# file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") +# foreach(dir ${sub-dirs}) +# if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt") +# canonicalize_tool_name(${dir} name) +# if (${project}_TOOL_${name}_BUILD) +# get_filename_component(fn "${dir}" NAME) +# list(APPEND list_of_implicit_subdirs "${fn}") +# endif() +# endif() +# endforeach() +# +# foreach(external_proj ${list_of_implicit_subdirs}) +# add_llvm_subdirectory(${project} TOOL "${external_proj}" ${ARGN}) +# endforeach() +# endfunction(llvm_add_implicit_projects) +# +# function(add_llvm_implicit_projects) +# llvm_add_implicit_projects(LLVM) +# endfunction(add_llvm_implicit_projects) # Generic support for adding a unittest. -function(add_unittest test_suite test_name) - if( NOT LLVM_BUILD_TESTS ) - set(EXCLUDE_FROM_ALL ON) - endif() - - if (SUPPORTS_VARIADIC_MACROS_FLAG) - list(APPEND LLVM_COMPILE_FLAGS "-Wno-variadic-macros") - endif () - # Some parts of gtest rely on this GNU extension, don't warn on it. - if(SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG) - list(APPEND LLVM_COMPILE_FLAGS "-Wno-gnu-zero-variadic-macro-arguments") - endif() - - set(LLVM_REQUIRES_RTTI OFF) - - list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream - add_llvm_executable(${test_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) - set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) - set_output_directory(${test_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir}) - # libpthreads overrides some standard library symbols, so main - # executable must be linked with it in order to provide consistent - # API for all shared libaries loaded by this executable. - target_link_libraries(${test_name} PRIVATE gtest_main gtest ${LLVM_PTHREAD_LIB}) - - add_dependencies(${test_suite} ${test_name}) - get_target_property(test_suite_folder ${test_suite} FOLDER) - if (test_suite_folder) - set_property(TARGET ${test_name} PROPERTY FOLDER "${test_suite_folder}") - endif () -endfunction() +# function(add_unittest test_suite test_name) +# # ROB: LLVM_BUILD_TESTS is OFF +# # if( NOT LLVM_BUILD_TESTS ) +# set(EXCLUDE_FROM_ALL ON) +# # endif() +# +# if (SUPPORTS_VARIADIC_MACROS_FLAG) +# list(APPEND LLVM_COMPILE_FLAGS "-Wno-variadic-macros") +# endif () +# # Some parts of gtest rely on this GNU extension, don't warn on it. +# if(SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG) +# list(APPEND LLVM_COMPILE_FLAGS "-Wno-gnu-zero-variadic-macro-arguments") +# endif() +# +# set(LLVM_REQUIRES_RTTI OFF) +# +# list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream +# add_llvm_executable(${test_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) +# set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) +# set_output_directory(${test_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir}) +# # libpthreads overrides some standard library symbols, so main +# # executable must be linked with it in order to provide consistent +# # API for all shared libaries loaded by this executable. +# target_link_libraries(${test_name} PRIVATE gtest_main gtest ${LLVM_PTHREAD_LIB}) +# +# add_dependencies(${test_suite} ${test_name}) +# get_target_property(test_suite_folder ${test_suite} FOLDER) +# if (test_suite_folder) +# set_property(TARGET ${test_name} PROPERTY FOLDER "${test_suite_folder}") +# endif () +# endfunction() # Use for test binaries that call llvm::getInputFileDirectory(). Use of this # is discouraged. -function(add_unittest_with_input_files test_suite test_name) - set(LLVM_UNITTEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - configure_file( - ${LLVM_MAIN_SRC_DIR}/unittests/unittest.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/llvm.srcdir.txt) - - add_unittest(${test_suite} ${test_name} ${ARGN}) -endfunction() +# function(add_unittest_with_input_files test_suite test_name) +# set(LLVM_UNITTEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +# configure_file( +# ${LLVM_MAIN_SRC_DIR}/unittests/unittest.cfg.in +# ${CMAKE_CURRENT_BINARY_DIR}/llvm.srcdir.txt) +# +# add_unittest(${test_suite} ${test_name} ${ARGN}) +# endfunction() # Generic support for adding a benchmark. -function(add_benchmark benchmark_name) - if( NOT LLVM_BUILD_BENCHMARKS ) - set(EXCLUDE_FROM_ALL ON) - endif() - - add_llvm_executable(${benchmark_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) - set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) - set_output_directory(${benchmark_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir}) - set_property(TARGET ${benchmark_name} PROPERTY FOLDER "Utils") - target_link_libraries(${benchmark_name} PRIVATE benchmark) -endfunction() +# function(add_benchmark benchmark_name) +# # if( NOT LLVM_BUILD_BENCHMARKS ) +# # ROB: LLVM_BUILD_BENCHMARKS is OFF +# set(EXCLUDE_FROM_ALL ON) +# # endif() +# +# add_llvm_executable(${benchmark_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) +# set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) +# set_output_directory(${benchmark_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir}) +# set_property(TARGET ${benchmark_name} PROPERTY FOLDER "Utils") +# target_link_libraries(${benchmark_name} PRIVATE benchmark) +# endfunction() +# ROB: function add_benchmark isn't used anywhere # This function canonicalize the CMake variables passed by names # from CMake boolean to 0/1 suitable for passing into Python or C++, # in place. -function(llvm_canonicalize_cmake_booleans) - foreach(var ${ARGN}) - if(${var}) - set(${var} 1 PARENT_SCOPE) - else() - set(${var} 0 PARENT_SCOPE) - endif() - endforeach() -endfunction(llvm_canonicalize_cmake_booleans) - -macro(set_llvm_build_mode) - # Configuration-time: See Unit/lit.site.cfg.in - if (CMAKE_CFG_INTDIR STREQUAL ".") - set(LLVM_BUILD_MODE ".") - else () - set(LLVM_BUILD_MODE "%(build_mode)s") - endif () -endmacro() - +# function(llvm_canonicalize_cmake_booleans) +# foreach(var ${ARGN}) +# if(${var}) +# set(${var} 1 PARENT_SCOPE) +# else() +# set(${var} 0 PARENT_SCOPE) +# endif() +# endforeach() +# endfunction(llvm_canonicalize_cmake_booleans) + +# macro(set_llvm_build_mode) +# # Configuration-time: See Unit/lit.site.cfg.in +# if (CMAKE_CFG_INTDIR STREQUAL ".") +# set(LLVM_BUILD_MODE ".") +# else () +# set(LLVM_BUILD_MODE "%(build_mode)s") +# endif () +# endmacro() + +# ROB: Only caller is unused # Takes a list of path names in pathlist and a base directory, and returns # a list of paths relative to the base directory in out_pathlist. # Paths that are on a different drive than the basedir (on Windows) or that # contain symlinks are returned absolute. # Use with LLVM_LIT_PATH_FUNCTION below. -function(make_paths_relative out_pathlist basedir pathlist) - # Passing ARG_PATH_VALUES as-is to execute_process() makes cmake strip - # empty list entries. So escape the ;s in the list and do the splitting - # ourselves. cmake has no relpath function, so use Python for that. - string(REPLACE ";" "\\;" pathlist_escaped "${pathlist}") - execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "\n -import os, sys\n -base = sys.argv[1] -def haslink(p):\n - if not p or p == os.path.dirname(p): return False\n - return os.path.islink(p) or haslink(os.path.dirname(p))\n -def relpath(p):\n - if not p: return ''\n - if os.path.splitdrive(p)[0] != os.path.splitdrive(base)[0]: return p\n - if haslink(p) or haslink(base): return p\n - return os.path.relpath(p, base)\n -if len(sys.argv) < 3: sys.exit(0)\n -sys.stdout.write(';'.join(relpath(p) for p in sys.argv[2].split(';')))" - ${basedir} - ${pathlist_escaped} - OUTPUT_VARIABLE pathlist_relative - ERROR_VARIABLE error - RESULT_VARIABLE result) - if (NOT result EQUAL 0) - message(FATAL_ERROR "make_paths_relative() failed due to error '${result}', with stderr\n${error}") - endif() - set(${out_pathlist} "${pathlist_relative}" PARENT_SCOPE) -endfunction() +# function(make_paths_relative out_pathlist basedir pathlist) +# # Passing ARG_PATH_VALUES as-is to execute_process() makes cmake strip +# # empty list entries. So escape the ;s in the list and do the splitting +# # ourselves. cmake has no relpath function, so use Python for that. +# string(REPLACE ";" "\\;" pathlist_escaped "${pathlist}") +# execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "\n +# import os, sys\n +# base = sys.argv[1] +# def haslink(p):\n +# if not p or p == os.path.dirname(p): return False\n +# return os.path.islink(p) or haslink(os.path.dirname(p))\n +# def relpath(p):\n +# if not p: return ''\n +# if os.path.splitdrive(p)[0] != os.path.splitdrive(base)[0]: return p\n +# if haslink(p) or haslink(base): return p\n +# return os.path.relpath(p, base)\n +# if len(sys.argv) < 3: sys.exit(0)\n +# sys.stdout.write(';'.join(relpath(p) for p in sys.argv[2].split(';')))" +# ${basedir} +# ${pathlist_escaped} +# OUTPUT_VARIABLE pathlist_relative +# ERROR_VARIABLE error +# RESULT_VARIABLE result) +# if (NOT result EQUAL 0) +# message(FATAL_ERROR "make_paths_relative() failed due to error '${result}', with stderr\n${error}") +# endif() +# set(${out_pathlist} "${pathlist_relative}" PARENT_SCOPE) +# endfunction() # Converts a file that's relative to the current python file to an absolute # path. Since this uses __file__, it has to be emitted into python files that # use it and can't be in a lit module. Use with make_paths_relative(). -string(CONCAT LLVM_LIT_PATH_FUNCTION - "# Allow generated file to be relocatable.\n" - "def path(p):\n" - " if not p: return ''\n" - " return os.path.join(os.path.dirname(os.path.abspath(__file__)), p)\n" - ) +# string(CONCAT LLVM_LIT_PATH_FUNCTION +# "# Allow generated file to be relocatable.\n" +# "def path(p):\n" +# " if not p: return ''\n" +# " return os.path.join(os.path.dirname(os.path.abspath(__file__)), p)\n" +# ) +# ROB: only caller isn't called # This function provides an automatic way to 'configure'-like generate a file # based on a set of common and custom variables, specifically targeting the # variables needed for the 'lit.site.cfg' files. This function bundles the @@ -1568,274 +1593,276 @@ string(CONCAT LLVM_LIT_PATH_FUNCTION # lit.cfg.py file is in, and the `path()` function converts the relative # path back to absolute form. This makes it possible to move a build directory # containing lit.cfg.py files from one machine to another. -function(configure_lit_site_cfg site_in site_out) - cmake_parse_arguments(ARG "" "" "MAIN_CONFIG;OUTPUT_MAPPING;PATHS" ${ARGN}) - - if ("${ARG_MAIN_CONFIG}" STREQUAL "") - get_filename_component(INPUT_DIR ${site_in} DIRECTORY) - set(ARG_MAIN_CONFIG "${INPUT_DIR}/lit.cfg") - endif() - if ("${ARG_OUTPUT_MAPPING}" STREQUAL "") - set(ARG_OUTPUT_MAPPING "${site_out}") - endif() - - foreach(c ${LLVM_TARGETS_TO_BUILD}) - set(TARGETS_BUILT "${TARGETS_BUILT} ${c}") - endforeach(c) - set(TARGETS_TO_BUILD ${TARGETS_BUILT}) - - set(SHLIBEXT "${LTDL_SHLIB_EXT}") - - set_llvm_build_mode() - - # They below might not be the build tree but provided binary tree. - set(LLVM_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}) - set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR}) - string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}") - string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLVM_LIBS_DIR "${LLVM_LIBRARY_DIR}") - - # SHLIBDIR points the build tree. - string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" SHLIBDIR "${LLVM_SHLIB_OUTPUT_INTDIR}") - - # FIXME: "ENABLE_SHARED" doesn't make sense, since it is used just for - # plugins. We may rename it. - if(LLVM_ENABLE_PLUGINS) - set(ENABLE_SHARED "1") - else() - set(ENABLE_SHARED "0") - endif() - - if(LLVM_ENABLE_ASSERTIONS AND NOT MSVC_IDE) - set(ENABLE_ASSERTIONS "1") - else() - set(ENABLE_ASSERTIONS "0") - endif() - - set(HOST_OS ${CMAKE_SYSTEM_NAME}) - set(HOST_ARCH ${CMAKE_SYSTEM_PROCESSOR}) - - set(HOST_CC "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") - set(HOST_CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") - set(HOST_LDFLAGS "${CMAKE_EXE_LINKER_FLAGS}") - - string(CONCAT LIT_SITE_CFG_IN_HEADER - "# Autogenerated from ${site_in}\n# Do not edit!\n\n" - "${LLVM_LIT_PATH_FUNCTION}" - ) - - # Override config_target_triple (and the env) - if(LLVM_TARGET_TRIPLE_ENV) - # This is expanded into the heading. - string(CONCAT LIT_SITE_CFG_IN_HEADER "${LIT_SITE_CFG_IN_HEADER}" - "import os\n" - "target_env = \"${LLVM_TARGET_TRIPLE_ENV}\"\n" - "config.target_triple = config.environment[target_env] = os.environ.get(target_env, \"${TARGET_TRIPLE}\")\n" - ) - - # This is expanded to; config.target_triple = ""+config.target_triple+"" - set(TARGET_TRIPLE "\"+config.target_triple+\"") - endif() - - if (ARG_PATHS) - # Walk ARG_PATHS and collect the current value of the variables in there. - # list(APPEND) ignores empty elements exactly if the list is empty, - # so start the list with a dummy element and drop it, to make sure that - # even empty values make it into the values list. - set(ARG_PATH_VALUES "dummy") - foreach(path ${ARG_PATHS}) - list(APPEND ARG_PATH_VALUES "${${path}}") - endforeach() - list(REMOVE_AT ARG_PATH_VALUES 0) - - get_filename_component(OUTPUT_DIR ${site_out} DIRECTORY) - make_paths_relative( - ARG_PATH_VALUES_RELATIVE "${OUTPUT_DIR}" "${ARG_PATH_VALUES}") - - list(LENGTH ARG_PATHS len_paths) - list(LENGTH ARG_PATH_VALUES len_path_values) - list(LENGTH ARG_PATH_VALUES_RELATIVE len_path_value_rels) - if ((NOT ${len_paths} EQUAL ${len_path_values}) OR - (NOT ${len_paths} EQUAL ${len_path_value_rels})) - message(SEND_ERROR "PATHS lengths got confused") - endif() - - # Transform variables mentioned in ARG_PATHS to relative paths for - # the configure_file() call. Variables are copied to subscopeds by cmake, - # so this only modifies the local copy of the variables. - math(EXPR arg_path_limit "${len_paths} - 1") - foreach(i RANGE ${arg_path_limit}) - list(GET ARG_PATHS ${i} val1) - list(GET ARG_PATH_VALUES_RELATIVE ${i} val2) - set(${val1} ${val2}) - endforeach() - endif() - - configure_file(${site_in} ${site_out} @ONLY) - - if (EXISTS "${ARG_MAIN_CONFIG}") - # Remember main config / generated site config for llvm-lit.in. - get_property(LLVM_LIT_CONFIG_FILES GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES) - list(APPEND LLVM_LIT_CONFIG_FILES "${ARG_MAIN_CONFIG}" "${site_out}") - set_property(GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES ${LLVM_LIT_CONFIG_FILES}) - endif() -endfunction() - -function(dump_all_cmake_variables) - get_cmake_property(_variableNames VARIABLES) - foreach (_variableName ${_variableNames}) - message(STATUS "${_variableName}=${${_variableName}}") - endforeach() -endfunction() - -function(get_llvm_lit_path base_dir file_name) - cmake_parse_arguments(ARG "ALLOW_EXTERNAL" "" "" ${ARGN}) - - if (ARG_ALLOW_EXTERNAL) - set (LLVM_EXTERNAL_LIT "" CACHE STRING "Command used to spawn lit") - if ("${LLVM_EXTERNAL_LIT}" STREQUAL "") - set(LLVM_EXTERNAL_LIT "${LLVM_DEFAULT_EXTERNAL_LIT}") - endif() - - if (NOT "${LLVM_EXTERNAL_LIT}" STREQUAL "") - if (EXISTS ${LLVM_EXTERNAL_LIT}) - get_filename_component(LIT_FILE_NAME ${LLVM_EXTERNAL_LIT} NAME) - get_filename_component(LIT_BASE_DIR ${LLVM_EXTERNAL_LIT} DIRECTORY) - set(${file_name} ${LIT_FILE_NAME} PARENT_SCOPE) - set(${base_dir} ${LIT_BASE_DIR} PARENT_SCOPE) - return() - elseif (NOT DEFINED CACHE{LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE}) - message(WARNING "LLVM_EXTERNAL_LIT set to ${LLVM_EXTERNAL_LIT}, but the path does not exist.") - set(LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE YES CACHE INTERNAL "") - endif() - endif() - endif() - - set(lit_file_name "llvm-lit") - if (CMAKE_HOST_WIN32 AND NOT CYGWIN) - # llvm-lit needs suffix.py for multiprocess to find a main module. - set(lit_file_name "${lit_file_name}.py") - endif () - set(${file_name} ${lit_file_name} PARENT_SCOPE) - - get_property(LLVM_LIT_BASE_DIR GLOBAL PROPERTY LLVM_LIT_BASE_DIR) - if (NOT "${LLVM_LIT_BASE_DIR}" STREQUAL "") - set(${base_dir} ${LLVM_LIT_BASE_DIR} PARENT_SCOPE) - endif() - - # Allow individual projects to provide an override - if (NOT "${LLVM_LIT_OUTPUT_DIR}" STREQUAL "") - set(LLVM_LIT_BASE_DIR ${LLVM_LIT_OUTPUT_DIR}) - elseif(NOT "${LLVM_RUNTIME_OUTPUT_INTDIR}" STREQUAL "") - set(LLVM_LIT_BASE_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) - else() - set(LLVM_LIT_BASE_DIR "") - endif() - - # Cache this so we don't have to do it again and have subsequent calls - # potentially disagree on the value. - set_property(GLOBAL PROPERTY LLVM_LIT_BASE_DIR ${LLVM_LIT_BASE_DIR}) - set(${base_dir} ${LLVM_LIT_BASE_DIR} PARENT_SCOPE) -endfunction() +# function(configure_lit_site_cfg site_in site_out) +# cmake_parse_arguments(ARG "" "" "MAIN_CONFIG;OUTPUT_MAPPING;PATHS" ${ARGN}) +# +# if ("${ARG_MAIN_CONFIG}" STREQUAL "") +# get_filename_component(INPUT_DIR ${site_in} DIRECTORY) +# set(ARG_MAIN_CONFIG "${INPUT_DIR}/lit.cfg") +# endif() +# if ("${ARG_OUTPUT_MAPPING}" STREQUAL "") +# set(ARG_OUTPUT_MAPPING "${site_out}") +# endif() +# +# foreach(c ${LLVM_TARGETS_TO_BUILD}) +# set(TARGETS_BUILT "${TARGETS_BUILT} ${c}") +# endforeach(c) +# set(TARGETS_TO_BUILD ${TARGETS_BUILT}) +# +# set(SHLIBEXT "${LTDL_SHLIB_EXT}") +# +# set_llvm_build_mode() +# +# # They below might not be the build tree but provided binary tree. +# set(LLVM_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}) +# set(LLVM_BINARY_DIR ${LLVM_BINARY_DIR}) +# string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}") +# string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} LLVM_LIBS_DIR "${LLVM_LIBRARY_DIR}") +# +# # SHLIBDIR points the build tree. +# string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" SHLIBDIR "${LLVM_SHLIB_OUTPUT_INTDIR}") +# +# # FIXME: "ENABLE_SHARED" doesn't make sense, since it is used just for +# # plugins. We may rename it. +# if(LLVM_ENABLE_PLUGINS) +# set(ENABLE_SHARED "1") +# else() +# set(ENABLE_SHARED "0") +# endif() +# +# if(LLVM_ENABLE_ASSERTIONS AND NOT MSVC_IDE) +# set(ENABLE_ASSERTIONS "1") +# else() +# set(ENABLE_ASSERTIONS "0") +# endif() +# +# set(HOST_OS ${CMAKE_SYSTEM_NAME}) +# set(HOST_ARCH ${CMAKE_SYSTEM_PROCESSOR}) +# +# set(HOST_CC "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") +# set(HOST_CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") +# set(HOST_LDFLAGS "${CMAKE_EXE_LINKER_FLAGS}") +# +# string(CONCAT LIT_SITE_CFG_IN_HEADER +# "# Autogenerated from ${site_in}\n# Do not edit!\n\n" +# "${LLVM_LIT_PATH_FUNCTION}" +# ) +# +# # Override config_target_triple (and the env) +# if(LLVM_TARGET_TRIPLE_ENV) +# # This is expanded into the heading. +# string(CONCAT LIT_SITE_CFG_IN_HEADER "${LIT_SITE_CFG_IN_HEADER}" +# "import os\n" +# "target_env = \"${LLVM_TARGET_TRIPLE_ENV}\"\n" +# "config.target_triple = config.environment[target_env] = os.environ.get(target_env, \"${TARGET_TRIPLE}\")\n" +# ) +# +# # This is expanded to; config.target_triple = ""+config.target_triple+"" +# set(TARGET_TRIPLE "\"+config.target_triple+\"") +# endif() +# +# if (ARG_PATHS) +# # Walk ARG_PATHS and collect the current value of the variables in there. +# # list(APPEND) ignores empty elements exactly if the list is empty, +# # so start the list with a dummy element and drop it, to make sure that +# # even empty values make it into the values list. +# set(ARG_PATH_VALUES "dummy") +# foreach(path ${ARG_PATHS}) +# list(APPEND ARG_PATH_VALUES "${${path}}") +# endforeach() +# list(REMOVE_AT ARG_PATH_VALUES 0) +# +# get_filename_component(OUTPUT_DIR ${site_out} DIRECTORY) +# make_paths_relative( +# ARG_PATH_VALUES_RELATIVE "${OUTPUT_DIR}" "${ARG_PATH_VALUES}") +# +# list(LENGTH ARG_PATHS len_paths) +# list(LENGTH ARG_PATH_VALUES len_path_values) +# list(LENGTH ARG_PATH_VALUES_RELATIVE len_path_value_rels) +# if ((NOT ${len_paths} EQUAL ${len_path_values}) OR +# (NOT ${len_paths} EQUAL ${len_path_value_rels})) +# message(SEND_ERROR "PATHS lengths got confused") +# endif() +# +# # Transform variables mentioned in ARG_PATHS to relative paths for +# # the configure_file() call. Variables are copied to subscopeds by cmake, +# # so this only modifies the local copy of the variables. +# math(EXPR arg_path_limit "${len_paths} - 1") +# foreach(i RANGE ${arg_path_limit}) +# list(GET ARG_PATHS ${i} val1) +# list(GET ARG_PATH_VALUES_RELATIVE ${i} val2) +# set(${val1} ${val2}) +# endforeach() +# endif() +# +# configure_file(${site_in} ${site_out} @ONLY) +# +# if (EXISTS "${ARG_MAIN_CONFIG}") +# # Remember main config / generated site config for llvm-lit.in. +# get_property(LLVM_LIT_CONFIG_FILES GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES) +# list(APPEND LLVM_LIT_CONFIG_FILES "${ARG_MAIN_CONFIG}" "${site_out}") +# set_property(GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES ${LLVM_LIT_CONFIG_FILES}) +# endif() +# endfunction() + +# function(dump_all_cmake_variables) +# get_cmake_property(_variableNames VARIABLES) +# foreach (_variableName ${_variableNames}) +# message(STATUS "${_variableName}=${${_variableName}}") +# endforeach() +# endfunction() + +# function(get_llvm_lit_path base_dir file_name) +# cmake_parse_arguments(ARG "ALLOW_EXTERNAL" "" "" ${ARGN}) +# +# if (ARG_ALLOW_EXTERNAL) +# set (LLVM_EXTERNAL_LIT "" CACHE STRING "Command used to spawn lit") +# if ("${LLVM_EXTERNAL_LIT}" STREQUAL "") +# set(LLVM_EXTERNAL_LIT "${LLVM_DEFAULT_EXTERNAL_LIT}") +# endif() +# +# if (NOT "${LLVM_EXTERNAL_LIT}" STREQUAL "") +# if (EXISTS ${LLVM_EXTERNAL_LIT}) +# get_filename_component(LIT_FILE_NAME ${LLVM_EXTERNAL_LIT} NAME) +# get_filename_component(LIT_BASE_DIR ${LLVM_EXTERNAL_LIT} DIRECTORY) +# set(${file_name} ${LIT_FILE_NAME} PARENT_SCOPE) +# set(${base_dir} ${LIT_BASE_DIR} PARENT_SCOPE) +# return() +# elseif (NOT DEFINED CACHE{LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE}) +# message(WARNING "LLVM_EXTERNAL_LIT set to ${LLVM_EXTERNAL_LIT}, but the path does not exist.") +# set(LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE YES CACHE INTERNAL "") +# endif() +# endif() +# endif() +# +# set(lit_file_name "llvm-lit") +# if (CMAKE_HOST_WIN32 AND NOT CYGWIN) +# # llvm-lit needs suffix.py for multiprocess to find a main module. +# set(lit_file_name "${lit_file_name}.py") +# endif () +# set(${file_name} ${lit_file_name} PARENT_SCOPE) +# +# get_property(LLVM_LIT_BASE_DIR GLOBAL PROPERTY LLVM_LIT_BASE_DIR) +# if (NOT "${LLVM_LIT_BASE_DIR}" STREQUAL "") +# set(${base_dir} ${LLVM_LIT_BASE_DIR} PARENT_SCOPE) +# endif() +# +# # Allow individual projects to provide an override +# if (NOT "${LLVM_LIT_OUTPUT_DIR}" STREQUAL "") +# set(LLVM_LIT_BASE_DIR ${LLVM_LIT_OUTPUT_DIR}) +# elseif(NOT "${LLVM_RUNTIME_OUTPUT_INTDIR}" STREQUAL "") +# set(LLVM_LIT_BASE_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR}) +# else() +# set(LLVM_LIT_BASE_DIR "") +# endif() +# +# # Cache this so we don't have to do it again and have subsequent calls +# # potentially disagree on the value. +# set_property(GLOBAL PROPERTY LLVM_LIT_BASE_DIR ${LLVM_LIT_BASE_DIR}) +# set(${base_dir} ${LLVM_LIT_BASE_DIR} PARENT_SCOPE) +# endfunction() +# ROB: Function unused # A raw function to create a lit target. This is used to implement the testuite # management functions. -function(add_lit_target target comment) - cmake_parse_arguments(ARG "" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) - set(LIT_ARGS "${ARG_ARGS} ${LLVM_LIT_ARGS}") - separate_arguments(LIT_ARGS) - if (NOT CMAKE_CFG_INTDIR STREQUAL ".") - list(APPEND LIT_ARGS --param build_mode=${CMAKE_CFG_INTDIR}) - endif () - - # Get the path to the lit to *run* tests with. This can be overriden by - # the user by specifying -DLLVM_EXTERNAL_LIT= - get_llvm_lit_path( - lit_base_dir - lit_file_name - ALLOW_EXTERNAL - ) - - set(LIT_COMMAND "${Python3_EXECUTABLE};${lit_base_dir}/${lit_file_name}") - list(APPEND LIT_COMMAND ${LIT_ARGS}) - foreach(param ${ARG_PARAMS}) - list(APPEND LIT_COMMAND --param ${param}) - endforeach() - if (ARG_UNPARSED_ARGUMENTS) - add_custom_target(${target} - COMMAND ${LIT_COMMAND} ${ARG_UNPARSED_ARGUMENTS} - COMMENT "${comment}" - USES_TERMINAL - ) - else() - add_custom_target(${target} - COMMAND ${CMAKE_COMMAND} -E echo "${target} does nothing, no tools built.") - message(STATUS "${target} does nothing.") - endif() - - if (ARG_DEPENDS) - add_dependencies(${target} ${ARG_DEPENDS}) - endif() - - # Tests should be excluded from "Build Solution". - set_target_properties(${target} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD ON) -endfunction() +# function(add_lit_target target comment) +# cmake_parse_arguments(ARG "" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) +# set(LIT_ARGS "${ARG_ARGS} ${LLVM_LIT_ARGS}") +# separate_arguments(LIT_ARGS) +# if (NOT CMAKE_CFG_INTDIR STREQUAL ".") +# list(APPEND LIT_ARGS --param build_mode=${CMAKE_CFG_INTDIR}) +# endif () +# +# # Get the path to the lit to *run* tests with. This can be overriden by +# # the user by specifying -DLLVM_EXTERNAL_LIT= +# get_llvm_lit_path( +# lit_base_dir +# lit_file_name +# ALLOW_EXTERNAL +# ) +# +# set(LIT_COMMAND "${Python3_EXECUTABLE};${lit_base_dir}/${lit_file_name}") +# list(APPEND LIT_COMMAND ${LIT_ARGS}) +# foreach(param ${ARG_PARAMS}) +# list(APPEND LIT_COMMAND --param ${param}) +# endforeach() +# if (ARG_UNPARSED_ARGUMENTS) +# add_custom_target(${target} +# COMMAND ${LIT_COMMAND} ${ARG_UNPARSED_ARGUMENTS} +# COMMENT "${comment}" +# USES_TERMINAL +# ) +# else() +# add_custom_target(${target} +# COMMAND ${CMAKE_COMMAND} -E echo "${target} does nothing, no tools built.") +# message(STATUS "${target} does nothing.") +# endif() +# +# if (ARG_DEPENDS) +# add_dependencies(${target} ${ARG_DEPENDS}) +# endif() +# +# # Tests should be excluded from "Build Solution". +# set_target_properties(${target} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD ON) +# endfunction() # A function to add a set of lit test suites to be driven through 'check-*' targets. -function(add_lit_testsuite target comment) - cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) - - # EXCLUDE_FROM_ALL excludes the test ${target} out of check-all. - if(NOT ARG_EXCLUDE_FROM_CHECK_ALL) - # Register the testsuites, params and depends for the global check rule. - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_PARAMS ${ARG_PARAMS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_DEPENDS ${ARG_DEPENDS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_EXTRA_ARGS ${ARG_ARGS}) - endif() - - # Produce a specific suffixed check rule. - add_lit_target(${target} ${comment} - ${ARG_UNPARSED_ARGUMENTS} - PARAMS ${ARG_PARAMS} - DEPENDS ${ARG_DEPENDS} - ARGS ${ARG_ARGS} - ) -endfunction() - -function(add_lit_testsuites project directory) - if (NOT LLVM_ENABLE_IDE) - cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) - - # Search recursively for test directories by assuming anything not - # in a directory called Inputs contains tests. - file(GLOB_RECURSE to_process LIST_DIRECTORIES true ${directory}/*) - foreach(lit_suite ${to_process}) - if(NOT IS_DIRECTORY ${lit_suite}) - continue() - endif() - string(FIND ${lit_suite} Inputs is_inputs) - string(FIND ${lit_suite} Output is_output) - if (NOT (is_inputs EQUAL -1 AND is_output EQUAL -1)) - continue() - endif() - - # Create a check- target for the directory. - string(REPLACE ${directory} "" name_slash ${lit_suite}) - if (name_slash) - string(REPLACE "/" "-" name_slash ${name_slash}) - string(REPLACE "\\" "-" name_dashes ${name_slash}) - string(TOLOWER "${project}${name_dashes}" name_var) - add_lit_target("check-${name_var}" "Running lit suite ${lit_suite}" - ${lit_suite} - ${EXCLUDE_FROM_CHECK_ALL} - PARAMS ${ARG_PARAMS} - DEPENDS ${ARG_DEPENDS} - ARGS ${ARG_ARGS} - ) - endif() - endforeach() - endif() -endfunction() +# function(add_lit_testsuite target comment) +# cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) +# +# # EXCLUDE_FROM_ALL excludes the test ${target} out of check-all. +# if(NOT ARG_EXCLUDE_FROM_CHECK_ALL) +# # Register the testsuites, params and depends for the global check rule. +# set_property(GLOBAL APPEND PROPERTY LLVM_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS}) +# set_property(GLOBAL APPEND PROPERTY LLVM_LIT_PARAMS ${ARG_PARAMS}) +# set_property(GLOBAL APPEND PROPERTY LLVM_LIT_DEPENDS ${ARG_DEPENDS}) +# set_property(GLOBAL APPEND PROPERTY LLVM_LIT_EXTRA_ARGS ${ARG_ARGS}) +# endif() +# +# # Produce a specific suffixed check rule. +# add_lit_target(${target} ${comment} +# ${ARG_UNPARSED_ARGUMENTS} +# PARAMS ${ARG_PARAMS} +# DEPENDS ${ARG_DEPENDS} +# ARGS ${ARG_ARGS} +# ) +# endfunction() + +# ROB: Function isn't used anywhere +# function(add_lit_testsuites project directory) +# if (NOT LLVM_ENABLE_IDE) +# cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) +# +# # Search recursively for test directories by assuming anything not +# # in a directory called Inputs contains tests. +# file(GLOB_RECURSE to_process LIST_DIRECTORIES true ${directory}/*) +# foreach(lit_suite ${to_process}) +# if(NOT IS_DIRECTORY ${lit_suite}) +# continue() +# endif() +# string(FIND ${lit_suite} Inputs is_inputs) +# string(FIND ${lit_suite} Output is_output) +# if (NOT (is_inputs EQUAL -1 AND is_output EQUAL -1)) +# continue() +# endif() +# +# # Create a check- target for the directory. +# string(REPLACE ${directory} "" name_slash ${lit_suite}) +# if (name_slash) +# string(REPLACE "/" "-" name_slash ${name_slash}) +# string(REPLACE "\\" "-" name_dashes ${name_slash}) +# string(TOLOWER "${project}${name_dashes}" name_var) +# add_lit_target("check-${name_var}" "Running lit suite ${lit_suite}" +# ${lit_suite} +# ${EXCLUDE_FROM_CHECK_ALL} +# PARAMS ${ARG_PARAMS} +# DEPENDS ${ARG_DEPENDS} +# ARGS ${ARG_ARGS} +# ) +# endif() +# endforeach() +# endif() +# endfunction() function(llvm_install_library_symlink name dest type) cmake_parse_arguments(ARG "ALWAYS_GENERATE" "COMPONENT" "" ${ARGN}) @@ -1855,9 +1882,9 @@ function(llvm_install_library_symlink name dest type) set(full_dest ${CMAKE_${type}_LIBRARY_PREFIX}${dest}${CMAKE_${type}_LIBRARY_SUFFIX}) set(output_dir lib${LLVM_LIBDIR_SUFFIX}) - if(WIN32 AND "${type}" STREQUAL "SHARED") - set(output_dir bin) - endif() + # if(WIN32 AND "${type}" STREQUAL "SHARED") + # set(output_dir bin) + # endif() install(SCRIPT ${INSTALL_SYMLINK} CODE "install_symlink(${full_name} ${full_dest} ${output_dir})" @@ -1871,221 +1898,226 @@ function(llvm_install_library_symlink name dest type) endif() endfunction() -function(llvm_install_symlink name dest) - cmake_parse_arguments(ARG "ALWAYS_GENERATE" "COMPONENT" "" ${ARGN}) - foreach(path ${CMAKE_MODULE_PATH}) - if(EXISTS ${path}/LLVMInstallSymlink.cmake) - set(INSTALL_SYMLINK ${path}/LLVMInstallSymlink.cmake) - break() - endif() - endforeach() - - if(ARG_COMPONENT) - set(component ${ARG_COMPONENT}) - else() - if(ARG_ALWAYS_GENERATE) - set(component ${dest}) - else() - set(component ${name}) - endif() - endif() - - set(full_name ${name}${CMAKE_EXECUTABLE_SUFFIX}) - set(full_dest ${dest}${CMAKE_EXECUTABLE_SUFFIX}) - - install(SCRIPT ${INSTALL_SYMLINK} - CODE "install_symlink(${full_name} ${full_dest} ${LLVM_TOOLS_INSTALL_DIR})" - COMPONENT ${component}) - - if (NOT LLVM_ENABLE_IDE AND NOT ARG_ALWAYS_GENERATE) - add_llvm_install_targets(install-${name} - DEPENDS ${name} ${dest} - COMPONENT ${name} - SYMLINK ${dest}) - endif() -endfunction() - -function(add_llvm_tool_symlink link_name target) - cmake_parse_arguments(ARG "ALWAYS_GENERATE" "OUTPUT_DIR" "" ${ARGN}) - set(dest_binary "$") - - # This got a bit gross... For multi-configuration generators the target - # properties return the resolved value of the string, not the build system - # expression. To reconstruct the platform-agnostic path we have to do some - # magic. First we grab one of the types, and a type-specific path. Then from - # the type-specific path we find the last occurrence of the type in the path, - # and replace it with CMAKE_CFG_INTDIR. This allows the build step to be type - # agnostic again. - if(NOT ARG_OUTPUT_DIR) - # If you're not overriding the OUTPUT_DIR, we can make the link relative in - # the same directory. - if(CMAKE_HOST_UNIX) - set(dest_binary "$") - endif() - if(CMAKE_CONFIGURATION_TYPES) - list(GET CMAKE_CONFIGURATION_TYPES 0 first_type) - string(TOUPPER ${first_type} first_type_upper) - set(first_type_suffix _${first_type_upper}) - endif() - get_target_property(target_type ${target} TYPE) - if(${target_type} STREQUAL "STATIC_LIBRARY") - get_target_property(ARG_OUTPUT_DIR ${target} ARCHIVE_OUTPUT_DIRECTORY${first_type_suffix}) - elseif(UNIX AND ${target_type} STREQUAL "SHARED_LIBRARY") - get_target_property(ARG_OUTPUT_DIR ${target} LIBRARY_OUTPUT_DIRECTORY${first_type_suffix}) - else() - get_target_property(ARG_OUTPUT_DIR ${target} RUNTIME_OUTPUT_DIRECTORY${first_type_suffix}) - endif() - if(CMAKE_CONFIGURATION_TYPES) - string(FIND "${ARG_OUTPUT_DIR}" "/${first_type}/" type_start REVERSE) - string(SUBSTRING "${ARG_OUTPUT_DIR}" 0 ${type_start} path_prefix) - string(SUBSTRING "${ARG_OUTPUT_DIR}" ${type_start} -1 path_suffix) - string(REPLACE "/${first_type}/" "/${CMAKE_CFG_INTDIR}/" - path_suffix ${path_suffix}) - set(ARG_OUTPUT_DIR ${path_prefix}${path_suffix}) - endif() - endif() - - if(CMAKE_HOST_UNIX) - set(LLVM_LINK_OR_COPY create_symlink) - else() - set(LLVM_LINK_OR_COPY copy) - endif() - - set(output_path "${ARG_OUTPUT_DIR}/${link_name}${CMAKE_EXECUTABLE_SUFFIX}") - - set(target_name ${link_name}) - if(TARGET ${link_name}) - set(target_name ${link_name}-link) - endif() - - - if(ARG_ALWAYS_GENERATE) - set_property(DIRECTORY APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES ${dest_binary}) - add_custom_command(TARGET ${target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}") - else() - add_custom_command(OUTPUT ${output_path} - COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}" - DEPENDS ${target}) - add_custom_target(${target_name} ALL DEPENDS ${target} ${output_path}) - set_target_properties(${target_name} PROPERTIES FOLDER Tools) - - # Make sure both the link and target are toolchain tools - if (${link_name} IN_LIST LLVM_TOOLCHAIN_TOOLS AND ${target} IN_LIST LLVM_TOOLCHAIN_TOOLS) - set(TOOL_IS_TOOLCHAIN ON) - endif() - - if ((TOOL_IS_TOOLCHAIN OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) AND LLVM_BUILD_TOOLS) - llvm_install_symlink(${link_name} ${target}) - endif() - endif() -endfunction() - -function(llvm_externalize_debuginfo name) - if(NOT LLVM_EXTERNALIZE_DEBUGINFO) - return() - endif() - - if(NOT LLVM_EXTERNALIZE_DEBUGINFO_SKIP_STRIP) - if(APPLE) - if(NOT CMAKE_STRIP) - set(CMAKE_STRIP xcrun strip) - endif() - set(strip_command COMMAND ${CMAKE_STRIP} -Sxl $) - else() - set(strip_command COMMAND ${CMAKE_STRIP} -g -x $) - endif() - endif() - - if(APPLE) - if(LLVM_EXTERNALIZE_DEBUGINFO_EXTENSION) - set(file_ext ${LLVM_EXTERNALIZE_DEBUGINFO_EXTENSION}) - else() - set(file_ext dSYM) - endif() - - set(output_name "$.${file_ext}") - - if(LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR) - set(output_path "-o=${LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR}/${output_name}") - else() - set(output_path "-o=${output_name}") - endif() - - if(CMAKE_CXX_FLAGS MATCHES "-flto" - OR CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE} MATCHES "-flto") - - set(lto_object ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${name}-lto.o) - set_property(TARGET ${name} APPEND_STRING PROPERTY - LINK_FLAGS " -Wl,-object_path_lto,${lto_object}") - endif() - if(NOT CMAKE_DSYMUTIL) - set(CMAKE_DSYMUTIL xcrun dsymutil) - endif() - add_custom_command(TARGET ${name} POST_BUILD - COMMAND ${CMAKE_DSYMUTIL} ${output_path} $ - ${strip_command} - ) - else() - add_custom_command(TARGET ${name} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ $.debug - ${strip_command} -R .gnu_debuglink - COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$.debug $ - ) - endif() -endfunction() +# ROB: Function isn't used anywhere +# function(llvm_install_symlink name dest) +# cmake_parse_arguments(ARG "ALWAYS_GENERATE" "COMPONENT" "" ${ARGN}) +# foreach(path ${CMAKE_MODULE_PATH}) +# if(EXISTS ${path}/LLVMInstallSymlink.cmake) +# set(INSTALL_SYMLINK ${path}/LLVMInstallSymlink.cmake) +# break() +# endif() +# endforeach() +# +# if(ARG_COMPONENT) +# set(component ${ARG_COMPONENT}) +# else() +# if(ARG_ALWAYS_GENERATE) +# set(component ${dest}) +# else() +# set(component ${name}) +# endif() +# endif() +# +# set(full_name ${name}${CMAKE_EXECUTABLE_SUFFIX}) +# set(full_dest ${dest}${CMAKE_EXECUTABLE_SUFFIX}) +# +# install(SCRIPT ${INSTALL_SYMLINK} +# CODE "install_symlink(${full_name} ${full_dest} ${LLVM_TOOLS_INSTALL_DIR})" +# COMPONENT ${component}) +# +# if (NOT LLVM_ENABLE_IDE AND NOT ARG_ALWAYS_GENERATE) +# add_llvm_install_targets(install-${name} +# DEPENDS ${name} ${dest} +# COMPONENT ${name} +# SYMLINK ${dest}) +# endif() +# endfunction() + +# ROB: Funcion isn't used anywhere +# function(add_llvm_tool_symlink link_name target) +# cmake_parse_arguments(ARG "ALWAYS_GENERATE" "OUTPUT_DIR" "" ${ARGN}) +# set(dest_binary "$") +# +# # This got a bit gross... For multi-configuration generators the target +# # properties return the resolved value of the string, not the build system +# # expression. To reconstruct the platform-agnostic path we have to do some +# # magic. First we grab one of the types, and a type-specific path. Then from +# # the type-specific path we find the last occurrence of the type in the path, +# # and replace it with CMAKE_CFG_INTDIR. This allows the build step to be type +# # agnostic again. +# if(NOT ARG_OUTPUT_DIR) +# # If you're not overriding the OUTPUT_DIR, we can make the link relative in +# # the same directory. +# if(CMAKE_HOST_UNIX) +# set(dest_binary "$") +# endif() +# if(CMAKE_CONFIGURATION_TYPES) +# list(GET CMAKE_CONFIGURATION_TYPES 0 first_type) +# string(TOUPPER ${first_type} first_type_upper) +# set(first_type_suffix _${first_type_upper}) +# endif() +# get_target_property(target_type ${target} TYPE) +# if(${target_type} STREQUAL "STATIC_LIBRARY") +# get_target_property(ARG_OUTPUT_DIR ${target} ARCHIVE_OUTPUT_DIRECTORY${first_type_suffix}) +# elseif(UNIX AND ${target_type} STREQUAL "SHARED_LIBRARY") +# get_target_property(ARG_OUTPUT_DIR ${target} LIBRARY_OUTPUT_DIRECTORY${first_type_suffix}) +# else() +# get_target_property(ARG_OUTPUT_DIR ${target} RUNTIME_OUTPUT_DIRECTORY${first_type_suffix}) +# endif() +# if(CMAKE_CONFIGURATION_TYPES) +# string(FIND "${ARG_OUTPUT_DIR}" "/${first_type}/" type_start REVERSE) +# string(SUBSTRING "${ARG_OUTPUT_DIR}" 0 ${type_start} path_prefix) +# string(SUBSTRING "${ARG_OUTPUT_DIR}" ${type_start} -1 path_suffix) +# string(REPLACE "/${first_type}/" "/${CMAKE_CFG_INTDIR}/" +# path_suffix ${path_suffix}) +# set(ARG_OUTPUT_DIR ${path_prefix}${path_suffix}) +# endif() +# endif() +# +# if(CMAKE_HOST_UNIX) +# set(LLVM_LINK_OR_COPY create_symlink) +# else() +# set(LLVM_LINK_OR_COPY copy) +# endif() +# +# set(output_path "${ARG_OUTPUT_DIR}/${link_name}${CMAKE_EXECUTABLE_SUFFIX}") +# +# set(target_name ${link_name}) +# if(TARGET ${link_name}) +# set(target_name ${link_name}-link) +# endif() +# +# +# if(ARG_ALWAYS_GENERATE) +# set_property(DIRECTORY APPEND PROPERTY +# ADDITIONAL_MAKE_CLEAN_FILES ${dest_binary}) +# add_custom_command(TARGET ${target} POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}") +# else() +# add_custom_command(OUTPUT ${output_path} +# COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}" +# DEPENDS ${target}) +# add_custom_target(${target_name} ALL DEPENDS ${target} ${output_path}) +# set_target_properties(${target_name} PROPERTIES FOLDER Tools) +# +# # Make sure both the link and target are toolchain tools +# if (${link_name} IN_LIST LLVM_TOOLCHAIN_TOOLS AND ${target} IN_LIST LLVM_TOOLCHAIN_TOOLS) +# set(TOOL_IS_TOOLCHAIN ON) +# endif() +# +# # ROB: LLVM_BUILD_TOOLS is OFF +# # if ((TOOL_IS_TOOLCHAIN OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) AND LLVM_BUILD_TOOLS) +# # llvm_install_symlink(${link_name} ${target}) +# # endif() +# endif() +# endfunction() + +# function(llvm_externalize_debuginfo name) + # ROB: LLVM_EXTERNALIZE_DEBUGINFO is OFF + # if(NOT LLVM_EXTERNALIZE_DEBUGINFO) + # return() + # endif() + + # if(NOT LLVM_EXTERNALIZE_DEBUGINFO_SKIP_STRIP) + # if(APPLE) + # if(NOT CMAKE_STRIP) + # set(CMAKE_STRIP xcrun strip) + # endif() + # set(strip_command COMMAND ${CMAKE_STRIP} -Sxl $) + # else() + # set(strip_command COMMAND ${CMAKE_STRIP} -g -x $) + # endif() + # endif() + # + # if(APPLE) + # if(LLVM_EXTERNALIZE_DEBUGINFO_EXTENSION) + # set(file_ext ${LLVM_EXTERNALIZE_DEBUGINFO_EXTENSION}) + # else() + # set(file_ext dSYM) + # endif() + # + # set(output_name "$.${file_ext}") + # + # if(LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR) + # set(output_path "-o=${LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR}/${output_name}") + # else() + # set(output_path "-o=${output_name}") + # endif() + # + # if(CMAKE_CXX_FLAGS MATCHES "-flto" + # OR CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE} MATCHES "-flto") + # + # set(lto_object ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${name}-lto.o) + # set_property(TARGET ${name} APPEND_STRING PROPERTY + # LINK_FLAGS " -Wl,-object_path_lto,${lto_object}") + # endif() + # if(NOT CMAKE_DSYMUTIL) + # set(CMAKE_DSYMUTIL xcrun dsymutil) + # endif() + # add_custom_command(TARGET ${name} POST_BUILD + # COMMAND ${CMAKE_DSYMUTIL} ${output_path} $ + # ${strip_command} + # ) + # else() + # add_custom_command(TARGET ${name} POST_BUILD + # COMMAND ${CMAKE_OBJCOPY} --only-keep-debug $ $.debug + # ${strip_command} -R .gnu_debuglink + # COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink=$.debug $ + # ) + # endif() +# endfunction() # Usage: llvm_codesign(name [FORCE] [ENTITLEMENTS file] [BUNDLE_PATH path]) -function(llvm_codesign name) - cmake_parse_arguments(ARG "FORCE" "ENTITLEMENTS;BUNDLE_PATH" "" ${ARGN}) - - if(NOT LLVM_CODESIGNING_IDENTITY) - return() - endif() - - if(CMAKE_GENERATOR STREQUAL "Xcode") - set_target_properties(${name} PROPERTIES - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${LLVM_CODESIGNING_IDENTITY} - ) - if(DEFINED ARG_ENTITLEMENTS) - set_target_properties(${name} PROPERTIES - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ARG_ENTITLEMENTS} - ) - endif() - elseif(APPLE AND CMAKE_HOST_SYSTEM_NAME MATCHES Darwin) - if(NOT CMAKE_CODESIGN) - set(CMAKE_CODESIGN xcrun codesign) - endif() - if(NOT CMAKE_CODESIGN_ALLOCATE) - execute_process( - COMMAND xcrun -f codesign_allocate - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE - ) - endif() - if(DEFINED ARG_ENTITLEMENTS) - set(pass_entitlements --entitlements ${ARG_ENTITLEMENTS}) - endif() - - if (NOT ARG_BUNDLE_PATH) - set(ARG_BUNDLE_PATH $) - endif() - - # ld64 now always codesigns the binaries it creates. Apply the force arg - # unconditionally so that we can - for example - add entitlements to the - # targets that need it. - set(force_flag "-f") - - add_custom_command( - TARGET ${name} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E - env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE} - ${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY} - ${pass_entitlements} ${force_flag} ${ARG_BUNDLE_PATH} - ) - endif() -endfunction() +# ROB: LLVM_CODESIGNING_IDENTITY is OFF +# function(llvm_codesign name) +# cmake_parse_arguments(ARG "FORCE" "ENTITLEMENTS;BUNDLE_PATH" "" ${ARGN}) +# +# if(NOT LLVM_CODESIGNING_IDENTITY) +# return() +# endif() +# +# if(CMAKE_GENERATOR STREQUAL "Xcode") +# set_target_properties(${name} PROPERTIES +# XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${LLVM_CODESIGNING_IDENTITY} +# ) +# if(DEFINED ARG_ENTITLEMENTS) +# set_target_properties(${name} PROPERTIES +# XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${ARG_ENTITLEMENTS} +# ) +# endif() +# elseif(APPLE AND CMAKE_HOST_SYSTEM_NAME MATCHES Darwin) +# if(NOT CMAKE_CODESIGN) +# set(CMAKE_CODESIGN xcrun codesign) +# endif() +# if(NOT CMAKE_CODESIGN_ALLOCATE) +# execute_process( +# COMMAND xcrun -f codesign_allocate +# OUTPUT_STRIP_TRAILING_WHITESPACE +# OUTPUT_VARIABLE CMAKE_CODESIGN_ALLOCATE +# ) +# endif() +# if(DEFINED ARG_ENTITLEMENTS) +# set(pass_entitlements --entitlements ${ARG_ENTITLEMENTS}) +# endif() +# +# if (NOT ARG_BUNDLE_PATH) +# set(ARG_BUNDLE_PATH $) +# endif() +# +# # ld64 now always codesigns the binaries it creates. Apply the force arg +# # unconditionally so that we can - for example - add entitlements to the +# # targets that need it. +# set(force_flag "-f") +# +# add_custom_command( +# TARGET ${name} POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E +# env CODESIGN_ALLOCATE=${CMAKE_CODESIGN_ALLOCATE} +# ${CMAKE_CODESIGN} -s ${LLVM_CODESIGNING_IDENTITY} +# ${pass_entitlements} ${force_flag} ${ARG_BUNDLE_PATH} +# ) +# endif() +# endfunction() function(llvm_setup_rpath name) if(CMAKE_INSTALL_RPATH) @@ -2098,10 +2130,10 @@ function(llvm_setup_rpath name) set(extra_libdir ${LLVM_LIBRARY_DIR}) endif() - if (APPLE) - set(_install_name_dir INSTALL_NAME_DIR "@rpath") - set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) - elseif(UNIX) + # if (APPLE) + # set(_install_name_dir INSTALL_NAME_DIR "@rpath") + # set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) + # elseif(UNIX) set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") set_property(TARGET ${name} APPEND_STRING PROPERTY @@ -2112,9 +2144,9 @@ function(llvm_setup_rpath name) set_property(TARGET ${name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-rpath-link,${LLVM_LIBRARY_OUTPUT_INTDIR} ") endif() - else() - return() - endif() + # else() + # return() + # endif() # Enable BUILD_WITH_INSTALL_RPATH unless CMAKE_BUILD_RPATH is set. if("${CMAKE_BUILD_RPATH}" STREQUAL "") @@ -2126,21 +2158,22 @@ function(llvm_setup_rpath name) ${_install_name_dir}) endfunction() -function(setup_dependency_debugging name) - if(NOT LLVM_DEPENDENCY_DEBUGGING) - return() - endif() - - if("intrinsics_gen" IN_LIST ARGN) - return() - endif() - - set(deny_attributes_inc "(deny file* (literal \"${LLVM_BINARY_DIR}/include/llvm/IR/Attributes.inc\"))") - set(deny_intrinsics_inc "(deny file* (literal \"${LLVM_BINARY_DIR}/include/llvm/IR/Intrinsics.inc\"))") - - set(sandbox_command "sandbox-exec -p '(version 1) (allow default) ${deny_attributes_inc} ${deny_intrinsics_inc}'") - set_target_properties(${name} PROPERTIES RULE_LAUNCH_COMPILE ${sandbox_command}) -endfunction() +# function(setup_dependency_debugging name) +# # ROB: LLVM_DEPENDENCY_DEBUGGING is OFF +# # if(NOT LLVM_DEPENDENCY_DEBUGGING) +# return() +# # endif() +# +# # if("intrinsics_gen" IN_LIST ARGN) +# # return() +# # endif() +# # +# # set(deny_attributes_inc "(deny file* (literal \"${LLVM_BINARY_DIR}/include/llvm/IR/Attributes.inc\"))") +# # set(deny_intrinsics_inc "(deny file* (literal \"${LLVM_BINARY_DIR}/include/llvm/IR/Intrinsics.inc\"))") +# # +# # set(sandbox_command "sandbox-exec -p '(version 1) (allow default) ${deny_attributes_inc} ${deny_intrinsics_inc}'") +# # set_target_properties(${name} PROPERTIES RULE_LAUNCH_COMPILE ${sandbox_command}) +# endfunction() # If the sources at the given `path` are under version control, set `out_var` # to the the path of a file which will be modified when the VCS revision diff --git a/llvm/cmake/modules/AddLLVMDefinitions.cmake b/llvm/cmake/modules/AddLLVMDefinitions.cmake index dab16236..19a56263 100644 --- a/llvm/cmake/modules/AddLLVMDefinitions.cmake +++ b/llvm/cmake/modules/AddLLVMDefinitions.cmake @@ -4,14 +4,14 @@ # 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) +# 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) diff --git a/llvm/cmake/modules/AddOCaml.cmake b/llvm/cmake/modules/AddOCaml.cmake index 554046b2..b1976c25 100644 --- a/llvm/cmake/modules/AddOCaml.cmake +++ b/llvm/cmake/modules/AddOCaml.cmake @@ -22,207 +22,208 @@ # 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() - - if(LLVM_LINK_LLVM_DYLIB) - list(APPEND ocaml_flags "-lLLVM") - else() - 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() - endif() - - 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") +# 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() +# +# # ROB: LLVM_LINK_LLVM_DYLIB is OFF +# # if(LLVM_LINK_LLVM_DYLIB) +# # list(APPEND ocaml_flags "-lLLVM") +# # else() +# 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() +# # endif() +# +# 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") diff --git a/llvm/cmake/modules/AddSphinxTarget.cmake b/llvm/cmake/modules/AddSphinxTarget.cmake index e80c3b5c..cbc64c03 100644 --- a/llvm/cmake/modules/AddSphinxTarget.cmake +++ b/llvm/cmake/modules/AddSphinxTarget.cmake @@ -1,16 +1,19 @@ # 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() +# if (LLVM_ENABLE_SPHINX) +# message(STATUS "Sphinx enabled.") +# find_package(Sphinx REQUIRED) +# # if (LLVM_BUILD_DOCS AND NOT TARGET sphinx) +# # ROB: LLVM_BUILD_DOCS is off +# # add_custom_target(sphinx ALL) +# # endif() +# else() + # message(STATUS "Sphinx disabled.") +# endif() +# ROB: LLVM_ENABLE_SPHINX is OFF +# ROB: Function add_sphinx_target isn't used anywhere # Handy function for creating the different Sphinx targets. # # ``builder`` should be one of the supported builders used by @@ -22,92 +25,93 @@ endif() # ``ENV_VARS`` should be a list of environment variables that should be set when # running Sphinx. Each environment variable should be a string with # the form KEY=VALUE. -function (add_sphinx_target builder project) - cmake_parse_arguments(ARG "" "SOURCE_DIR" "ENV_VARS" ${ARGN}) - 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() - - if (NOT ARG_SOURCE_DIR) - set(ARG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - endif() - - add_custom_target(${SPHINX_TARGET_NAME} - COMMAND ${CMAKE_COMMAND} -E env ${ARG_ENV_VARS} - ${SPHINX_EXECUTABLE} - -b ${builder} - -d "${SPHINX_DOC_TREE_DIR}" - -q # Quiet: no output other than errors and warnings. - -t builder-${builder} # tag for builder - ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested - "${ARG_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) - - if(NOT LLVM_ENABLE_IDE) - add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" - DEPENDS ${SPHINX_TARGET_NAME} - COMPONENT "${project}-sphinx-man") - endif() - 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}") - - if(NOT LLVM_ENABLE_IDE) - add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" - DEPENDS ${SPHINX_TARGET_NAME} - COMPONENT "${project}-sphinx-html") - endif() - else() - message(WARNING Installation of ${builder} not supported) - endif() - endif() - endif() -endfunction() +# function (add_sphinx_target builder project) +# cmake_parse_arguments(ARG "" "SOURCE_DIR" "ENV_VARS" ${ARGN}) +# 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() +# +# if (NOT ARG_SOURCE_DIR) +# set(ARG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +# endif() +# +# add_custom_target(${SPHINX_TARGET_NAME} +# COMMAND ${CMAKE_COMMAND} -E env ${ARG_ENV_VARS} +# ${SPHINX_EXECUTABLE} +# -b ${builder} +# -d "${SPHINX_DOC_TREE_DIR}" +# -q # Quiet: no output other than errors and warnings. +# -t builder-${builder} # tag for builder +# ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested +# "${ARG_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() +# +# # LLVM_BUILD_DOCS is off +# # 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) +# # +# # if(NOT LLVM_ENABLE_IDE) +# # add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" +# # DEPENDS ${SPHINX_TARGET_NAME} +# # COMPONENT "${project}-sphinx-man") +# # endif() +# # 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}") +# # +# # if(NOT LLVM_ENABLE_IDE) +# # add_llvm_install_targets("install-${SPHINX_TARGET_NAME}" +# # DEPENDS ${SPHINX_TARGET_NAME} +# # COMPONENT "${project}-sphinx-html") +# # endif() +# # else() +# # message(WARNING Installation of ${builder} not supported) +# # endif() +# # endif() +# # endif() +# endfunction() diff --git a/llvm/cmake/modules/CMakeLists.txt b/llvm/cmake/modules/CMakeLists.txt index 505dc9a2..c2c8e1f9 100644 --- a/llvm/cmake/modules/CMakeLists.txt +++ b/llvm/cmake/modules/CMakeLists.txt @@ -58,18 +58,20 @@ set(LLVM_CONFIG_BINARY_DIR "${LLVM_BINARY_DIR}") set(LLVM_CONFIG_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}") # Generate a default location for lit -if (LLVM_BUILD_UTILS) - if (CMAKE_HOST_WIN32 AND NOT CYGWIN) - set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit.py") - else() - set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") - endif() -endif() - -if (LLVM_LINK_LLVM_DYLIB) - set(LLVM_CONFIG_LINK_LLVM_DYLIB - "set(LLVM_LINK_LLVM_DYLIB ${LLVM_LINK_LLVM_DYLIB})") -endif() +# ROB: LLVM_BUILD_UTILS is OFF +# if (LLVM_BUILD_UTILS) +# if (CMAKE_HOST_WIN32 AND NOT CYGWIN) +# set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit.py") +# else() +# set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") +# endif() +# endif() + +# ROB: LLVM_LINK_LLVM_DYLIB is OFF +# if (LLVM_LINK_LLVM_DYLIB) +# set(LLVM_CONFIG_LINK_LLVM_DYLIB +# "set(LLVM_LINK_LLVM_DYLIB ${LLVM_LINK_LLVM_DYLIB})") +# endif() # 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 @@ -116,9 +118,10 @@ set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}") set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin") # Generate a default location for lit -if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) - set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") -endif() +# ROB: LLVM_INSTALL_UTILS is OFF +# if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) +# set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") +# endif() set(LLVM_CONFIG_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMExports.cmake") set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}") @@ -133,7 +136,8 @@ configure_file( ${llvm_cmake_builddir}/LLVMConfigVersion.cmake @ONLY) -if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) +# ROB: LLVM_INSTALL_TOOLCHAIN_ONLY is OFF +# 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} @@ -163,4 +167,4 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) add_llvm_install_targets(install-cmake-exports COMPONENT cmake-exports) endif() -endif() +# endif() diff --git a/llvm/cmake/modules/CheckCompilerVersion.cmake b/llvm/cmake/modules/CheckCompilerVersion.cmake index d6ec3144..7ac65421 100644 --- a/llvm/cmake/modules/CheckCompilerVersion.cmake +++ b/llvm/cmake/modules/CheckCompilerVersion.cmake @@ -24,9 +24,10 @@ if(DEFINED LLVM_COMPILER_CHECKED) endif() set(LLVM_COMPILER_CHECKED ON) -if(LLVM_FORCE_USE_OLD_TOOLCHAIN) - return() -endif() +# ROB: LLVM_FORCE_USE_OLD_TOOLCHAIN is OFF +# if(LLVM_FORCE_USE_OLD_TOOLCHAIN) +# return() +# endif() function(check_compiler_version NAME NICE_NAME MINIMUM_VERSION SOFT_ERROR_VERSION) if(NOT CMAKE_CXX_COMPILER_ID STREQUAL NAME) @@ -35,11 +36,12 @@ function(check_compiler_version NAME NICE_NAME MINIMUM_VERSION SOFT_ERROR_VERSIO if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS MINIMUM_VERSION) message(FATAL_ERROR "Host ${NICE_NAME} version must be at least ${MINIMUM_VERSION}, your version is ${CMAKE_CXX_COMPILER_VERSION}.") elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS SOFT_ERROR_VERSION) - if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN) - message(WARNING "Host ${NICE_NAME} version should be at least ${SOFT_ERROR_VERSION} because LLVM will soon use new C++ features which your toolchain version doesn't support. Your version is ${CMAKE_CXX_COMPILER_VERSION}. Ignoring because you've set LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.") - else() + # ROB: LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN is OFF + # if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN) + # message(WARNING "Host ${NICE_NAME} version should be at least ${SOFT_ERROR_VERSION} because LLVM will soon use new C++ features which your toolchain version doesn't support. Your version is ${CMAKE_CXX_COMPILER_VERSION}. Ignoring because you've set LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.") + # else() message(FATAL_ERROR "Host ${NICE_NAME} version should be at least ${SOFT_ERROR_VERSION} because LLVM will soon use new C++ features which your toolchain version doesn't support. Your version is ${CMAKE_CXX_COMPILER_VERSION}. You can temporarily opt out using LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN, but very soon your toolchain won't be supported.") - endif() + # endif() endif() endfunction(check_compiler_version) @@ -51,15 +53,16 @@ check_compiler_version("MSVC" "Visual Studio" ${MSVC_MIN} ${MSVC_SOFT_ERROR}) # See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html # and thread "[llvm-dev] Longstanding failing tests - clang-tidy, MachO, Polly" # on llvm-dev Jan 21-23 2020. -if ((${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) AND - (19.24 VERSION_LESS_EQUAL ${CMAKE_CXX_COMPILER_VERSION}) AND - (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 19.25)) - if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN) - message(WARNING "Host Visual Studio version 16.4 is known to miscompile part of LLVM") - else() - message(FATAL_ERROR "Host Visual Studio version 16.4 is known to miscompile part of LLVM, please use clang-cl or upgrade to 16.5 or above (use -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON to ignore)") - endif() -endif() +# if ((${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) AND +# (19.24 VERSION_LESS_EQUAL ${CMAKE_CXX_COMPILER_VERSION}) AND +# (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 19.25)) +# # ROB: LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN is OFF +# # if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN) +# # message(WARNING "Host Visual Studio version 16.4 is known to miscompile part of LLVM") +# # else() +# message(FATAL_ERROR "Host Visual Studio version 16.4 is known to miscompile part of LLVM, please use clang-cl or upgrade to 16.5 or above (use -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON to ignore)") +# # endif() +# endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -69,6 +72,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") endif() set(CLANG_CL 1) elseif(NOT LLVM_ENABLE_LIBCXX) + # ROB: LLVM_ENABLE_LIBCXX is OFF set (LLVM_LIBSTDCXX_MIN 1) set (LLVM_LIBSTDCXX_SOFT_ERROR 1) endif() diff --git a/llvm/cmake/modules/ChooseMSVCCRT.cmake b/llvm/cmake/modules/ChooseMSVCCRT.cmake index 0e6e1aa5..db1c1c12 100644 --- a/llvm/cmake/modules/ChooseMSVCCRT.cmake +++ b/llvm/cmake/modules/ChooseMSVCCRT.cmake @@ -1,106 +1,106 @@ -# 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 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. # -# The macro is invoked at the end of the file. +# ### 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) # -# 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) - diff --git a/llvm/cmake/modules/FindGRPC.cmake b/llvm/cmake/modules/FindGRPC.cmake index 8fdb3506..261ffbb9 100644 --- a/llvm/cmake/modules/FindGRPC.cmake +++ b/llvm/cmake/modules/FindGRPC.cmake @@ -1,131 +1,131 @@ # FIXME(kirillbobyrev): Check if gRPC and Protobuf headers can be included at # configure time. -find_package(Threads REQUIRED) -if (GRPC_INSTALL_PATH) - # This setup requires gRPC to be built from sources using CMake and installed - # to ${GRPC_INSTALL_PATH} via -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH}. - # Libraries will be linked according to gRPC build policy which generates - # static libraries when BUILD_SHARED_LIBS is Off and dynamic libraries when - # it's On (NOTE: This is a variable passed to gRPC CMake build invocation, - # LLVM's BUILD_SHARED_LIBS has no effect). - set(protobuf_MODULE_COMPATIBLE TRUE) - find_package(Protobuf CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) - message(STATUS "Using protobuf ${protobuf_VERSION}") - find_package(gRPC CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) - message(STATUS "Using gRPC ${gRPC_VERSION}") - - include_directories(${Protobuf_INCLUDE_DIRS}) - - # gRPC CMake CONFIG gives the libraries slightly odd names, make them match - # the conventional system-installed names. - set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_GLOBAL TRUE) - add_library(protobuf ALIAS protobuf::libprotobuf) - set_target_properties(gRPC::grpc++ PROPERTIES IMPORTED_GLOBAL TRUE) - add_library(grpc++ ALIAS gRPC::grpc++) - - set(GRPC_CPP_PLUGIN $) - set(PROTOC ${Protobuf_PROTOC_EXECUTABLE}) -else() - # This setup requires system-installed gRPC and Protobuf. - # We always link dynamically in this mode. While the static libraries are - # usually installed, the CMake files telling us *which* static libraries to - # link are not. - if (NOT BUILD_SHARED_LIBS) - message(NOTICE "gRPC and Protobuf will be linked dynamically. If you want static linking, build gRPC from sources with -DBUILD_SHARED_LIBS=Off.") - endif() - find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) - find_program(PROTOC protoc) - if (NOT GRPC_CPP_PLUGIN OR NOT PROTOC) - message(FATAL_ERROR "gRPC C++ Plugin and Protoc must be on $PATH for Clangd remote index build.") - endif() - # On macOS the libraries are typically installed via Homebrew and are not on - # the system path. - set(GRPC_OPTS "") - set(PROTOBUF_OPTS "") - if (${APPLE}) - find_program(HOMEBREW brew) - # If Homebrew is not found, the user might have installed libraries - # manually. Fall back to the system path. - if (HOMEBREW) - execute_process(COMMAND ${HOMEBREW} --prefix grpc - OUTPUT_VARIABLE GRPC_HOMEBREW_PATH - RESULT_VARIABLE GRPC_HOMEBREW_RETURN_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${HOMEBREW} --prefix protobuf - OUTPUT_VARIABLE PROTOBUF_HOMEBREW_PATH - RESULT_VARIABLE PROTOBUF_HOMEBREW_RETURN_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE) - # If either library is not installed via Homebrew, fall back to the - # system path. - if (GRPC_HOMEBREW_RETURN_CODE EQUAL "0") - include_directories(${GRPC_HOMEBREW_PATH}/include) - list(APPEND GRPC_OPTS PATHS ${GRPC_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) - endif() - if (PROTOBUF_HOMEBREW_RETURN_CODE EQUAL "0") - include_directories(${PROTOBUF_HOMEBREW_PATH}/include) - list(APPEND PROTOBUF_OPTS PATHS ${PROTOBUF_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) - endif() - endif() - endif() - find_library(GRPC_LIBRARY grpc++ $GRPC_OPTS REQUIRED) - add_library(grpc++ UNKNOWN IMPORTED GLOBAL) - message(STATUS "Using grpc++: " ${GRPC_LIBRARY}) - set_target_properties(grpc++ PROPERTIES IMPORTED_LOCATION ${GRPC_LIBRARY}) - find_library(PROTOBUF_LIBRARY protobuf $PROTOBUF_OPTS REQUIRED) - message(STATUS "Using protobuf: " ${PROTOBUF_LIBRARY}) - add_library(protobuf UNKNOWN IMPORTED GLOBAL) - set_target_properties(protobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_LIBRARY}) -endif() - -# Proto headers are generated in ${CMAKE_CURRENT_BINARY_DIR}. -# Libraries that use these headers should adjust the include path. -# If the "GRPC" argument is given, services are also generated. -# The DEPENDS list should name *.proto source files that are imported. -# They may be relative to the source dir or absolute (for generated protos). -function(generate_protos LibraryName ProtoFile) - cmake_parse_arguments(PARSE_ARGV 2 PROTO "GRPC" "" "DEPENDS") - get_filename_component(ProtoSourceAbsolutePath "${CMAKE_CURRENT_SOURCE_DIR}/${ProtoFile}" ABSOLUTE) - get_filename_component(ProtoSourcePath ${ProtoSourceAbsolutePath} PATH) - get_filename_component(Basename ${ProtoSourceAbsolutePath} NAME_WLE) - - set(GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.cc") - set(GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.h") - set(Flags - --cpp_out="${CMAKE_CURRENT_BINARY_DIR}" - --proto_path="${ProtoSourcePath}") - if (PROTO_GRPC) - list(APPEND Flags - --grpc_out="${CMAKE_CURRENT_BINARY_DIR}" - --plugin=protoc-gen-grpc="${GRPC_CPP_PLUGIN}") - list(APPEND GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.cc") - list(APPEND GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.h") - endif() - add_custom_command( - OUTPUT ${GeneratedProtoSource} ${GeneratedProtoHeader} - COMMAND ${PROTOC} - ARGS ${Flags} "${ProtoSourceAbsolutePath}" - DEPENDS "${ProtoSourceAbsolutePath}") - - add_clang_library(${LibraryName} ${GeneratedProtoSource} - PARTIAL_SOURCES_INTENDED - LINK_LIBS PUBLIC grpc++ protobuf) - - # Ensure dependency headers are generated before dependent protos are built. - # DEPENDS arg is a list of "Foo.proto". While they're logically relative to - # the source dir, the generated headers we need are in the binary dir. - foreach(ImportedProto IN LISTS PROTO_DEPENDS) - # Foo.proto -> Foo.pb.h - STRING(REGEX REPLACE "\\.proto$" ".pb.h" ImportedHeader "${ImportedProto}") - # Foo.pb.h -> ${CMAKE_CURRENT_BINARY_DIR}/Foo.pb.h - get_filename_component(ImportedHeader "${ImportedHeader}" - ABSOLUTE - BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") - # Compilation of each generated source depends on ${BINARY}/Foo.pb.h. - foreach(Generated IN LISTS GeneratedProtoSource) - # FIXME: CMake docs suggest OBJECT_DEPENDS isn't needed, but I can't get - # the recommended add_dependencies() approach to work. - set_source_files_properties("${Generated}" - PROPERTIES OBJECT_DEPENDS "${ImportedHeader}") - endforeach(Generated) - endforeach(ImportedProto) -endfunction() +# find_package(Threads REQUIRED) +# if (GRPC_INSTALL_PATH) +# # This setup requires gRPC to be built from sources using CMake and installed +# # to ${GRPC_INSTALL_PATH} via -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH}. +# # Libraries will be linked according to gRPC build policy which generates +# # static libraries when BUILD_SHARED_LIBS is Off and dynamic libraries when +# # it's On (NOTE: This is a variable passed to gRPC CMake build invocation, +# # LLVM's BUILD_SHARED_LIBS has no effect). +# set(protobuf_MODULE_COMPATIBLE TRUE) +# find_package(Protobuf CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) +# message(STATUS "Using protobuf ${protobuf_VERSION}") +# find_package(gRPC CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) +# message(STATUS "Using gRPC ${gRPC_VERSION}") +# +# include_directories(${Protobuf_INCLUDE_DIRS}) +# +# # gRPC CMake CONFIG gives the libraries slightly odd names, make them match +# # the conventional system-installed names. +# set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_GLOBAL TRUE) +# add_library(protobuf ALIAS protobuf::libprotobuf) +# set_target_properties(gRPC::grpc++ PROPERTIES IMPORTED_GLOBAL TRUE) +# add_library(grpc++ ALIAS gRPC::grpc++) +# +# set(GRPC_CPP_PLUGIN $) +# set(PROTOC ${Protobuf_PROTOC_EXECUTABLE}) +# else() +# # This setup requires system-installed gRPC and Protobuf. +# # We always link dynamically in this mode. While the static libraries are +# # usually installed, the CMake files telling us *which* static libraries to +# # link are not. +# if (NOT BUILD_SHARED_LIBS) +# message(NOTICE "gRPC and Protobuf will be linked dynamically. If you want static linking, build gRPC from sources with -DBUILD_SHARED_LIBS=Off.") +# endif() +# find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) +# find_program(PROTOC protoc) +# if (NOT GRPC_CPP_PLUGIN OR NOT PROTOC) +# message(FATAL_ERROR "gRPC C++ Plugin and Protoc must be on $PATH for Clangd remote index build.") +# endif() +# # On macOS the libraries are typically installed via Homebrew and are not on +# # the system path. +# set(GRPC_OPTS "") +# set(PROTOBUF_OPTS "") +# if (${APPLE}) +# find_program(HOMEBREW brew) +# # If Homebrew is not found, the user might have installed libraries +# # manually. Fall back to the system path. +# if (HOMEBREW) +# execute_process(COMMAND ${HOMEBREW} --prefix grpc +# OUTPUT_VARIABLE GRPC_HOMEBREW_PATH +# RESULT_VARIABLE GRPC_HOMEBREW_RETURN_CODE +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# execute_process(COMMAND ${HOMEBREW} --prefix protobuf +# OUTPUT_VARIABLE PROTOBUF_HOMEBREW_PATH +# RESULT_VARIABLE PROTOBUF_HOMEBREW_RETURN_CODE +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# # If either library is not installed via Homebrew, fall back to the +# # system path. +# if (GRPC_HOMEBREW_RETURN_CODE EQUAL "0") +# include_directories(${GRPC_HOMEBREW_PATH}/include) +# list(APPEND GRPC_OPTS PATHS ${GRPC_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) +# endif() +# if (PROTOBUF_HOMEBREW_RETURN_CODE EQUAL "0") +# include_directories(${PROTOBUF_HOMEBREW_PATH}/include) +# list(APPEND PROTOBUF_OPTS PATHS ${PROTOBUF_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) +# endif() +# endif() +# endif() +# find_library(GRPC_LIBRARY grpc++ $GRPC_OPTS REQUIRED) +# add_library(grpc++ UNKNOWN IMPORTED GLOBAL) +# message(STATUS "Using grpc++: " ${GRPC_LIBRARY}) +# set_target_properties(grpc++ PROPERTIES IMPORTED_LOCATION ${GRPC_LIBRARY}) +# find_library(PROTOBUF_LIBRARY protobuf $PROTOBUF_OPTS REQUIRED) +# message(STATUS "Using protobuf: " ${PROTOBUF_LIBRARY}) +# add_library(protobuf UNKNOWN IMPORTED GLOBAL) +# set_target_properties(protobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_LIBRARY}) +# endif() +# +# # Proto headers are generated in ${CMAKE_CURRENT_BINARY_DIR}. +# # Libraries that use these headers should adjust the include path. +# # If the "GRPC" argument is given, services are also generated. +# # The DEPENDS list should name *.proto source files that are imported. +# # They may be relative to the source dir or absolute (for generated protos). +# function(generate_protos LibraryName ProtoFile) +# cmake_parse_arguments(PARSE_ARGV 2 PROTO "GRPC" "" "DEPENDS") +# get_filename_component(ProtoSourceAbsolutePath "${CMAKE_CURRENT_SOURCE_DIR}/${ProtoFile}" ABSOLUTE) +# get_filename_component(ProtoSourcePath ${ProtoSourceAbsolutePath} PATH) +# get_filename_component(Basename ${ProtoSourceAbsolutePath} NAME_WLE) +# +# set(GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.cc") +# set(GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.h") +# set(Flags +# --cpp_out="${CMAKE_CURRENT_BINARY_DIR}" +# --proto_path="${ProtoSourcePath}") +# if (PROTO_GRPC) +# list(APPEND Flags +# --grpc_out="${CMAKE_CURRENT_BINARY_DIR}" +# --plugin=protoc-gen-grpc="${GRPC_CPP_PLUGIN}") +# list(APPEND GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.cc") +# list(APPEND GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.h") +# endif() +# add_custom_command( +# OUTPUT ${GeneratedProtoSource} ${GeneratedProtoHeader} +# COMMAND ${PROTOC} +# ARGS ${Flags} "${ProtoSourceAbsolutePath}" +# DEPENDS "${ProtoSourceAbsolutePath}") +# +# add_clang_library(${LibraryName} ${GeneratedProtoSource} +# PARTIAL_SOURCES_INTENDED +# LINK_LIBS PUBLIC grpc++ protobuf) +# +# # Ensure dependency headers are generated before dependent protos are built. +# # DEPENDS arg is a list of "Foo.proto". While they're logically relative to +# # the source dir, the generated headers we need are in the binary dir. +# foreach(ImportedProto IN LISTS PROTO_DEPENDS) +# # Foo.proto -> Foo.pb.h +# STRING(REGEX REPLACE "\\.proto$" ".pb.h" ImportedHeader "${ImportedProto}") +# # Foo.pb.h -> ${CMAKE_CURRENT_BINARY_DIR}/Foo.pb.h +# get_filename_component(ImportedHeader "${ImportedHeader}" +# ABSOLUTE +# BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") +# # Compilation of each generated source depends on ${BINARY}/Foo.pb.h. +# foreach(Generated IN LISTS GeneratedProtoSource) +# # FIXME: CMake docs suggest OBJECT_DEPENDS isn't needed, but I can't get +# # the recommended add_dependencies() approach to work. +# set_source_files_properties("${Generated}" +# PROPERTIES OBJECT_DEPENDS "${ImportedHeader}") +# endforeach(Generated) +# endforeach(ImportedProto) +# endfunction() diff --git a/llvm/cmake/modules/FindOCaml.cmake b/llvm/cmake/modules/FindOCaml.cmake index 8eba2127..8ba74978 100644 --- a/llvm/cmake/modules/FindOCaml.cmake +++ b/llvm/cmake/modules/FindOCaml.cmake @@ -61,43 +61,43 @@ find_package_handle_standard_args( OCaml DEFAULT_MSG 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() +# 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() diff --git a/llvm/cmake/modules/FindSphinx.cmake b/llvm/cmake/modules/FindSphinx.cmake index 9d252e8b..b58cfbcc 100644 --- a/llvm/cmake/modules/FindSphinx.cmake +++ b/llvm/cmake/modules/FindSphinx.cmake @@ -2,26 +2,26 @@ # http://sphinx-doc.org/ # # Example usage: +# # +# # find_package(Sphinx) +# # +# # If successful the following variables will be defined +# # SPHINX_FOUND +# # SPHINX_EXECUTABLE # -# find_package(Sphinx) +# find_program(SPHINX_EXECUTABLE +# NAMES sphinx-build sphinx-build2 +# DOC "Path to sphinx-build executable") # -# 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) +# # 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) diff --git a/llvm/cmake/modules/FindZ3.cmake b/llvm/cmake/modules/FindZ3.cmake index 95dd3778..fec72e58 100644 --- a/llvm/cmake/modules/FindZ3.cmake +++ b/llvm/cmake/modules/FindZ3.cmake @@ -1,37 +1,37 @@ INCLUDE(CheckCXXSourceRuns) # Function to check Z3's version -function(check_z3_version z3_include z3_lib) - # The program that will be executed to print Z3's version. - file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c - "#include - #include - int main() { - unsigned int major, minor, build, rev; - Z3_get_version(&major, &minor, &build, &rev); - printf(\"%u.%u.%u\", major, minor, build); - return 0; - }") - - # Get lib path - get_filename_component(z3_lib_path ${z3_lib} PATH) - - try_run( - Z3_RETURNCODE - Z3_COMPILED - ${CMAKE_BINARY_DIR} - ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c - COMPILE_DEFINITIONS -I"${z3_include}" - LINK_LIBRARIES -L${z3_lib_path} -lz3 - RUN_OUTPUT_VARIABLE SRC_OUTPUT - ) - - if(Z3_COMPILED) - string(REGEX REPLACE "([0-9]*\\.[0-9]*\\.[0-9]*)" "\\1" - z3_version "${SRC_OUTPUT}") - set(Z3_VERSION_STRING ${z3_version} PARENT_SCOPE) - endif() -endfunction(check_z3_version) +# function(check_z3_version z3_include z3_lib) +# # The program that will be executed to print Z3's version. +# file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c +# "#include +# #include +# int main() { +# unsigned int major, minor, build, rev; +# Z3_get_version(&major, &minor, &build, &rev); +# printf(\"%u.%u.%u\", major, minor, build); +# return 0; +# }") +# +# # Get lib path +# get_filename_component(z3_lib_path ${z3_lib} PATH) +# +# try_run( +# Z3_RETURNCODE +# Z3_COMPILED +# ${CMAKE_BINARY_DIR} +# ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testz3.c +# COMPILE_DEFINITIONS -I"${z3_include}" +# LINK_LIBRARIES -L${z3_lib_path} -lz3 +# RUN_OUTPUT_VARIABLE SRC_OUTPUT +# ) +# +# if(Z3_COMPILED) +# string(REGEX REPLACE "([0-9]*\\.[0-9]*\\.[0-9]*)" "\\1" +# z3_version "${SRC_OUTPUT}") +# set(Z3_VERSION_STRING ${z3_version} PARENT_SCOPE) +# endif() +# endfunction(check_z3_version) # Looking for Z3 in LLVM_Z3_INSTALL_DIR find_path(Z3_INCLUDE_DIR NAMES z3.h @@ -60,11 +60,11 @@ unset(Z3_VERSION_STRING) # First, try to check it dynamically, by compiling a small program that # prints Z3's version -if(Z3_INCLUDE_DIR AND Z3_LIBRARIES) - # We do not have the Z3 binary to query for a version. Try to use - # a small C++ program to detect it via the Z3_get_version() API call. - check_z3_version(${Z3_INCLUDE_DIR} ${Z3_LIBRARIES}) -endif() +# if(Z3_INCLUDE_DIR AND Z3_LIBRARIES) +# # We do not have the Z3 binary to query for a version. Try to use +# # a small C++ program to detect it via the Z3_get_version() API call. +# check_z3_version(${Z3_INCLUDE_DIR} ${Z3_LIBRARIES}) +# endif() # If the dynamic check fails, we might be cross compiling: if that's the case, # check the version in the headers, otherwise, fail with a message diff --git a/llvm/cmake/modules/GetLibraryName.cmake b/llvm/cmake/modules/GetLibraryName.cmake index 13c00806..f15dcf89 100644 --- a/llvm/cmake/modules/GetLibraryName.cmake +++ b/llvm/cmake/modules/GetLibraryName.cmake @@ -1,17 +1,17 @@ # Returns library name for a given path. -function(get_library_name path name) - get_filename_component(path ${path} NAME) - set(prefixes ${CMAKE_FIND_LIBRARY_PREFIXES}) - set(suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) - list(FILTER prefixes EXCLUDE REGEX "^\\s*$") - list(FILTER suffixes EXCLUDE REGEX "^\\s*$") - if(prefixes) - string(REPLACE ";" "|" prefixes "${prefixes}") - string(REGEX REPLACE "^(${prefixes})" "" path ${path}) - endif() - if(suffixes) - string(REPLACE ";" "|" suffixes "${suffixes}") - string(REGEX REPLACE "(${suffixes})$" "" path ${path}) - endif() - set(${name} "${path}" PARENT_SCOPE) -endfunction() +# function(get_library_name path name) +# get_filename_component(path ${path} NAME) +# set(prefixes ${CMAKE_FIND_LIBRARY_PREFIXES}) +# set(suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) +# list(FILTER prefixes EXCLUDE REGEX "^\\s*$") +# list(FILTER suffixes EXCLUDE REGEX "^\\s*$") +# if(prefixes) +# string(REPLACE ";" "|" prefixes "${prefixes}") +# string(REGEX REPLACE "^(${prefixes})" "" path ${path}) +# endif() +# if(suffixes) +# string(REPLACE ";" "|" suffixes "${suffixes}") +# string(REGEX REPLACE "(${suffixes})$" "" path ${path}) +# endif() +# set(${name} "${path}" PARENT_SCOPE) +# endfunction() diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 5334ff86..32542279 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -20,8 +20,8 @@ else() set(LINKER_IS_LLD_LINK FALSE) endif() -set(LLVM_ENABLE_LTO OFF CACHE STRING "Build LLVM with LTO. May be specified as Thin or Full to use a particular kind of LTO") -string(TOUPPER "${LLVM_ENABLE_LTO}" uppercase_LLVM_ENABLE_LTO) +# set(LLVM_ENABLE_LTO OFF CACHE STRING "Build LLVM with LTO. May be specified as Thin or Full to use a particular kind of LTO") +# string(TOUPPER "${LLVM_ENABLE_LTO}" uppercase_LLVM_ENABLE_LTO) # Ninja Job Pool support # The following only works with the Ninja generator in CMake >= 3.0. @@ -36,20 +36,20 @@ if(LLVM_PARALLEL_COMPILE_JOBS) endif() endif() -set(LLVM_PARALLEL_LINK_JOBS "" CACHE STRING - "Define the maximum number of concurrent link jobs (Ninja only).") -if(CMAKE_GENERATOR STREQUAL "Ninja") - if(NOT LLVM_PARALLEL_LINK_JOBS AND uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") - message(STATUS "ThinLTO provides its own parallel linking - limiting parallel link jobs to 2.") - set(LLVM_PARALLEL_LINK_JOBS "2") - endif() - if(LLVM_PARALLEL_LINK_JOBS) - set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=${LLVM_PARALLEL_LINK_JOBS}) - set(CMAKE_JOB_POOL_LINK link_job_pool) - endif() -elseif(LLVM_PARALLEL_LINK_JOBS) - message(WARNING "Job pooling is only available with Ninja generators.") -endif() +# set(LLVM_PARALLEL_LINK_JOBS "" CACHE STRING +# "Define the maximum number of concurrent link jobs (Ninja only).") +# if(CMAKE_GENERATOR STREQUAL "Ninja") +# if(NOT LLVM_PARALLEL_LINK_JOBS AND uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") +# message(STATUS "ThinLTO provides its own parallel linking - limiting parallel link jobs to 2.") +# set(LLVM_PARALLEL_LINK_JOBS "2") +# endif() +# if(LLVM_PARALLEL_LINK_JOBS) +# set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=${LLVM_PARALLEL_LINK_JOBS}) +# set(CMAKE_JOB_POOL_LINK link_job_pool) +# endif() +# elseif(LLVM_PARALLEL_LINK_JOBS) +# message(WARNING "Job pooling is only available with Ninja generators.") +# endif() if( LLVM_ENABLE_ASSERTIONS ) # MSVC doesn't like _DEBUG on release builds. See PR 4379. @@ -77,9 +77,10 @@ if( LLVM_ENABLE_ASSERTIONS ) endif() endif() -if (LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS) - add_definitions(-DSTRICT_FIXED_SIZE_VECTORS) -endif() +# ROB: LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS is OFF +# if (LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS) +# add_definitions(-DSTRICT_FIXED_SIZE_VECTORS) +# endif() string(TOUPPER "${LLVM_ABI_BREAKING_CHECKS}" uppercase_LLVM_ABI_BREAKING_CHECKS) @@ -98,32 +99,32 @@ else() message(FATAL_ERROR "Unknown value for LLVM_ABI_BREAKING_CHECKS: \"${LLVM_ABI_BREAKING_CHECKS}\"!") endif() -if( LLVM_REVERSE_ITERATION ) - set( LLVM_ENABLE_REVERSE_ITERATION 1 ) -endif() - -if(WIN32) - set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) - if(CYGWIN) - set(LLVM_ON_WIN32 0) - set(LLVM_ON_UNIX 1) - else(CYGWIN) - set(LLVM_ON_WIN32 1) - set(LLVM_ON_UNIX 0) - endif(CYGWIN) -else(WIN32) +# if( LLVM_REVERSE_ITERATION ) +# set( LLVM_ENABLE_REVERSE_ITERATION 1 ) +# endif() + +# if(WIN32) +# set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) +# if(CYGWIN) +# set(LLVM_ON_WIN32 0) +# set(LLVM_ON_UNIX 1) +# else(CYGWIN) +# set(LLVM_ON_WIN32 1) +# set(LLVM_ON_UNIX 0) +# endif(CYGWIN) +# else(WIN32) if(FUCHSIA OR UNIX) set(LLVM_ON_WIN32 0) set(LLVM_ON_UNIX 1) - if(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) - else() + # if(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") + # set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) + # else() set(LLVM_HAVE_LINK_VERSION_SCRIPT 1) - endif() + # endif() else(FUCHSIA OR UNIX) MESSAGE(SEND_ERROR "Unable to determine platform") endif(FUCHSIA OR UNIX) -endif(WIN32) +# endif(WIN32) if (CMAKE_SYSTEM_NAME MATCHES "OS390") set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) @@ -135,13 +136,14 @@ set(LTDL_SHLIB_EXT ${CMAKE_SHARED_LIBRARY_SUFFIX}) # We use *.dylib rather than *.so on darwin. set(LLVM_PLUGIN_EXT ${CMAKE_SHARED_LIBRARY_SUFFIX}) -if(APPLE) - if(LLVM_ENABLE_LLD AND LLVM_ENABLE_LTO) - message(FATAL_ERROR "lld does not support LTO on Darwin") - endif() - # Darwin-specific linker flags for loadable modules. - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress") -endif() +# if(APPLE) +# # ROB: LLVM_ENABLE_LLD is OFF +# # if(LLVM_ENABLE_LLD AND LLVM_ENABLE_LTO) +# # message(FATAL_ERROR "lld does not support LTO on Darwin") +# # endif() +# # Darwin-specific linker flags for loadable modules. +# set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress") +# endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") # RHEL7 has ar and ranlib being non-deterministic by default. The D flag forces determinism, @@ -173,22 +175,22 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") endif() endif() -if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - # -fPIC does not enable the large code model for GCC on AIX but does for XL. - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - append("-mcmodel=large" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL") - # XL generates a small number of relocations not of the large model, -bbigtoc is needed. - append("-Wl,-bbigtoc" - CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - # The default behaviour on AIX processes dynamic initialization of non-local variables with - # static storage duration even for archive members that are otherwise unreferenced. - # Since `--whole-archive` is not used by the LLVM build to keep such initializations for Linux, - # we can limit the processing for archive members to only those that are otherwise referenced. - append("-bcdtors:mbr" - CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - endif() -endif() +# if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") +# # -fPIC does not enable the large code model for GCC on AIX but does for XL. +# if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") +# append("-mcmodel=large" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) +# elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL") +# # XL generates a small number of relocations not of the large model, -bbigtoc is needed. +# append("-Wl,-bbigtoc" +# CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +# # The default behaviour on AIX processes dynamic initialization of non-local variables with +# # static storage duration even for archive members that are otherwise unreferenced. +# # Since `--whole-archive` is not used by the LLVM build to keep such initializations for Linux, +# # we can limit the processing for archive members to only those that are otherwise referenced. +# append("-bcdtors:mbr" +# CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +# endif() +# endif() # Pass -Wl,-z,defs. This makes sure all symbols are defined. Otherwise a DSO # build might work on ELF but fail on MachO/COFF. @@ -229,56 +231,58 @@ macro(add_flag_if_supported flag name) append_if("CXX_SUPPORTS_${name}" "${flag}" CMAKE_CXX_FLAGS) endmacro() -function(add_flag_or_print_warning flag name) - check_c_compiler_flag("-Werror ${flag}" "C_SUPPORTS_${name}") - check_cxx_compiler_flag("-Werror ${flag}" "CXX_SUPPORTS_${name}") - if (C_SUPPORTS_${name} AND CXX_SUPPORTS_${name}) - message(STATUS "Building with ${flag}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${flag}" PARENT_SCOPE) - else() - message(WARNING "${flag} is not supported.") - endif() -endfunction() - -if( LLVM_ENABLE_LLD ) - if ( LLVM_USE_LINKER ) - message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time") - endif() - # In case of MSVC cmake always invokes the linker directly, so the linker - # should be specified by CMAKE_LINKER cmake variable instead of by -fuse-ld - # compiler option. - if ( NOT MSVC ) - set(LLVM_USE_LINKER "lld") - endif() -endif() - -if( LLVM_ENABLE_PIC ) - if( XCODE ) - # Xcode has -mdynamic-no-pic on by default, which overrides -fPIC. I don't - # know how to disable this, so just force ENABLE_PIC off for now. - message(WARNING "-fPIC not supported with Xcode.") - elseif( WIN32 OR CYGWIN) - # On Windows all code is PIC. MinGW warns if -fPIC is used. - else() - add_flag_or_print_warning("-fPIC" FPIC) - endif() - # GCC for MIPS can miscompile LLVM due to PR37701. - if(CMAKE_COMPILER_IS_GNUCXX AND LLVM_NATIVE_ARCH STREQUAL "Mips" AND - NOT Uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") - add_flag_or_print_warning("-fno-shrink-wrap" FNO_SHRINK_WRAP) - endif() - # gcc with -O3 -fPIC generates TLS sequences that violate the spec on - # Solaris/sparcv9, causing executables created with the system linker - # to SEGV (GCC PR target/96607). - # clang with -O3 -fPIC generates code that SEGVs. - # Both can be worked around by compiling with -O instead. - if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" AND LLVM_NATIVE_ARCH STREQUAL "Sparc") - llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O[23]" "-O") - llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O[23]" "-O") - endif() -endif() +# function(add_flag_or_print_warning flag name) +# check_c_compiler_flag("-Werror ${flag}" "C_SUPPORTS_${name}") +# check_cxx_compiler_flag("-Werror ${flag}" "CXX_SUPPORTS_${name}") +# if (C_SUPPORTS_${name} AND CXX_SUPPORTS_${name}) +# message(STATUS "Building with ${flag}") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) +# set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${flag}" PARENT_SCOPE) +# else() +# message(WARNING "${flag} is not supported.") +# endif() +# endfunction() + +# if( LLVM_ENABLE_LLD ) +# if ( LLVM_USE_LINKER ) +# message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time") +# endif() +# # In case of MSVC cmake always invokes the linker directly, so the linker +# # should be specified by CMAKE_LINKER cmake variable instead of by -fuse-ld +# # compiler option. +# if ( NOT MSVC ) +# set(LLVM_USE_LINKER "lld") +# endif() +# endif() +# LLVM_ENABLE_LLD is OFF + +# ROB: LLVM_ENABLE_PIC is OFF +# if( LLVM_ENABLE_PIC ) +# # if( XCODE ) +# # # Xcode has -mdynamic-no-pic on by default, which overrides -fPIC. I don't +# # # know how to disable this, so just force ENABLE_PIC off for now. +# # message(WARNING "-fPIC not supported with Xcode.") +# # elseif( WIN32 OR CYGWIN) +# # # On Windows all code is PIC. MinGW warns if -fPIC is used. +# # else() +# add_flag_or_print_warning("-fPIC" FPIC) +# # endif() +# # GCC for MIPS can miscompile LLVM due to PR37701. +# # if(CMAKE_COMPILER_IS_GNUCXX AND LLVM_NATIVE_ARCH STREQUAL "Mips" AND +# # NOT Uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") +# # add_flag_or_print_warning("-fno-shrink-wrap" FNO_SHRINK_WRAP) +# # endif() +# # gcc with -O3 -fPIC generates TLS sequences that violate the spec on +# # Solaris/sparcv9, causing executables created with the system linker +# # to SEGV (GCC PR target/96607). +# # clang with -O3 -fPIC generates code that SEGVs. +# # Both can be worked around by compiling with -O instead. +# # if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" AND LLVM_NATIVE_ARCH STREQUAL "Sparc") +# # llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O[23]" "-O") +# # llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O[23]" "-O") +# # endif() +# endif() if(NOT WIN32 AND NOT CYGWIN AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) # MinGW warns if -fvisibility-inlines-hidden is used. @@ -287,25 +291,26 @@ if(NOT WIN32 AND NOT CYGWIN AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND CMAK append_if(SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG "-fvisibility-inlines-hidden" CMAKE_CXX_FLAGS) endif() -if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MINGW) - add_definitions( -D_FILE_OFFSET_BITS=64 ) -endif() - -if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) - # TODO: support other platforms and toolchains. - if( LLVM_BUILD_32_BITS ) - message(STATUS "Building 32 bits executables and libraries.") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32") - - # FIXME: CMAKE_SIZEOF_VOID_P is still 8 - add_definitions(-D_LARGEFILE_SOURCE) - add_definitions(-D_FILE_OFFSET_BITS=64) - endif( LLVM_BUILD_32_BITS ) -endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) +# if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MINGW) +# add_definitions( -D_FILE_OFFSET_BITS=64 ) +# endif() + +# if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) +# # TODO: support other platforms and toolchains. +# # ROB: LLVM_BUILD_32_BITS is OFF +# # if( LLVM_BUILD_32_BITS ) +# # message(STATUS "Building 32 bits executables and libraries.") +# # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") +# # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") +# # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") +# # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") +# # set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32") +# # +# # # FIXME: CMAKE_SIZEOF_VOID_P is still 8 +# # add_definitions(-D_LARGEFILE_SOURCE) +# # add_definitions(-D_FILE_OFFSET_BITS=64) +# # endif( LLVM_BUILD_32_BITS ) +# endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) # If building on a GNU specific 32-bit system, make sure off_t is 64 bits # so that off_t can stored offset > 2GB. @@ -317,507 +322,515 @@ if( CMAKE_SIZEOF_VOID_P EQUAL 4 AND NOT LLVM_FORCE_SMALLFILE_FOR_ANDROID) # FIXME: It isn't handled in LLVM_BUILD_32_BITS. add_definitions( -D_LARGEFILE_SOURCE ) add_definitions( -D_FILE_OFFSET_BITS=64 ) +# cmake_print_variables() +message(FATAL_ERROR "XXX") endif() -if( XCODE ) - # For Xcode enable several build settings that correspond to - # many warnings that are on by default in Clang but are - # not enabled for historical reasons. For versions of Xcode - # that do not support these options they will simply - # be ignored. - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_RETURN_TYPE "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VALUE "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VARIABLE "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_SIGN_COMPARE "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_FUNCTION "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNINITIALIZED_AUTOS "YES") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_BOOL_CONVERSION "YES") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_EMPTY_BODY "YES") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_ENUM_CONVERSION "YES") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_INT_CONVERSION "YES") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_CONSTANT_CONVERSION "YES") - set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_NON_VIRTUAL_DESTRUCTOR "YES") -endif() +# if( XCODE ) +# # For Xcode enable several build settings that correspond to +# # many warnings that are on by default in Clang but are +# # not enabled for historical reasons. For versions of Xcode +# # that do not support these options they will simply +# # be ignored. +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_RETURN_TYPE "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VALUE "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VARIABLE "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_SIGN_COMPARE "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_FUNCTION "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNINITIALIZED_AUTOS "YES") +# set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_BOOL_CONVERSION "YES") +# set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_EMPTY_BODY "YES") +# set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_ENUM_CONVERSION "YES") +# set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_INT_CONVERSION "YES") +# set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_CONSTANT_CONVERSION "YES") +# set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_NON_VIRTUAL_DESTRUCTOR "YES") +# endif() # On Win32 using MS tools, provide an option to set the number of parallel jobs # to use. -if( MSVC_IDE ) - set(LLVM_COMPILER_JOBS "0" CACHE STRING - "Number of parallel compiler jobs. 0 means use all processors. Default is 0.") - if( NOT LLVM_COMPILER_JOBS STREQUAL "1" ) - if( LLVM_COMPILER_JOBS STREQUAL "0" ) - add_definitions( /MP ) - else() - message(STATUS "Number of parallel compiler jobs set to " ${LLVM_COMPILER_JOBS}) - add_definitions( /MP${LLVM_COMPILER_JOBS} ) - endif() - else() - message(STATUS "Parallel compilation disabled") - endif() -endif() +# if( MSVC_IDE ) +# set(LLVM_COMPILER_JOBS "0" CACHE STRING +# "Number of parallel compiler jobs. 0 means use all processors. Default is 0.") +# if( NOT LLVM_COMPILER_JOBS STREQUAL "1" ) +# if( LLVM_COMPILER_JOBS STREQUAL "0" ) +# add_definitions( /MP ) +# else() +# message(STATUS "Number of parallel compiler jobs set to " ${LLVM_COMPILER_JOBS}) +# add_definitions( /MP${LLVM_COMPILER_JOBS} ) +# endif() +# else() +# message(STATUS "Parallel compilation disabled") +# endif() +# endif() # set stack reserved size to ~10MB -if(MSVC) - # CMake previously automatically set this value for MSVC builds, but the - # behavior was changed in CMake 2.8.11 (Issue 12437) to use the MSVC default - # value (1 MB) which is not enough for us in tasks such as parsing recursive - # C++ templates in Clang. - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000") -elseif(MINGW) # FIXME: Also cygwin? - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,16777216") - - # Pass -mbig-obj to mingw gas on Win64. COFF has a 2**16 section limit, and - # on Win64, every COMDAT function creates at least 3 sections: .text, .pdata, - # and .xdata. - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - append("-Wa,-mbig-obj" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() -endif() - -option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON) - -if( MSVC ) - include(ChooseMSVCCRT) - - # Add definitions that make MSVC much less annoying. - add_definitions( - # For some reason MS wants to deprecate a bunch of standard functions... - -D_CRT_SECURE_NO_DEPRECATE - -D_CRT_SECURE_NO_WARNINGS - -D_CRT_NONSTDC_NO_DEPRECATE - -D_CRT_NONSTDC_NO_WARNINGS - -D_SCL_SECURE_NO_DEPRECATE - -D_SCL_SECURE_NO_WARNINGS - ) - - # Tell MSVC to use the Unicode version of the Win32 APIs instead of ANSI. - add_definitions( - -DUNICODE - -D_UNICODE - ) - - if (LLVM_ENABLE_WERROR) - append("/WX" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif (LLVM_ENABLE_WERROR) - - append("/Zc:inline" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - - # Some projects use the __cplusplus preprocessor macro to check support for - # a particular version of the C++ standard. When this option is not specified - # explicitly, macro's value is "199711L" that implies C++98 Standard. - # https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ - append("/Zc:__cplusplus" CMAKE_CXX_FLAGS) - - # Allow users to request PDBs in release mode. CMake offeres the - # RelWithDebInfo configuration, but it uses different optimization settings - # (/Ob1 vs /Ob2 or -O2 vs -O3). LLVM provides this flag so that users can get - # PDBs without changing codegen. - option(LLVM_ENABLE_PDB OFF) - if (LLVM_ENABLE_PDB AND uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE") - append("/Zi" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - # /DEBUG disables linker GC and ICF, but we want those in Release mode. - append("/DEBUG /OPT:REF /OPT:ICF" - CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - - # Disable string literal const->non-const type conversion. - # "When specified, the compiler requires strict const-qualification - # conformance for pointers initialized by using string literals." - append("/Zc:strictStrings" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - - # "Generate Intrinsic Functions". - append("/Oi" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - - # "Enforce type conversion rules". - append("/Zc:rvalueCast" CMAKE_CXX_FLAGS) - - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT LLVM_ENABLE_LTO) - # clang-cl and cl by default produce non-deterministic binaries because - # link.exe /incremental requires a timestamp in the .obj file. clang-cl - # has the flag /Brepro to force deterministic binaries. We want to pass that - # whenever you're building with clang unless you're passing /incremental - # or using LTO (/Brepro with LTO would result in a warning about the flag - # being unused, because we're not generating object files). - # This checks CMAKE_CXX_COMPILER_ID in addition to check_cxx_compiler_flag() - # because cl.exe does not emit an error on flags it doesn't understand, - # letting check_cxx_compiler_flag() claim it understands all flags. - check_cxx_compiler_flag("/Brepro" SUPPORTS_BREPRO) - if (SUPPORTS_BREPRO) - # Check if /INCREMENTAL is passed to the linker and complain that it - # won't work with /Brepro. - string(TOUPPER "${CMAKE_EXE_LINKER_FLAGS}" upper_exe_flags) - string(TOUPPER "${CMAKE_MODULE_LINKER_FLAGS}" upper_module_flags) - string(TOUPPER "${CMAKE_SHARED_LINKER_FLAGS}" upper_shared_flags) - - string(FIND "${upper_exe_flags} ${upper_module_flags} ${upper_shared_flags}" - "/INCREMENTAL" linker_flag_idx) - - if (${linker_flag_idx} GREATER -1) - message(WARNING "/Brepro not compatible with /INCREMENTAL linking - builds will be non-deterministic") - else() - append("/Brepro" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - endif() - endif() - # By default MSVC has a 2^16 limit on the number of sections in an object file, - # but in many objects files need more than that. This flag is to increase the - # number of sections. - append("/bigobj" CMAKE_CXX_FLAGS) -endif( MSVC ) +# if(MSVC) +# # CMake previously automatically set this value for MSVC builds, but the +# # behavior was changed in CMake 2.8.11 (Issue 12437) to use the MSVC default +# # value (1 MB) which is not enough for us in tasks such as parsing recursive +# # C++ templates in Clang. +# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000") +# elseif(MINGW) # FIXME: Also cygwin? +# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,16777216") +# +# # Pass -mbig-obj to mingw gas on Win64. COFF has a 2**16 section limit, and +# # on Win64, every COMDAT function creates at least 3 sections: .text, .pdata, +# # and .xdata. +# if (CMAKE_SIZEOF_VOID_P EQUAL 8) +# append("-Wa,-mbig-obj" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# endif() + +# option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." OFF) # ROB: was ON + +# if( MSVC ) +# include(ChooseMSVCCRT) +# +# # Add definitions that make MSVC much less annoying. +# add_definitions( +# # For some reason MS wants to deprecate a bunch of standard functions... +# -D_CRT_SECURE_NO_DEPRECATE +# -D_CRT_SECURE_NO_WARNINGS +# -D_CRT_NONSTDC_NO_DEPRECATE +# -D_CRT_NONSTDC_NO_WARNINGS +# -D_SCL_SECURE_NO_DEPRECATE +# -D_SCL_SECURE_NO_WARNINGS +# ) +# +# # Tell MSVC to use the Unicode version of the Win32 APIs instead of ANSI. +# add_definitions( +# -DUNICODE +# -D_UNICODE +# ) +# +# # if (LLVM_ENABLE_WERROR) +# # append("/WX" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# # endif (LLVM_ENABLE_WERROR) +# +# append("/Zc:inline" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# +# # Some projects use the __cplusplus preprocessor macro to check support for +# # a particular version of the C++ standard. When this option is not specified +# # explicitly, macro's value is "199711L" that implies C++98 Standard. +# # https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ +# append("/Zc:__cplusplus" CMAKE_CXX_FLAGS) +# +# # Allow users to request PDBs in release mode. CMake offeres the +# # RelWithDebInfo configuration, but it uses different optimization settings +# # (/Ob1 vs /Ob2 or -O2 vs -O3). LLVM provides this flag so that users can get +# # PDBs without changing codegen. +# option(LLVM_ENABLE_PDB OFF) +# if (LLVM_ENABLE_PDB AND uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE") +# append("/Zi" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# # /DEBUG disables linker GC and ICF, but we want those in Release mode. +# append("/DEBUG /OPT:REF /OPT:ICF" +# CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() +# +# # Disable string literal const->non-const type conversion. +# # "When specified, the compiler requires strict const-qualification +# # conformance for pointers initialized by using string literals." +# append("/Zc:strictStrings" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# +# # "Generate Intrinsic Functions". +# append("/Oi" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# +# # "Enforce type conversion rules". +# append("/Zc:rvalueCast" CMAKE_CXX_FLAGS) +# +# if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT LLVM_ENABLE_LTO) +# # clang-cl and cl by default produce non-deterministic binaries because +# # link.exe /incremental requires a timestamp in the .obj file. clang-cl +# # has the flag /Brepro to force deterministic binaries. We want to pass that +# # whenever you're building with clang unless you're passing /incremental +# # or using LTO (/Brepro with LTO would result in a warning about the flag +# # being unused, because we're not generating object files). +# # This checks CMAKE_CXX_COMPILER_ID in addition to check_cxx_compiler_flag() +# # because cl.exe does not emit an error on flags it doesn't understand, +# # letting check_cxx_compiler_flag() claim it understands all flags. +# check_cxx_compiler_flag("/Brepro" SUPPORTS_BREPRO) +# if (SUPPORTS_BREPRO) +# # Check if /INCREMENTAL is passed to the linker and complain that it +# # won't work with /Brepro. +# string(TOUPPER "${CMAKE_EXE_LINKER_FLAGS}" upper_exe_flags) +# string(TOUPPER "${CMAKE_MODULE_LINKER_FLAGS}" upper_module_flags) +# string(TOUPPER "${CMAKE_SHARED_LINKER_FLAGS}" upper_shared_flags) +# +# string(FIND "${upper_exe_flags} ${upper_module_flags} ${upper_shared_flags}" +# "/INCREMENTAL" linker_flag_idx) +# +# if (${linker_flag_idx} GREATER -1) +# message(WARNING "/Brepro not compatible with /INCREMENTAL linking - builds will be non-deterministic") +# else() +# append("/Brepro" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# endif() +# endif() +# # By default MSVC has a 2^16 limit on the number of sections in an object file, +# # but in many objects files need more than that. This flag is to increase the +# # number of sections. +# append("/bigobj" CMAKE_CXX_FLAGS) +# endif( MSVC ) # Warnings-as-errors handling for GCC-compatible compilers: if ( LLVM_COMPILER_IS_GCC_COMPATIBLE ) - append_if(LLVM_ENABLE_WERROR "-Werror" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append_if(LLVM_ENABLE_WERROR "-Wno-error" CMAKE_REQUIRED_FLAGS) + # ROB: LLVM_ENABLE_WERROR is OFF + # append_if(LLVM_ENABLE_WERROR "-Werror" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + # append_if(LLVM_ENABLE_WERROR "-Wno-error" CMAKE_REQUIRED_FLAGS) endif( LLVM_COMPILER_IS_GCC_COMPATIBLE ) # Specific default warnings-as-errors for compilers accepting GCC-compatible warning flags: -if ( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" ) - add_flag_if_supported("-Werror=date-time" WERROR_DATE_TIME) - add_flag_if_supported("-Werror=unguarded-availability-new" WERROR_UNGUARDED_AVAILABILITY_NEW) -endif( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" ) +# if ( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" ) +# add_flag_if_supported("-Werror=date-time" WERROR_DATE_TIME) +# add_flag_if_supported("-Werror=unguarded-availability-new" WERROR_UNGUARDED_AVAILABILITY_NEW) +# endif( LLVM_COMPILER_IS_GCC_COMPATIBLE OR CMAKE_CXX_COMPILER_ID MATCHES "XL" ) # Modules enablement for GCC-compatible compilers: -if ( LLVM_COMPILER_IS_GCC_COMPATIBLE AND LLVM_ENABLE_MODULES ) - set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) - set(module_flags "-fmodules -fmodules-cache-path=${PROJECT_BINARY_DIR}/module.cache") - if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - # On Darwin -fmodules does not imply -fcxx-modules. - set(module_flags "${module_flags} -fcxx-modules") - endif() - if (LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY) - set(module_flags "${module_flags} -Xclang -fmodules-local-submodule-visibility") - endif() - if (LLVM_ENABLE_MODULE_DEBUGGING AND - ((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR - (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))) - set(module_flags "${module_flags} -gmodules") - endif() - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${module_flags}") - - # Check that we can build code with modules enabled, and that repeatedly - # including still manages to respect NDEBUG properly. - CHECK_CXX_SOURCE_COMPILES("#undef NDEBUG - #include - #define NDEBUG - #include - int main() { assert(this code is not compiled); }" - CXX_SUPPORTS_MODULES) - set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) - if (CXX_SUPPORTS_MODULES) - append("${module_flags}" CMAKE_CXX_FLAGS) - else() - message(FATAL_ERROR "LLVM_ENABLE_MODULES is not supported by this compiler") - endif() -endif( LLVM_COMPILER_IS_GCC_COMPATIBLE AND LLVM_ENABLE_MODULES ) - -if (MSVC) - if (NOT CLANG_CL) - set(msvc_warning_flags - # Disabled warnings. - -wd4141 # Suppress ''modifier' : used more than once' (because of __forceinline combined with inline) - -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned' - -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data' - -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data' - -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception' - -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized' - -wd4456 # Suppress 'declaration of 'var' hides local variable' - -wd4457 # Suppress 'declaration of 'var' hides function parameter' - -wd4458 # Suppress 'declaration of 'var' hides class member' - -wd4459 # Suppress 'declaration of 'var' hides global declaration' - -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated' - -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible' - -wd4722 # Suppress 'function' : destructor never returns, potential memory leak - -wd4100 # Suppress 'unreferenced formal parameter' - -wd4127 # Suppress 'conditional expression is constant' - -wd4512 # Suppress 'assignment operator could not be generated' - -wd4505 # Suppress 'unreferenced local function has been removed' - -wd4610 # Suppress ' can never be instantiated' - -wd4510 # Suppress 'default constructor could not be generated' - -wd4702 # Suppress 'unreachable code' - -wd4245 # Suppress ''conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch' - -wd4706 # Suppress 'assignment within conditional expression' - -wd4310 # Suppress 'cast truncates constant value' - -wd4701 # Suppress 'potentially uninitialized local variable' - -wd4703 # Suppress 'potentially uninitialized local pointer variable' - -wd4389 # Suppress 'signed/unsigned mismatch' - -wd4611 # Suppress 'interaction between '_setjmp' and C++ object destruction is non-portable' - -wd4805 # Suppress 'unsafe mix of type and type in operation' - -wd4204 # Suppress 'nonstandard extension used : non-constant aggregate initializer' - -wd4577 # Suppress 'noexcept used with no exception handling mode specified; termination on exception is not guaranteed' - -wd4091 # Suppress 'typedef: ignored on left of '' when no variable is declared' - # C4592 is disabled because of false positives in Visual Studio 2015 - # Update 1. Re-evaluate the usefulness of this diagnostic with Update 2. - -wd4592 # Suppress ''var': symbol will be dynamically initialized (implementation limitation) - -wd4319 # Suppress ''operator' : zero extending 'type' to 'type' of greater size' - # C4709 is disabled because of a bug with Visual Studio 2017 as of - # v15.8.8. Re-evaluate the usefulness of this diagnostic when the bug - # is fixed. - -wd4709 # Suppress comma operator within array index expression - - # Ideally, we'd like this warning to be enabled, but even MSVC 2019 doesn't - # support the 'aligned' attribute in the way that clang sources requires (for - # any code that uses the LLVM_ALIGNAS macro), so this is must be disabled to - # avoid unwanted alignment warnings. - -wd4324 # Suppress 'structure was padded due to __declspec(align())' - - # Promoted warnings. - -w14062 # Promote 'enumerator in switch of enum is not handled' to level 1 warning. - - # Promoted warnings to errors. - -we4238 # Promote 'nonstandard extension used : class rvalue used as lvalue' to error. - ) - endif(NOT CLANG_CL) - - # Enable warnings - if (LLVM_ENABLE_WARNINGS) - # Put /W4 in front of all the -we flags. cl.exe doesn't care, but for - # clang-cl having /W4 after the -we flags will re-enable the warnings - # disabled by -we. - set(msvc_warning_flags "/W4 ${msvc_warning_flags}") - # CMake appends /W3 by default, and having /W3 followed by /W4 will result in - # cl : Command line warning D9025 : overriding '/W3' with '/W4'. Since this is - # a command line warning and not a compiler warning, it cannot be suppressed except - # by fixing the command line. - string(REGEX REPLACE " /W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - string(REGEX REPLACE " /W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - - if (LLVM_ENABLE_PEDANTIC) - # No MSVC equivalent available - endif (LLVM_ENABLE_PEDANTIC) - endif (LLVM_ENABLE_WARNINGS) - - foreach(flag ${msvc_warning_flags}) - append("${flag}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endforeach(flag) -endif (MSVC) - -if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) - - # Don't add -Wall for clang-cl, because it maps -Wall to -Weverything for - # MSVC compatibility. /W4 is added above instead. - if (NOT CLANG_CL) - append("-Wall" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - - append("-Wextra -Wno-unused-parameter -Wwrite-strings" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append("-Wcast-qual" CMAKE_CXX_FLAGS) - - # Turn off missing field initializer warnings for gcc to avoid noise from - # false positives with empty {}. Turn them on otherwise (they're off by - # default for clang). - check_cxx_compiler_flag("-Wmissing-field-initializers" CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG) - if (CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG) - if (CMAKE_COMPILER_IS_GNUCXX) - append("-Wno-missing-field-initializers" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - else() - append("-Wmissing-field-initializers" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - endif() - - if (LLVM_ENABLE_PEDANTIC AND LLVM_COMPILER_IS_GCC_COMPATIBLE) - append("-pedantic" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append("-Wno-long-long" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - - add_flag_if_supported("-Wimplicit-fallthrough" IMPLICIT_FALLTHROUGH_FLAG) - add_flag_if_supported("-Wcovered-switch-default" COVERED_SWITCH_DEFAULT_FLAG) - append_if(USE_NO_UNINITIALIZED "-Wno-uninitialized" CMAKE_CXX_FLAGS) - append_if(USE_NO_MAYBE_UNINITIALIZED "-Wno-maybe-uninitialized" CMAKE_CXX_FLAGS) - - # Disable -Wclass-memaccess, a C++-only warning from GCC 8 that fires on - # LLVM's ADT classes. - check_cxx_compiler_flag("-Wclass-memaccess" CXX_SUPPORTS_CLASS_MEMACCESS_FLAG) - append_if(CXX_SUPPORTS_CLASS_MEMACCESS_FLAG "-Wno-class-memaccess" CMAKE_CXX_FLAGS) - - # Disable -Wredundant-move on GCC>=9. GCC wants to remove std::move in code - # like "A foo(ConvertibleToA a) { return std::move(a); }", but this code does - # not compile (or uses the copy constructor instead) on clang<=3.8. Clang also - # has a -Wredundant-move, but it only fires when the types match exactly, so - # we can keep it here. - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - check_cxx_compiler_flag("-Wredundant-move" CXX_SUPPORTS_REDUNDANT_MOVE_FLAG) - append_if(CXX_SUPPORTS_REDUNDANT_MOVE_FLAG "-Wno-redundant-move" CMAKE_CXX_FLAGS) - endif() - - # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not useful. - check_cxx_compiler_flag("-Wnoexcept-type" CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG) - append_if(CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG "-Wno-noexcept-type" CMAKE_CXX_FLAGS) - - # Check if -Wnon-virtual-dtor warns even though the class is marked final. - # If it does, don't add it. So it won't be added on clang 3.4 and older. - # This also catches cases when -Wnon-virtual-dtor isn't supported by - # the compiler at all. This flag is not activated for gcc since it will - # incorrectly identify a protected non-virtual base when there is a friend - # declaration. Don't activate this in general on Windows as this warning has - # too many false positives on COM-style classes, which are destroyed with - # Release() (PR32286). - if (NOT CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) - set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11 -Werror=non-virtual-dtor") - CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void anchor();protected: ~base();}; - class derived final : public base { public: ~derived();}; - int main() { return 0; }" - CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR) - set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) - append_if(CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR - "-Wnon-virtual-dtor" CMAKE_CXX_FLAGS) - endif() - - # Enable -Wdelete-non-virtual-dtor if available. - add_flag_if_supported("-Wdelete-non-virtual-dtor" DELETE_NON_VIRTUAL_DTOR_FLAG) - - # Enable -Wsuggest-override if it's available, and only if it doesn't - # suggest adding 'override' to functions that are already marked 'final' - # (which means it is disabled for GCC < 9.2). - check_cxx_compiler_flag("-Wsuggest-override" CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) - if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) - set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=suggest-override") - CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void anchor();}; - class derived : base {public: void anchor() final;}; - int main() { return 0; }" - CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL) - set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) - append_if(CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL "-Wsuggest-override" CMAKE_CXX_FLAGS) - endif() - - # Check if -Wcomment is OK with an // comment ending with '\' if the next - # line is also a // comment. - set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror -Wcomment") - CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}" - C_WCOMMENT_ALLOWS_LINE_WRAP) - set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) - if (NOT C_WCOMMENT_ALLOWS_LINE_WRAP) - append("-Wno-comment" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - - # Enable -Wstring-conversion to catch misuse of string literals. - add_flag_if_supported("-Wstring-conversion" STRING_CONVERSION_FLAG) -endif (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) - -if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT LLVM_ENABLE_WARNINGS) - append("-w" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) -endif() - -macro(append_common_sanitizer_flags) - if (NOT MSVC) - # Append -fno-omit-frame-pointer and turn on debug info to get better - # stack traces. - add_flag_if_supported("-fno-omit-frame-pointer" FNO_OMIT_FRAME_POINTER) - if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND - NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") - add_flag_if_supported("-gline-tables-only" GLINE_TABLES_ONLY) - endif() - # Use -O1 even in debug mode, otherwise sanitizers slowdown is too large. - if (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND LLVM_OPTIMIZE_SANITIZED_BUILDS) - add_flag_if_supported("-O1" O1) - endif() - elseif (CLANG_CL) - # Keep frame pointers around. - append("/Oy-" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - # Always ask the linker to produce symbols with asan. - append("/Z7" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append("-debug" CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - endif() -endmacro() +# ROB: LLVM_ENABLE_MODULES is OFF +# if ( LLVM_COMPILER_IS_GCC_COMPATIBLE AND LLVM_ENABLE_MODULES ) +# set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) +# set(module_flags "-fmodules -fmodules-cache-path=${PROJECT_BINARY_DIR}/module.cache") +# if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +# # On Darwin -fmodules does not imply -fcxx-modules. +# set(module_flags "${module_flags} -fcxx-modules") +# endif() +# if (LLVM_ENABLE_LOCAL_SUBMODULE_VISIBILITY) +# set(module_flags "${module_flags} -Xclang -fmodules-local-submodule-visibility") +# endif() +# if (LLVM_ENABLE_MODULE_DEBUGGING AND +# ((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR +# (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))) +# set(module_flags "${module_flags} -gmodules") +# endif() +# set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${module_flags}") +# +# # Check that we can build code with modules enabled, and that repeatedly +# # including still manages to respect NDEBUG properly. +# CHECK_CXX_SOURCE_COMPILES("#undef NDEBUG +# #include +# #define NDEBUG +# #include +# int main() { assert(this code is not compiled); }" +# CXX_SUPPORTS_MODULES) +# set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) +# if (CXX_SUPPORTS_MODULES) +# append("${module_flags}" CMAKE_CXX_FLAGS) +# else() +# message(FATAL_ERROR "LLVM_ENABLE_MODULES is not supported by this compiler") +# endif() +# endif( LLVM_COMPILER_IS_GCC_COMPATIBLE AND LLVM_ENABLE_MODULES ) + +# if (MSVC) +# if (NOT CLANG_CL) +# set(msvc_warning_flags +# # Disabled warnings. +# -wd4141 # Suppress ''modifier' : used more than once' (because of __forceinline combined with inline) +# -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned' +# -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data' +# -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data' +# -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception' +# -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized' +# -wd4456 # Suppress 'declaration of 'var' hides local variable' +# -wd4457 # Suppress 'declaration of 'var' hides function parameter' +# -wd4458 # Suppress 'declaration of 'var' hides class member' +# -wd4459 # Suppress 'declaration of 'var' hides global declaration' +# -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated' +# -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible' +# -wd4722 # Suppress 'function' : destructor never returns, potential memory leak +# -wd4100 # Suppress 'unreferenced formal parameter' +# -wd4127 # Suppress 'conditional expression is constant' +# -wd4512 # Suppress 'assignment operator could not be generated' +# -wd4505 # Suppress 'unreferenced local function has been removed' +# -wd4610 # Suppress ' can never be instantiated' +# -wd4510 # Suppress 'default constructor could not be generated' +# -wd4702 # Suppress 'unreachable code' +# -wd4245 # Suppress ''conversion' : conversion from 'type1' to 'type2', signed/unsigned mismatch' +# -wd4706 # Suppress 'assignment within conditional expression' +# -wd4310 # Suppress 'cast truncates constant value' +# -wd4701 # Suppress 'potentially uninitialized local variable' +# -wd4703 # Suppress 'potentially uninitialized local pointer variable' +# -wd4389 # Suppress 'signed/unsigned mismatch' +# -wd4611 # Suppress 'interaction between '_setjmp' and C++ object destruction is non-portable' +# -wd4805 # Suppress 'unsafe mix of type and type in operation' +# -wd4204 # Suppress 'nonstandard extension used : non-constant aggregate initializer' +# -wd4577 # Suppress 'noexcept used with no exception handling mode specified; termination on exception is not guaranteed' +# -wd4091 # Suppress 'typedef: ignored on left of '' when no variable is declared' +# # C4592 is disabled because of false positives in Visual Studio 2015 +# # Update 1. Re-evaluate the usefulness of this diagnostic with Update 2. +# -wd4592 # Suppress ''var': symbol will be dynamically initialized (implementation limitation) +# -wd4319 # Suppress ''operator' : zero extending 'type' to 'type' of greater size' +# # C4709 is disabled because of a bug with Visual Studio 2017 as of +# # v15.8.8. Re-evaluate the usefulness of this diagnostic when the bug +# # is fixed. +# -wd4709 # Suppress comma operator within array index expression +# +# # Ideally, we'd like this warning to be enabled, but even MSVC 2019 doesn't +# # support the 'aligned' attribute in the way that clang sources requires (for +# # any code that uses the LLVM_ALIGNAS macro), so this is must be disabled to +# # avoid unwanted alignment warnings. +# -wd4324 # Suppress 'structure was padded due to __declspec(align())' +# +# # Promoted warnings. +# -w14062 # Promote 'enumerator in switch of enum is not handled' to level 1 warning. +# +# # Promoted warnings to errors. +# -we4238 # Promote 'nonstandard extension used : class rvalue used as lvalue' to error. +# ) +# endif(NOT CLANG_CL) +# +# # Enable warnings +# if (LLVM_ENABLE_WARNINGS) +# # Put /W4 in front of all the -we flags. cl.exe doesn't care, but for +# # clang-cl having /W4 after the -we flags will re-enable the warnings +# # disabled by -we. +# set(msvc_warning_flags "/W4 ${msvc_warning_flags}") +# # CMake appends /W3 by default, and having /W3 followed by /W4 will result in +# # cl : Command line warning D9025 : overriding '/W3' with '/W4'. Since this is +# # a command line warning and not a compiler warning, it cannot be suppressed except +# # by fixing the command line. +# string(REGEX REPLACE " /W[0-4]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +# string(REGEX REPLACE " /W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +# +# if (LLVM_ENABLE_PEDANTIC) +# # No MSVC equivalent available +# endif (LLVM_ENABLE_PEDANTIC) +# endif (LLVM_ENABLE_WARNINGS) +# +# foreach(flag ${msvc_warning_flags}) +# append("${flag}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endforeach(flag) +# endif (MSVC) + +# if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) +# +# # Don't add -Wall for clang-cl, because it maps -Wall to -Weverything for +# # MSVC compatibility. /W4 is added above instead. +# if (NOT CLANG_CL) +# append("-Wall" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# +# append("-Wextra -Wno-unused-parameter -Wwrite-strings" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# append("-Wcast-qual" CMAKE_CXX_FLAGS) +# +# # Turn off missing field initializer warnings for gcc to avoid noise from +# # false positives with empty {}. Turn them on otherwise (they're off by +# # default for clang). +# check_cxx_compiler_flag("-Wmissing-field-initializers" CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG) +# if (CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG) +# if (CMAKE_COMPILER_IS_GNUCXX) +# append("-Wno-missing-field-initializers" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# else() +# append("-Wmissing-field-initializers" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# endif() +# +# # ROB: warning settings are ignored +# # if (LLVM_ENABLE_PEDANTIC AND LLVM_COMPILER_IS_GCC_COMPATIBLE) +# # append("-pedantic" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# # append("-Wno-long-long" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# # endif() +# +# add_flag_if_supported("-Wimplicit-fallthrough" IMPLICIT_FALLTHROUGH_FLAG) +# add_flag_if_supported("-Wcovered-switch-default" COVERED_SWITCH_DEFAULT_FLAG) +# # append_if(USE_NO_UNINITIALIZED "-Wno-uninitialized" CMAKE_CXX_FLAGS) +# # append_if(USE_NO_MAYBE_UNINITIALIZED "-Wno-maybe-uninitialized" CMAKE_CXX_FLAGS) +# +# # Disable -Wclass-memaccess, a C++-only warning from GCC 8 that fires on +# # LLVM's ADT classes. +# check_cxx_compiler_flag("-Wclass-memaccess" CXX_SUPPORTS_CLASS_MEMACCESS_FLAG) +# append_if(CXX_SUPPORTS_CLASS_MEMACCESS_FLAG "-Wno-class-memaccess" CMAKE_CXX_FLAGS) +# +# # Disable -Wredundant-move on GCC>=9. GCC wants to remove std::move in code +# # like "A foo(ConvertibleToA a) { return std::move(a); }", but this code does +# # not compile (or uses the copy constructor instead) on clang<=3.8. Clang also +# # has a -Wredundant-move, but it only fires when the types match exactly, so +# # we can keep it here. +# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +# check_cxx_compiler_flag("-Wredundant-move" CXX_SUPPORTS_REDUNDANT_MOVE_FLAG) +# append_if(CXX_SUPPORTS_REDUNDANT_MOVE_FLAG "-Wno-redundant-move" CMAKE_CXX_FLAGS) +# endif() +# +# # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not useful. +# check_cxx_compiler_flag("-Wnoexcept-type" CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG) +# append_if(CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG "-Wno-noexcept-type" CMAKE_CXX_FLAGS) +# +# # Check if -Wnon-virtual-dtor warns even though the class is marked final. +# # If it does, don't add it. So it won't be added on clang 3.4 and older. +# # This also catches cases when -Wnon-virtual-dtor isn't supported by +# # the compiler at all. This flag is not activated for gcc since it will +# # incorrectly identify a protected non-virtual base when there is a friend +# # declaration. Don't activate this in general on Windows as this warning has +# # too many false positives on COM-style classes, which are destroyed with +# # Release() (PR32286). +# if (NOT CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) +# set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) +# set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11 -Werror=non-virtual-dtor") +# CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void anchor();protected: ~base();}; +# class derived final : public base { public: ~derived();}; +# int main() { return 0; }" +# CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR) +# set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) +# append_if(CXX_WONT_WARN_ON_FINAL_NONVIRTUALDTOR +# "-Wnon-virtual-dtor" CMAKE_CXX_FLAGS) +# endif() +# +# # Enable -Wdelete-non-virtual-dtor if available. +# add_flag_if_supported("-Wdelete-non-virtual-dtor" DELETE_NON_VIRTUAL_DTOR_FLAG) +# +# # Enable -Wsuggest-override if it's available, and only if it doesn't +# # suggest adding 'override' to functions that are already marked 'final' +# # (which means it is disabled for GCC < 9.2). +# check_cxx_compiler_flag("-Wsuggest-override" CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) +# if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) +# set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) +# set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=suggest-override") +# CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void anchor();}; +# class derived : base {public: void anchor() final;}; +# int main() { return 0; }" +# CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL) +# set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) +# append_if(CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL "-Wsuggest-override" CMAKE_CXX_FLAGS) +# endif() +# +# # Check if -Wcomment is OK with an // comment ending with '\' if the next +# # line is also a // comment. +# set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) +# set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror -Wcomment") +# CHECK_C_SOURCE_COMPILES("// \\\\\\n//\\nint main() {return 0;}" +# C_WCOMMENT_ALLOWS_LINE_WRAP) +# set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) +# if (NOT C_WCOMMENT_ALLOWS_LINE_WRAP) +# append("-Wno-comment" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# +# # Enable -Wstring-conversion to catch misuse of string literals. +# add_flag_if_supported("-Wstring-conversion" STRING_CONVERSION_FLAG) +# endif (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) +# +# if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT LLVM_ENABLE_WARNINGS) +# append("-w" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() + +# ROB: function not used +# macro(append_common_sanitizer_flags) +# if (NOT MSVC) +# # Append -fno-omit-frame-pointer and turn on debug info to get better +# # stack traces. +# add_flag_if_supported("-fno-omit-frame-pointer" FNO_OMIT_FRAME_POINTER) +# if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND +# NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") +# add_flag_if_supported("-gline-tables-only" GLINE_TABLES_ONLY) +# endif() +# # Use -O1 even in debug mode, otherwise sanitizers slowdown is too large. +# if (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND LLVM_OPTIMIZE_SANITIZED_BUILDS) +# add_flag_if_supported("-O1" O1) +# endif() +# elseif (CLANG_CL) +# # Keep frame pointers around. +# append("/Oy-" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# # Always ask the linker to produce symbols with asan. +# append("/Z7" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# append("-debug" CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +# endif() +# endmacro() # Turn on sanitizers if necessary. -if(LLVM_USE_SANITIZER) - if (LLVM_ON_UNIX) - if (LLVM_USE_SANITIZER STREQUAL "Address") - append_common_sanitizer_flags() - append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER STREQUAL "HWAddress") - append_common_sanitizer_flags() - append("-fsanitize=hwaddress" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER MATCHES "Memory(WithOrigins)?") - append_common_sanitizer_flags() - append("-fsanitize=memory" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - if(LLVM_USE_SANITIZER STREQUAL "MemoryWithOrigins") - append("-fsanitize-memory-track-origins" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - elseif (LLVM_USE_SANITIZER STREQUAL "Undefined") - append_common_sanitizer_flags() - append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER STREQUAL "Thread") - append_common_sanitizer_flags() - append("-fsanitize=thread" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER STREQUAL "DataFlow") - append("-fsanitize=dataflow" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER STREQUAL "Address;Undefined" OR - LLVM_USE_SANITIZER STREQUAL "Undefined;Address") - append_common_sanitizer_flags() - append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - elseif (LLVM_USE_SANITIZER STREQUAL "Leaks") - append_common_sanitizer_flags() - append("-fsanitize=leak" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - else() - message(FATAL_ERROR "Unsupported value of LLVM_USE_SANITIZER: ${LLVM_USE_SANITIZER}") - endif() - elseif(MSVC) - if (LLVM_USE_SANITIZER STREQUAL "Address") - append_common_sanitizer_flags() - append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - else() - message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${LLVM_USE_SANITIZER}") - endif() - else() - message(FATAL_ERROR "LLVM_USE_SANITIZER is not supported on this platform.") - endif() - if (LLVM_USE_SANITIZER MATCHES "(Undefined;)?Address(;Undefined)?") - add_flag_if_supported("-fsanitize-address-use-after-scope" - FSANITIZE_USE_AFTER_SCOPE_FLAG) - endif() - if (LLVM_USE_SANITIZE_COVERAGE) - append("-fsanitize=fuzzer-no-link" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - if (LLVM_USE_SANITIZER MATCHES ".*Undefined.*") - set(BLACKLIST_FILE "${CMAKE_SOURCE_DIR}/utils/sanitizers/ubsan_blacklist.txt") - if (EXISTS "${BLACKLIST_FILE}") - append("-fsanitize-blacklist=${BLACKLIST_FILE}" - CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() - endif() -endif() +# ROB: LLVM_USE_SANITIZER is OFF +# if(LLVM_USE_SANITIZER) +# if (LLVM_ON_UNIX) +# if (LLVM_USE_SANITIZER STREQUAL "Address") +# append_common_sanitizer_flags() +# append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER STREQUAL "HWAddress") +# append_common_sanitizer_flags() +# append("-fsanitize=hwaddress" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER MATCHES "Memory(WithOrigins)?") +# append_common_sanitizer_flags() +# append("-fsanitize=memory" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# if(LLVM_USE_SANITIZER STREQUAL "MemoryWithOrigins") +# append("-fsanitize-memory-track-origins" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# elseif (LLVM_USE_SANITIZER STREQUAL "Undefined") +# append_common_sanitizer_flags() +# append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER STREQUAL "Thread") +# append_common_sanitizer_flags() +# append("-fsanitize=thread" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER STREQUAL "DataFlow") +# append("-fsanitize=dataflow" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER STREQUAL "Address;Undefined" OR +# LLVM_USE_SANITIZER STREQUAL "Undefined;Address") +# append_common_sanitizer_flags() +# append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# elseif (LLVM_USE_SANITIZER STREQUAL "Leaks") +# append_common_sanitizer_flags() +# append("-fsanitize=leak" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# else() +# message(FATAL_ERROR "Unsupported value of LLVM_USE_SANITIZER: ${LLVM_USE_SANITIZER}") +# endif() +# elseif(MSVC) +# if (LLVM_USE_SANITIZER STREQUAL "Address") +# append_common_sanitizer_flags() +# append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# else() +# message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${LLVM_USE_SANITIZER}") +# endif() +# else() +# message(FATAL_ERROR "LLVM_USE_SANITIZER is not supported on this platform.") +# endif() +# if (LLVM_USE_SANITIZER MATCHES "(Undefined;)?Address(;Undefined)?") +# add_flag_if_supported("-fsanitize-address-use-after-scope" +# FSANITIZE_USE_AFTER_SCOPE_FLAG) +# endif() +# if (LLVM_USE_SANITIZE_COVERAGE) +# append("-fsanitize=fuzzer-no-link" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# if (LLVM_USE_SANITIZER MATCHES ".*Undefined.*") +# set(BLACKLIST_FILE "${CMAKE_SOURCE_DIR}/utils/sanitizers/ubsan_blacklist.txt") +# if (EXISTS "${BLACKLIST_FILE}") +# append("-fsanitize-blacklist=${BLACKLIST_FILE}" +# CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() +# endif() +# endif() # Turn on -gsplit-dwarf if requested in debug builds. -if (LLVM_USE_SPLIT_DWARF AND - ((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR - (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))) - # Limit to clang and gcc so far. Add compilers supporting this option. - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR - CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - add_compile_options(-gsplit-dwarf) - endif() -endif() +# ROB: LLVM_USE_SPLIT_DWARF is OFF +# if (LLVM_USE_SPLIT_DWARF AND +# ((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR +# (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))) +# # Limit to clang and gcc so far. Add compilers supporting this option. +# if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR +# CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +# add_compile_options(-gsplit-dwarf) +# endif() +# endif() add_definitions( -D__STDC_CONSTANT_MACROS ) add_definitions( -D__STDC_FORMAT_MACROS ) add_definitions( -D__STDC_LIMIT_MACROS ) # clang and gcc don't default-print colored diagnostics when invoked from Ninja. -if (UNIX AND - CMAKE_GENERATOR STREQUAL "Ninja" AND - (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR - (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND - NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)))) - append("-fdiagnostics-color" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) -endif() +# if (UNIX AND +# CMAKE_GENERATOR STREQUAL "Ninja" AND +# (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR +# (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND +# NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)))) +# append("-fdiagnostics-color" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() # lld doesn't print colored diagnostics when invoked from Ninja -if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja") - include(CheckLinkerFlag) - check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS) - append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics" - CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) -endif() +# if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja") +# include(CheckLinkerFlag) +# check_linker_flag("-Wl,--color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS) +# append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,--color-diagnostics" +# CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +# endif() # Add flags for add_dead_strip(). # FIXME: With MSVS, consider compiling with /Gy and linking with /OPT:REF? @@ -836,138 +849,141 @@ if(NOT CYGWIN AND NOT WIN32) endif() add_flag_if_supported("-fdata-sections" FDATA_SECTIONS) endif() -elseif(MSVC) - if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) - append("/Gw" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - endif() +# elseif(MSVC) +# if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) +# append("/Gw" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# endif() endif() -if(MSVC) - # Remove flags here, for exceptions and RTTI. - # Each target property or source property should be responsible to control - # them. - # CL.EXE complains to override flags like "/GR /GR-". - string(REGEX REPLACE "(^| ) */EH[-cs]+ *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REGEX REPLACE "(^| ) */GR-? *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -endif() +# if(MSVC) +# # Remove flags here, for exceptions and RTTI. +# # Each target property or source property should be responsible to control +# # them. +# # CL.EXE complains to override flags like "/GR /GR-". +# string(REGEX REPLACE "(^| ) */EH[-cs]+ *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +# string(REGEX REPLACE "(^| ) */GR-? *( |$)" "\\1 \\2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +# endif() # Provide public options to globally control RTTI and EH -option(LLVM_ENABLE_EH "Enable Exception handling" OFF) -option(LLVM_ENABLE_RTTI "Enable run time type information" OFF) +option(LLVM_ENABLE_EH "Enable Exception handling" ON) # ROB: was ON, but force set to true from outside +option(LLVM_ENABLE_RTTI "Enable run time type information" ON) # ROB: was OFF, but force set to true from outside if(LLVM_ENABLE_EH AND NOT LLVM_ENABLE_RTTI) message(FATAL_ERROR "Exception handling requires RTTI. You must set LLVM_ENABLE_RTTI to ON") endif() -option(LLVM_USE_NEWPM "Build LLVM using the experimental new pass manager" Off) -mark_as_advanced(LLVM_USE_NEWPM) -if (LLVM_USE_NEWPM) - append("-fexperimental-new-pass-manager" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) -endif() - -option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (deprecated)" Off) -mark_as_advanced(LLVM_ENABLE_IR_PGO) - -set(LLVM_BUILD_INSTRUMENTED OFF CACHE STRING "Build LLVM and tools with PGO instrumentation. May be specified as IR or Frontend") -set(LLVM_VP_COUNTERS_PER_SITE "1.5" CACHE STRING "Value profile counters to use per site for IR PGO with Clang") -mark_as_advanced(LLVM_BUILD_INSTRUMENTED LLVM_VP_COUNTERS_PER_SITE) -string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" uppercase_LLVM_BUILD_INSTRUMENTED) - -if (LLVM_BUILD_INSTRUMENTED) - if (LLVM_ENABLE_IR_PGO OR uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "IR") - append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - # Set this to avoid running out of the value profile node section - # under clang in dynamic linking mode. - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11 AND - LLVM_LINK_LLVM_DYLIB) - append("-Xclang -mllvm -Xclang -vp-counters-per-site=${LLVM_VP_COUNTERS_PER_SITE}" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - endif() - elseif(uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "CSIR") - append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - else() - append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - endif() -endif() +# option(LLVM_USE_NEWPM "Build LLVM using the experimental new pass manager" Off) +# mark_as_advanced(LLVM_USE_NEWPM) +# if (LLVM_USE_NEWPM) +# append("-fexperimental-new-pass-manager" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() + +# option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (deprecated)" Off) +# mark_as_advanced(LLVM_ENABLE_IR_PGO) + +# set(LLVM_BUILD_INSTRUMENTED OFF CACHE STRING "Build LLVM and tools with PGO instrumentation. May be specified as IR or Frontend") +# set(LLVM_VP_COUNTERS_PER_SITE "1.5" CACHE STRING "Value profile counters to use per site for IR PGO with Clang") +# mark_as_advanced(LLVM_BUILD_INSTRUMENTED LLVM_VP_COUNTERS_PER_SITE) +# string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" uppercase_LLVM_BUILD_INSTRUMENTED) + +# ROB: don't instrument the build +# if (LLVM_BUILD_INSTRUMENTED) +# if (LLVM_ENABLE_IR_PGO OR uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "IR") +# append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\"" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS) +# if(NOT LINKER_IS_LLD_LINK) +# append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\"" +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() +# # Set this to avoid running out of the value profile node section +# # under clang in dynamic linking mode. +# if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND +# CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11 AND +# LLVM_LINK_LLVM_DYLIB) +# append("-Xclang -mllvm -Xclang -vp-counters-per-site=${LLVM_VP_COUNTERS_PER_SITE}" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS) +# endif() +# elseif(uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "CSIR") +# append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\"" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS) +# if(NOT LINKER_IS_LLD_LINK) +# append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\"" +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() +# else() +# append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\"" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS) +# if(NOT LINKER_IS_LLD_LINK) +# append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\"" +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() +# endif() +# endif() # When using clang-cl with an instrumentation-based tool, add clang's library # resource directory to the library search path. Because cmake invokes the # linker directly, it isn't sufficient to pass -fsanitize=* to the linker. -if (CLANG_CL AND (LLVM_BUILD_INSTRUMENTED OR LLVM_USE_SANITIZER)) - execute_process( - COMMAND ${CMAKE_CXX_COMPILER} /clang:-print-resource-dir - OUTPUT_VARIABLE clang_resource_dir - ERROR_VARIABLE clang_cl_stderr - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE clang_cl_exit_code) - if (NOT "${clang_cl_exit_code}" STREQUAL "0") - message(FATAL_ERROR - "Unable to invoke clang-cl to find resource dir: ${clang_cl_stderr}") - endif() - file(TO_CMAKE_PATH "${clang_resource_dir}" clang_resource_dir) - append("/libpath:${clang_resource_dir}/lib/windows" - CMAKE_EXE_LINKER_FLAGS - CMAKE_MODULE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) -endif() - -if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE}) - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) - append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - else() - message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang") - endif() -endif() - -option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off) -mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE) -append_if(LLVM_BUILD_INSTRUMENTED_COVERAGE "-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\" -fcoverage-mapping" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - -if (LLVM_BUILD_INSTRUMENTED AND LLVM_BUILD_INSTRUMENTED_COVERAGE) - message(FATAL_ERROR "LLVM_BUILD_INSTRUMENTED and LLVM_BUILD_INSTRUMENTED_COVERAGE cannot both be specified") -endif() - -if(LLVM_ENABLE_LTO AND LLVM_ON_WIN32 AND NOT LINKER_IS_LLD_LINK AND NOT MINGW) - message(FATAL_ERROR "When compiling for Windows, LLVM_ENABLE_LTO requires using lld as the linker (point CMAKE_LINKER at lld-link.exe)") -endif() +# ROB: neither use sanitizers nor instrument +# if (CLANG_CL AND (LLVM_BUILD_INSTRUMENTED OR LLVM_USE_SANITIZER)) +# execute_process( +# COMMAND ${CMAKE_CXX_COMPILER} /clang:-print-resource-dir +# OUTPUT_VARIABLE clang_resource_dir +# ERROR_VARIABLE clang_cl_stderr +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# RESULT_VARIABLE clang_cl_exit_code) +# if (NOT "${clang_cl_exit_code}" STREQUAL "0") +# message(FATAL_ERROR +# "Unable to invoke clang-cl to find resource dir: ${clang_cl_stderr}") +# endif() +# file(TO_CMAKE_PATH "${clang_resource_dir}" clang_resource_dir) +# append("/libpath:${clang_resource_dir}/lib/windows" +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_MODULE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() + +# ROB: LLVM_PROFDATA_FILE is OFF +# if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE}) +# if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) +# append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS) +# if(NOT LINKER_IS_LLD_LINK) +# append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# endif() +# else() +# message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang") +# endif() +# endif() + +# option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off) +# mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE) +# append_if(LLVM_BUILD_INSTRUMENTED_COVERAGE "-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\" -fcoverage-mapping" +# CMAKE_CXX_FLAGS +# CMAKE_C_FLAGS +# CMAKE_EXE_LINKER_FLAGS +# CMAKE_SHARED_LINKER_FLAGS) +# +# if (LLVM_BUILD_INSTRUMENTED AND LLVM_BUILD_INSTRUMENTED_COVERAGE) +# message(FATAL_ERROR "LLVM_BUILD_INSTRUMENTED and LLVM_BUILD_INSTRUMENTED_COVERAGE cannot both be specified") +# endif() + +# if(LLVM_ENABLE_LTO AND LLVM_ON_WIN32 AND NOT LINKER_IS_LLD_LINK AND NOT MINGW) +# message(FATAL_ERROR "When compiling for Windows, LLVM_ENABLE_LTO requires using lld as the linker (point CMAKE_LINKER at lld-link.exe)") +# endif() if(uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") append("-flto=thin" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) if(NOT LINKER_IS_LLD_LINK) @@ -977,10 +993,10 @@ if(uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") # time a little since we re-link a lot of the same objects, and significantly # improves incremental build time. # FIXME: We should move all this logic into the clang driver. - if(APPLE) - append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache" - CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - elseif((UNIX OR MINGW) AND LLVM_USE_LINKER STREQUAL "lld") + # if(APPLE) + # append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache" + # CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) + if((UNIX OR MINGW) AND LLVM_USE_LINKER STREQUAL "lld") append("-Wl,--thinlto-cache-dir=${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) elseif(LLVM_USE_LINKER STREQUAL "gold") @@ -995,19 +1011,21 @@ elseif(uppercase_LLVM_ENABLE_LTO STREQUAL "FULL") if(NOT LINKER_IS_LLD_LINK) append("-flto=full" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() -elseif(LLVM_ENABLE_LTO) - append("-flto" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-flto" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - endif() +# ROB: LTO is OFF +# elseif(LLVM_ENABLE_LTO) +# append("-flto" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) +# if(NOT LINKER_IS_LLD_LINK) +# append("-flto" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +# endif() endif() # Set an AIX default for LLVM_EXPORT_SYMBOLS_FOR_PLUGINS based on whether we are # doing dynamic linking (see below). -set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default OFF) -if (NOT (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB)) - set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default ON) -endif() +# ROB: what is this crap? +# set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default OFF) +# if (NOT (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB)) +# set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default ON) +# endif() # This option makes utils/extract_symbols.py be used to determine the list of # symbols to export from LLVM tools. This is necessary when on AIX or when using @@ -1016,15 +1034,16 @@ endif() # linking (due to incompatibility). With MSVC, note that the plugin has to # explicitly link against (exactly one) tool so we can't unilaterally turn on # LLVM_ENABLE_PLUGINS when it's enabled. -CMAKE_DEPENDENT_OPTION(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS - "Export symbols from LLVM tools so that plugins can import them" OFF - "NOT ${CMAKE_SYSTEM_NAME} MATCHES AIX" ${LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default}) -if(BUILD_SHARED_LIBS AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) - message(FATAL_ERROR "BUILD_SHARED_LIBS not compatible with LLVM_EXPORT_SYMBOLS_FOR_PLUGINS") -endif() -if(LLVM_LINK_LLVM_DYLIB AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) - message(FATAL_ERROR "LLVM_LINK_LLVM_DYLIB not compatible with LLVM_EXPORT_SYMBOLS_FOR_PLUGINS") -endif() +# CMAKE_DEPENDENT_OPTION(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS +# "Export symbols from LLVM tools so that plugins can import them" OFF +# "NOT ${CMAKE_SYSTEM_NAME} MATCHES AIX" ${LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default}) +# if(BUILD_SHARED_LIBS AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) +# message(FATAL_ERROR "BUILD_SHARED_LIBS not compatible with LLVM_EXPORT_SYMBOLS_FOR_PLUGINS") +# endif() +# ROB: LLVM_LINK_LLVM_DYLIB is OFF +# if(LLVM_LINK_LLVM_DYLIB AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) +# message(FATAL_ERROR "LLVM_LINK_LLVM_DYLIB not compatible with LLVM_EXPORT_SYMBOLS_FOR_PLUGINS") +# endif() # By default we should enable LLVM_ENABLE_IDE only for multi-configuration # generators. This option disables optional build system features that make IDEs @@ -1040,78 +1059,79 @@ if (CMAKE_CONFIGURATION_TYPES AND NOT LLVM_ENABLE_IDE) message(WARNING "Disabling LLVM_ENABLE_IDE on multi-configuration generators is not recommended.") endif() -function(get_compile_definitions) - get_directory_property(top_dir_definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) - foreach(definition ${top_dir_definitions}) - if(DEFINED result) - string(APPEND result " -D${definition}") - else() - set(result "-D${definition}") - endif() - endforeach() - set(LLVM_DEFINITIONS "${result}" PARENT_SCOPE) -endfunction() -get_compile_definitions() - -option(LLVM_FORCE_ENABLE_STATS "Enable statistics collection for builds that wouldn't normally enable it" OFF) - -check_symbol_exists(os_signpost_interval_begin "os/signpost.h" macos_signposts_available) -if(macos_signposts_available) - check_cxx_source_compiles( - "#include - int main() { os_signpost_interval_begin(nullptr, 0, \"\", \"\"); return 0; }" - macos_signposts_usable) - if(macos_signposts_usable) - set(LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS "WITH_ASSERTS" CACHE STRING - "Enable support for Xcode signposts. Can be WITH_ASSERTS, FORCE_ON, FORCE_OFF") - string(TOUPPER "${LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS}" - uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS) - if( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "WITH_ASSERTS" ) - if( LLVM_ENABLE_ASSERTIONS ) - set( LLVM_SUPPORT_XCODE_SIGNPOSTS 1 ) - endif() - elseif( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "FORCE_ON" ) - set( LLVM_SUPPORT_XCODE_SIGNPOSTS 1 ) - elseif( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "FORCE_OFF" ) - # We don't need to do anything special to turn off signposts. - elseif( NOT DEFINED LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS ) - # Treat LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS like "FORCE_OFF" when it has not been - # defined. - else() - message(FATAL_ERROR "Unknown value for LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS:" - " \"${LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS}\"!") - endif() - endif() -endif() - -set(LLVM_SOURCE_PREFIX "" CACHE STRING "Use prefix for sources") - -option(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO "Use relative paths in debug info" OFF) - -if(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO) - check_c_compiler_flag("-fdebug-prefix-map=foo=bar" SUPPORTS_FDEBUG_PREFIX_MAP) - if(LLVM_ENABLE_PROJECTS_USED) - get_filename_component(source_root "${LLVM_MAIN_SRC_DIR}/.." ABSOLUTE) - else() - set(source_root "${LLVM_MAIN_SRC_DIR}") - endif() - file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}") - append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) -endif() - -option(LLVM_USE_RELATIVE_PATHS_IN_FILES "Use relative paths in sources and debug info" OFF) - -if(LLVM_USE_RELATIVE_PATHS_IN_FILES) - check_c_compiler_flag("-ffile-prefix-map=foo=bar" SUPPORTS_FFILE_PREFIX_MAP) - if(LLVM_ENABLE_PROJECTS_USED) - get_filename_component(source_root "${LLVM_MAIN_SRC_DIR}/.." ABSOLUTE) - else() - set(source_root "${LLVM_MAIN_SRC_DIR}") - endif() - file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}") - append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) - add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) -endif() +# function(get_compile_definitions) +# get_directory_property(top_dir_definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) +# foreach(definition ${top_dir_definitions}) +# if(DEFINED result) +# string(APPEND result " -D${definition}") +# else() +# set(result "-D${definition}") +# endif() +# endforeach() +# set(LLVM_DEFINITIONS "${result}" PARENT_SCOPE) +# endfunction() +# get_compile_definitions() + +# option(LLVM_FORCE_ENABLE_STATS "Enable statistics collection for builds that wouldn't normally enable it" OFF) + +# check_symbol_exists(os_signpost_interval_begin "os/signpost.h" macos_signposts_available) +# if(macos_signposts_available) +# message(FATAL_ERROR "XXX") +# check_cxx_source_compiles( +# "#include +# int main() { os_signpost_interval_begin(nullptr, 0, \"\", \"\"); return 0; }" +# macos_signposts_usable) +# if(macos_signposts_usable) +# set(LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS "WITH_ASSERTS" CACHE STRING +# "Enable support for Xcode signposts. Can be WITH_ASSERTS, FORCE_ON, FORCE_OFF") +# string(TOUPPER "${LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS}" +# uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS) +# if( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "WITH_ASSERTS" ) +# if( LLVM_ENABLE_ASSERTIONS ) +# set( LLVM_SUPPORT_XCODE_SIGNPOSTS 1 ) +# endif() +# elseif( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "FORCE_ON" ) +# set( LLVM_SUPPORT_XCODE_SIGNPOSTS 1 ) +# elseif( uppercase_LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS STREQUAL "FORCE_OFF" ) +# # We don't need to do anything special to turn off signposts. +# elseif( NOT DEFINED LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS ) +# # Treat LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS like "FORCE_OFF" when it has not been +# # defined. +# else() +# message(FATAL_ERROR "Unknown value for LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS:" +# " \"${LLVM_ENABLE_SUPPORT_XCODE_SIGNPOSTS}\"!") +# endif() +# endif() +# endif() +# +# set(LLVM_SOURCE_PREFIX "" CACHE STRING "Use prefix for sources") + +# option(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO "Use relative paths in debug info" OFF) +# +# if(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO) +# check_c_compiler_flag("-fdebug-prefix-map=foo=bar" SUPPORTS_FDEBUG_PREFIX_MAP) +# if(LLVM_ENABLE_PROJECTS_USED) +# get_filename_component(source_root "${LLVM_MAIN_SRC_DIR}/.." ABSOLUTE) +# else() +# set(source_root "${LLVM_MAIN_SRC_DIR}") +# endif() +# file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}") +# append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) +# endif() +# +# option(LLVM_USE_RELATIVE_PATHS_IN_FILES "Use relative paths in sources and debug info" OFF) +# +# if(LLVM_USE_RELATIVE_PATHS_IN_FILES) +# check_c_compiler_flag("-ffile-prefix-map=foo=bar" SUPPORTS_FFILE_PREFIX_MAP) +# if(LLVM_ENABLE_PROJECTS_USED) +# get_filename_component(source_root "${LLVM_MAIN_SRC_DIR}/.." ABSOLUTE) +# else() +# set(source_root "${LLVM_MAIN_SRC_DIR}") +# endif() +# file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}") +# append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +# add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) +# endif() diff --git a/llvm/cmake/modules/HandleLLVMStdlib.cmake b/llvm/cmake/modules/HandleLLVMStdlib.cmake index b67d87d4..6ab70e93 100644 --- a/llvm/cmake/modules/HandleLLVMStdlib.cmake +++ b/llvm/cmake/modules/HandleLLVMStdlib.cmake @@ -6,49 +6,51 @@ 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() + # function(append value) + # foreach(variable ${ARGN}) + # set(${variable} "${${variable}} ${value}" PARENT_SCOPE) + # endforeach(variable) + # endfunction() include(CheckCXXCompilerFlag) include(CheckLinkerFlag) set(LLVM_LIBCXX_USED 0) - if(LLVM_ENABLE_LIBCXX) - if(LLVM_COMPILER_IS_GCC_COMPATIBLE) - check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB) - check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB) - if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB) - append("-stdlib=libc++" - CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS - CMAKE_MODULE_LINKER_FLAGS) - set(LLVM_LIBCXX_USED 1) - else() - message(WARNING "Can't specify libc++ with '-stdlib='") - endif() - else() - message(WARNING "Not sure how to specify libc++ for this compiler") - endif() - endif() + # ROB: LLVM_ENABLE_LIBCXX is OFF + # if(LLVM_ENABLE_LIBCXX) + # if(LLVM_COMPILER_IS_GCC_COMPATIBLE) + # check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB) + # check_linker_flag("-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB) + # if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB) + # append("-stdlib=libc++" + # CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS + # CMAKE_MODULE_LINKER_FLAGS) + # set(LLVM_LIBCXX_USED 1) + # else() + # message(WARNING "Can't specify libc++ with '-stdlib='") + # endif() + # else() + # message(WARNING "Not sure how to specify libc++ for this compiler") + # endif() + # endif() - if(LLVM_STATIC_LINK_CXX_STDLIB) - if(LLVM_COMPILER_IS_GCC_COMPATIBLE) - check_cxx_compiler_flag("-static-libstdc++" - CXX_COMPILER_SUPPORTS_STATIC_STDLIB) - check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB) - if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND - CXX_LINKER_SUPPORTS_STATIC_STDLIB) - append("-static-libstdc++" - CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS - CMAKE_MODULE_LINKER_FLAGS) - else() - message(WARNING - "Can't specify static linking for the C++ standard library") - endif() - else() - message(WARNING "Not sure how to specify static linking of C++ standard " - "library for this compiler") - endif() - endif() + # ROB: LLVM_STATIC_LINK_CXX_STDLIB is OFF + # if(LLVM_STATIC_LINK_CXX_STDLIB) + # if(LLVM_COMPILER_IS_GCC_COMPATIBLE) + # check_cxx_compiler_flag("-static-libstdc++" + # CXX_COMPILER_SUPPORTS_STATIC_STDLIB) + # check_linker_flag("-static-libstdc++" CXX_LINKER_SUPPORTS_STATIC_STDLIB) + # if(CXX_COMPILER_SUPPORTS_STATIC_STDLIB AND + # CXX_LINKER_SUPPORTS_STATIC_STDLIB) + # append("-static-libstdc++" + # CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS + # CMAKE_MODULE_LINKER_FLAGS) + # else() + # message(WARNING + # "Can't specify static linking for the C++ standard library") + # endif() + # else() + # message(WARNING "Not sure how to specify static linking of C++ standard " + # "library for this compiler") + # endif() + # endif() endif() diff --git a/llvm/cmake/modules/LLVM-Config.cmake b/llvm/cmake/modules/LLVM-Config.cmake index 5d9ec79c..5878adaf 100644 --- a/llvm/cmake/modules/LLVM-Config.cmake +++ b/llvm/cmake/modules/LLVM-Config.cmake @@ -113,11 +113,11 @@ 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) +# 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) # Expand pseudo-components into real components. # Does not cover 'native', 'backend', or 'engine' as these require special @@ -298,61 +298,61 @@ 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) +# 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(libname GLOBAL PROPERTY LLVM_COMPONENT_NAME_${name}) +# if(libname) +# set(cname LLVM${libname}) +# elseif(TARGET ${name}) +# set(cname ${name}) +# elseif(TARGET LLVM${name}) +# set(cname LLVM${name}) +# else() +# message(FATAL_ERROR "unknown component ${name}") +# endif() +# +# get_property(lib_deps TARGET ${cname} PROPERTY LLVM_LINK_COMPONENTS) +# 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 ${cname}) +# set(required_libs ${required_libs} PARENT_SCOPE) +# endif() +# endfunction() - # - get_property(libname GLOBAL PROPERTY LLVM_COMPONENT_NAME_${name}) - if(libname) - set(cname LLVM${libname}) - elseif(TARGET ${name}) - set(cname ${name}) - elseif(TARGET LLVM${name}) - set(cname LLVM${name}) - else() - message(FATAL_ERROR "unknown component ${name}") - endif() - - get_property(lib_deps TARGET ${cname} PROPERTY LLVM_LINK_COMPONENTS) - 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 ${cname}) - 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() +# +# if(required_libs) +# list(REVERSE required_libs) +# endif() +# set(${out_libs} ${required_libs} PARENT_SCOPE) +# 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() - - if(required_libs) - list(REVERSE required_libs) - endif() - 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) +# 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) diff --git a/llvm/cmake/modules/LLVMProcessSources.cmake b/llvm/cmake/modules/LLVMProcessSources.cmake index ba8dca31..a0b284d9 100644 --- a/llvm/cmake/modules/LLVMProcessSources.cmake +++ b/llvm/cmake/modules/LLVMProcessSources.cmake @@ -1,23 +1,23 @@ include(AddFileDependencies) include(CMakeParseArguments) -function(llvm_replace_compiler_option var old new) - # Replaces a compiler option or switch `old' in `var' by `new'. - # If `old' is not in `var', appends `new' to `var'. - # Example: llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") - # If the option already is on the variable, don't add it: - if( "${${var}}" MATCHES "(^| )${new}($| )" ) - set(n "") - else() - set(n "${new}") - endif() - if( "${${var}}" MATCHES "(^| )${old}($| )" ) - string( REGEX REPLACE "(^| )${old}($| )" " ${n} " ${var} "${${var}}" ) - else() - set( ${var} "${${var}} ${n}" ) - endif() - set( ${var} "${${var}}" PARENT_SCOPE ) -endfunction(llvm_replace_compiler_option) +# function(llvm_replace_compiler_option var old new) +# # Replaces a compiler option or switch `old' in `var' by `new'. +# # If `old' is not in `var', appends `new' to `var'. +# # Example: llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") +# # If the option already is on the variable, don't add it: +# if( "${${var}}" MATCHES "(^| )${new}($| )" ) +# set(n "") +# else() +# set(n "${new}") +# endif() +# if( "${${var}}" MATCHES "(^| )${old}($| )" ) +# string( REGEX REPLACE "(^| )${old}($| )" " ${n} " ${var} "${${var}}" ) +# else() +# set( ${var} "${${var}} ${n}" ) +# endif() +# set( ${var} "${${var}}" PARENT_SCOPE ) +# endfunction(llvm_replace_compiler_option) macro(add_td_sources srcs) file(GLOB tds *.td) diff --git a/llvm/cmake/modules/TableGen.cmake b/llvm/cmake/modules/TableGen.cmake index 34065a23..dbf3a320 100644 --- a/llvm/cmake/modules/TableGen.cmake +++ b/llvm/cmake/modules/TableGen.cmake @@ -39,19 +39,21 @@ function(tablegen project ofn) set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS}) endif() - if (LLVM_ENABLE_DAGISEL_COV) - list(FIND ARGN "-gen-dag-isel" idx) - if( NOT idx EQUAL -1 ) - list(APPEND LLVM_TABLEGEN_FLAGS "-instrument-coverage") - endif() - endif() - if (LLVM_ENABLE_GISEL_COV) - list(FIND ARGN "-gen-global-isel" idx) - if( NOT idx EQUAL -1 ) - list(APPEND LLVM_TABLEGEN_FLAGS "-instrument-gisel-coverage") - list(APPEND LLVM_TABLEGEN_FLAGS "-gisel-coverage-file=${LLVM_GISEL_COV_PREFIX}all") - endif() - endif() + # ROB: LLVM_ENABLE_DAGISEL_COV is OFF + # if (LLVM_ENABLE_DAGISEL_COV) + # list(FIND ARGN "-gen-dag-isel" idx) + # if( NOT idx EQUAL -1 ) + # list(APPEND LLVM_TABLEGEN_FLAGS "-instrument-coverage") + # endif() + # endif() + # ROB: LLVM_ENABLE_GISEL_COV is OFF + # if (LLVM_ENABLE_GISEL_COV) + # list(FIND ARGN "-gen-global-isel" idx) + # if( NOT idx EQUAL -1 ) + # list(APPEND LLVM_TABLEGEN_FLAGS "-instrument-gisel-coverage") + # list(APPEND LLVM_TABLEGEN_FLAGS "-gisel-coverage-file=${LLVM_GISEL_COV_PREFIX}all") + # endif() + # endif() # Comments are only useful for Debug builds. Omit them if the backend # supports it. if (NOT (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR @@ -170,28 +172,31 @@ macro(add_tablegen target project) # If we're using the host tablegen, and utils were not requested, we have no # need to build this tablegen. - if ( NOT LLVM_BUILD_UTILS ) + # ROB: LLVM_BUILD_UTILS is OFF + # if ( NOT LLVM_BUILD_UTILS ) set_target_properties(${target} PROPERTIES EXCLUDE_FROM_ALL ON) - endif() + # endif() endif() endif() - if ((${project} STREQUAL LLVM OR ${project} STREQUAL MLIR) AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY AND LLVM_BUILD_UTILS) - set(export_to_llvmexports) - if(${target} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR - NOT LLVM_DISTRIBUTION_COMPONENTS) - set(export_to_llvmexports EXPORT LLVMExports) - endif() - - install(TARGETS ${target} - ${export_to_llvmexports} - COMPONENT ${target} - RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR}) - if(NOT LLVM_ENABLE_IDE) - add_llvm_install_targets("install-${target}" - DEPENDS ${target} - COMPONENT ${target}) - endif() - endif() + # ROB: LLVM_INSTALL_TOOLCHAIN_ONLY is OFF + # ROB: LLVM_BUILD_UTILS is OFF + # if ((${project} STREQUAL LLVM OR ${project} STREQUAL MLIR) AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY AND LLVM_BUILD_UTILS) + # set(export_to_llvmexports) + # if(${target} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR + # NOT LLVM_DISTRIBUTION_COMPONENTS) + # set(export_to_llvmexports EXPORT LLVMExports) + # endif() + # + # install(TARGETS ${target} + # ${export_to_llvmexports} + # COMPONENT ${target} + # RUNTIME DESTINATION ${LLVM_TOOLS_INSTALL_DIR}) + # if(NOT LLVM_ENABLE_IDE) + # add_llvm_install_targets("install-${target}" + # DEPENDS ${target} + # COMPONENT ${target}) + # endif() + # endif() set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${target}) endmacro() diff --git a/llvm/cmake/modules/TensorFlowCompile.cmake b/llvm/cmake/modules/TensorFlowCompile.cmake index a8ba56e6..9a1cd1a2 100644 --- a/llvm/cmake/modules/TensorFlowCompile.cmake +++ b/llvm/cmake/modules/TensorFlowCompile.cmake @@ -4,35 +4,35 @@ # Produce a pair of files called ${fname}.h and ${fname}.o in the # ${CMAKE_CURRENT_BINARY_DIR}. The generated header will define a C++ class # called ${cpp_class} - which may be a namespace-qualified class name. -function(tfcompile model tag_set signature_def_key fname cpp_class) - if (IS_ABSOLUTE ${model}) - set(LLVM_ML_MODELS_ABSOLUTE ${model}) - else() - set(LLVM_ML_MODELS_ABSOLUTE - ${CMAKE_CURRENT_SOURCE_DIR}/${model}) - endif() - - set(prefix ${CMAKE_CURRENT_BINARY_DIR}/${fname}) - set(obj_file ${prefix}.o) - set(hdr_file ${prefix}.h) - add_custom_command(OUTPUT ${obj_file} ${hdr_file} - COMMAND "XLA_FLAGS=\"--xla_cpu_multi_thread_eigen=false\"" ${TENSORFLOW_AOT_COMPILER} aot_compile_cpu - --dir ${LLVM_ML_MODELS_ABSOLUTE} - --tag_set ${tag_set} - --signature_def_key ${signature_def_key} - --output_prefix ${prefix} - --cpp_class ${cpp_class} - --target_triple ${LLVM_HOST_TRIPLE} - ) - - # Aggregate the objects so that results of different tfcompile calls may be - # grouped into one target. - set(GENERATED_OBJS ${GENERATED_OBJS} ${obj_file} PARENT_SCOPE) - set_source_files_properties(${obj_file} PROPERTIES - GENERATED 1 EXTERNAL_OBJECT 1) - - set(GENERATED_HEADERS ${GENERATED_HEADERS} ${hdr_file} PARENT_SCOPE) - set_source_files_properties(${hdr_file} PROPERTIES - GENERATED 1) - -endfunction() +# function(tfcompile model tag_set signature_def_key fname cpp_class) +# if (IS_ABSOLUTE ${model}) +# set(LLVM_ML_MODELS_ABSOLUTE ${model}) +# else() +# set(LLVM_ML_MODELS_ABSOLUTE +# ${CMAKE_CURRENT_SOURCE_DIR}/${model}) +# endif() +# +# set(prefix ${CMAKE_CURRENT_BINARY_DIR}/${fname}) +# set(obj_file ${prefix}.o) +# set(hdr_file ${prefix}.h) +# add_custom_command(OUTPUT ${obj_file} ${hdr_file} +# COMMAND "XLA_FLAGS=\"--xla_cpu_multi_thread_eigen=false\"" ${TENSORFLOW_AOT_COMPILER} aot_compile_cpu +# --dir ${LLVM_ML_MODELS_ABSOLUTE} +# --tag_set ${tag_set} +# --signature_def_key ${signature_def_key} +# --output_prefix ${prefix} +# --cpp_class ${cpp_class} +# --target_triple ${LLVM_HOST_TRIPLE} +# ) +# +# # Aggregate the objects so that results of different tfcompile calls may be +# # grouped into one target. +# set(GENERATED_OBJS ${GENERATED_OBJS} ${obj_file} PARENT_SCOPE) +# set_source_files_properties(${obj_file} PROPERTIES +# GENERATED 1 EXTERNAL_OBJECT 1) +# +# set(GENERATED_HEADERS ${GENERATED_HEADERS} ${hdr_file} PARENT_SCOPE) +# set_source_files_properties(${hdr_file} PROPERTIES +# GENERATED 1) +# +# endfunction() diff --git a/llvm/cmake/modules/UseLibtool.cmake b/llvm/cmake/modules/UseLibtool.cmake index 38d197d4..c563ca79 100644 --- a/llvm/cmake/modules/UseLibtool.cmake +++ b/llvm/cmake/modules/UseLibtool.cmake @@ -1,50 +1,51 @@ -# if CMAKE_LIBTOOL is not set, try and find it with xcrun or find_program -if(NOT CMAKE_LIBTOOL) - if(NOT CMAKE_XCRUN) - find_program(CMAKE_XCRUN NAMES xcrun) - endif() - if(CMAKE_XCRUN) - execute_process(COMMAND ${CMAKE_XCRUN} -find libtool - OUTPUT_VARIABLE CMAKE_LIBTOOL - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() - - if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL) - find_program(CMAKE_LIBTOOL NAMES libtool) - endif() -endif() - -get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) -if(CMAKE_LIBTOOL) - set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable") - message(STATUS "Found libtool - ${CMAKE_LIBTOOL}") - - execute_process(COMMAND ${CMAKE_LIBTOOL} -V - OUTPUT_VARIABLE LIBTOOL_V_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*") - string(REGEX REPLACE ".*cctools-([0-9.]+).*" "\\1" LIBTOOL_VERSION - ${LIBTOOL_V_OUTPUT}) - if(NOT LIBTOOL_VERSION VERSION_LESS "862") - set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols") - endif() - endif() - - foreach(lang ${languages}) - set(CMAKE_${lang}_CREATE_STATIC_LIBRARY - "\"${CMAKE_LIBTOOL}\" -static ${LIBTOOL_NO_WARNING_FLAG} -o ") - endforeach() -endif() - -# If DYLD_LIBRARY_PATH is set we need to set it on archiver commands -if(DYLD_LIBRARY_PATH) - set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}") - foreach(lang ${languages}) - foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY}) - list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW - "${dyld_envar} ${cmd}") - endforeach() - set(CMAKE_${lang}_CREATE_STATIC_LIBRARY - ${CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW}) - endforeach() -endif() +# ROB: Only relevant for APPLE +# # if CMAKE_LIBTOOL is not set, try and find it with xcrun or find_program +# if(NOT CMAKE_LIBTOOL) +# if(NOT CMAKE_XCRUN) +# find_program(CMAKE_XCRUN NAMES xcrun) +# endif() +# if(CMAKE_XCRUN) +# execute_process(COMMAND ${CMAKE_XCRUN} -find libtool +# OUTPUT_VARIABLE CMAKE_LIBTOOL +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# endif() +# +# if(NOT CMAKE_LIBTOOL OR NOT EXISTS CMAKE_LIBTOOL) +# find_program(CMAKE_LIBTOOL NAMES libtool) +# endif() +# endif() +# +# get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) +# if(CMAKE_LIBTOOL) +# set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable") +# message(STATUS "Found libtool - ${CMAKE_LIBTOOL}") +# +# execute_process(COMMAND ${CMAKE_LIBTOOL} -V +# OUTPUT_VARIABLE LIBTOOL_V_OUTPUT +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# if("${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*") +# string(REGEX REPLACE ".*cctools-([0-9.]+).*" "\\1" LIBTOOL_VERSION +# ${LIBTOOL_V_OUTPUT}) +# if(NOT LIBTOOL_VERSION VERSION_LESS "862") +# set(LIBTOOL_NO_WARNING_FLAG "-no_warning_for_no_symbols") +# endif() +# endif() +# +# foreach(lang ${languages}) +# set(CMAKE_${lang}_CREATE_STATIC_LIBRARY +# "\"${CMAKE_LIBTOOL}\" -static ${LIBTOOL_NO_WARNING_FLAG} -o ") +# endforeach() +# endif() +# +# # If DYLD_LIBRARY_PATH is set we need to set it on archiver commands +# if(DYLD_LIBRARY_PATH) +# set(dyld_envar "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}") +# foreach(lang ${languages}) +# foreach(cmd ${CMAKE_${lang}_CREATE_STATIC_LIBRARY}) +# list(APPEND CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW +# "${dyld_envar} ${cmd}") +# endforeach() +# set(CMAKE_${lang}_CREATE_STATIC_LIBRARY +# ${CMAKE_${lang}_CREATE_STATIC_LIBRARY_NEW}) +# endforeach() +# endif() diff --git a/llvm/include/llvm/Support/CMakeLists.txt b/llvm/include/llvm/Support/CMakeLists.txt index aeb5866e..24fe0ee8 100644 --- a/llvm/include/llvm/Support/CMakeLists.txt +++ b/llvm/include/llvm/Support/CMakeLists.txt @@ -5,16 +5,17 @@ set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/VCSRevision.h") set(generate_vcs_version_script "${LLVM_CMAKE_PATH}/GenerateVersionFromVCS.cmake") -if(LLVM_APPEND_VC_REV) - set(llvm_source_dir ${LLVM_MAIN_SRC_DIR}) - - # A fake version file and is not expected to exist. It is being used to - # force regeneration of VCSRevision.h for source directory with no write - # permission available. - if (llvm_vc STREQUAL "") - set(fake_version_inc "${CMAKE_CURRENT_BINARY_DIR}/__FakeVCSRevision.h") - endif() -endif() +# ROB: LLVM_APPEND_VC_REV is OFF +# if(LLVM_APPEND_VC_REV) +# set(llvm_source_dir ${LLVM_MAIN_SRC_DIR}) +# +# # A fake version file and is not expected to exist. It is being used to +# # force regeneration of VCSRevision.h for source directory with no write +# # permission available. +# if (llvm_vc STREQUAL "") +# set(fake_version_inc "${CMAKE_CURRENT_BINARY_DIR}/__FakeVCSRevision.h") +# endif() +# endif() set(generated_files "${version_inc}") if (fake_version_inc) diff --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt index f31cf349..a0cd9307 100644 --- a/llvm/lib/Analysis/CMakeLists.txt +++ b/llvm/lib/Analysis/CMakeLists.txt @@ -1,17 +1,17 @@ -if (DEFINED LLVM_HAVE_TF_AOT OR DEFINED LLVM_HAVE_TF_API) - if (DEFINED LLVM_HAVE_TF_AOT) - include(TensorFlowCompile) - tfcompile(models/inliner serve action InlinerSizeModel llvm::InlinerSizeModel) - list(APPEND GeneratedMLSources - $ - ${GENERATED_OBJS} - ) - endif() - - if (DEFINED LLVM_HAVE_TF_API) - LIST(APPEND MLLinkDeps ${tensorflow_c_api}) - endif() -endif() +# if (DEFINED LLVM_HAVE_TF_AOT OR DEFINED LLVM_HAVE_TF_API) +# if (DEFINED LLVM_HAVE_TF_AOT) +# include(TensorFlowCompile) +# tfcompile(models/inliner serve action InlinerSizeModel llvm::InlinerSizeModel) +# list(APPEND GeneratedMLSources +# $ +# ${GENERATED_OBJS} +# ) +# endif() +# +# if (DEFINED LLVM_HAVE_TF_API) +# LIST(APPEND MLLinkDeps ${tensorflow_c_api}) +# endif() +# endif() add_llvm_component_library(LLVMAnalysis AliasAnalysis.cpp diff --git a/llvm/lib/CMakeLists.txt b/llvm/lib/CMakeLists.txt index e2093f1d..4c266332 100644 --- a/llvm/lib/CMakeLists.txt +++ b/llvm/lib/CMakeLists.txt @@ -35,9 +35,10 @@ add_subdirectory(Passes) add_subdirectory(TextAPI) add_subdirectory(ToolDrivers) add_subdirectory(XRay) -if (LLVM_INCLUDE_TESTS) - add_subdirectory(Testing) -endif() +# ROB: LLVM_INCLUDE_TESTS is OFF +# if (LLVM_INCLUDE_TESTS) +# add_subdirectory(Testing) +# endif() add_subdirectory(WindowsManifest) set(LLVMCONFIGLIBRARYDEPENDENCIESINC "${LLVM_BINARY_DIR}/tools/llvm-config/LibraryDependencies.inc") diff --git a/llvm/lib/ExecutionEngine/CMakeLists.txt b/llvm/lib/ExecutionEngine/CMakeLists.txt index 22203da9..ff52c9a2 100644 --- a/llvm/lib/ExecutionEngine/CMakeLists.txt +++ b/llvm/lib/ExecutionEngine/CMakeLists.txt @@ -32,14 +32,17 @@ add_subdirectory(MCJIT) add_subdirectory(Orc) add_subdirectory(RuntimeDyld) -if( LLVM_USE_OPROFILE ) - add_subdirectory(OProfileJIT) -endif( LLVM_USE_OPROFILE ) - -if( LLVM_USE_INTEL_JITEVENTS ) - add_subdirectory(IntelJITEvents) -endif( LLVM_USE_INTEL_JITEVENTS ) - -if( LLVM_USE_PERF ) - add_subdirectory(PerfJITEvents) -endif( LLVM_USE_PERF ) +# ROB: LLVM_USE_OPROFILE is OFF +# if( LLVM_USE_OPROFILE ) +# add_subdirectory(OProfileJIT) +# endif( LLVM_USE_OPROFILE ) + +# ROB: LLVM_USE_INTEL_JITEVENTS is OFF +# if( LLVM_USE_INTEL_JITEVENTS ) +# add_subdirectory(IntelJITEvents) +# endif( LLVM_USE_INTEL_JITEVENTS ) + +# ROB: LLVM_USE_PERF is OFF +# if( LLVM_USE_PERF ) +# add_subdirectory(PerfJITEvents) +# endif( LLVM_USE_PERF ) diff --git a/llvm/lib/ExecutionEngine/Interpreter/CMakeLists.txt b/llvm/lib/ExecutionEngine/Interpreter/CMakeLists.txt index 97621983..0e419acb 100644 --- a/llvm/lib/ExecutionEngine/Interpreter/CMakeLists.txt +++ b/llvm/lib/ExecutionEngine/Interpreter/CMakeLists.txt @@ -21,6 +21,7 @@ add_llvm_component_library(LLVMInterpreter Support ) -if( LLVM_ENABLE_FFI ) - target_link_libraries( LLVMInterpreter PRIVATE ${FFI_LIBRARY_PATH} ) -endif() +# ROB: LLVM_ENABLE_FFI is OFF +# if( LLVM_ENABLE_FFI ) +# target_link_libraries( LLVMInterpreter PRIVATE ${FFI_LIBRARY_PATH} ) +# endif() diff --git a/llvm/lib/Support/CMakeLists.txt b/llvm/lib/Support/CMakeLists.txt index 087a2bbb..3bf4ee56 100644 --- a/llvm/lib/Support/CMakeLists.txt +++ b/llvm/lib/Support/CMakeLists.txt @@ -50,31 +50,32 @@ endif() # endif() # Override the C runtime allocator on Windows and embed it into LLVM tools & libraries -if(LLVM_INTEGRATED_CRT_ALLOC) - if (CMAKE_BUILD_TYPE AND NOT ${LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE}} MATCHES "^(MT|MTd)$") - message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC only works with /MT or /MTd. Use LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE} to set the appropriate option.") - endif() - - string(REGEX REPLACE "(/|\\\\)$" "" LLVM_INTEGRATED_CRT_ALLOC "${LLVM_INTEGRATED_CRT_ALLOC}") - - if(NOT EXISTS "${LLVM_INTEGRATED_CRT_ALLOC}") - message(FATAL_ERROR "Cannot find the path to `git clone` for the CRT allocator! (${LLVM_INTEGRATED_CRT_ALLOC}). Currently, rpmalloc, snmalloc and mimalloc are supported.") - endif() - - if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "rpmalloc$") - add_definitions(-DENABLE_OVERRIDE -DENABLE_PRELOAD) - set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/rpmalloc/rpmalloc.c") - elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$") - set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/malloc.cc" "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/new.cc") - set(system_libs ${system_libs} "mincore.lib" "-INCLUDE:malloc") - elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "mimalloc$") - set(MIMALLOC_LIB "${LLVM_INTEGRATED_CRT_ALLOC}/out/msvc-x64/Release/mimalloc-static.lib") - if(NOT EXISTS "${MIMALLOC_LIB}") - message(FATAL_ERROR "Cannot find the mimalloc static library. To build it, first apply the patch from https://github.com/microsoft/mimalloc/issues/268 then build the Release x64 target through ${LLVM_INTEGRATED_CRT_ALLOC}\\ide\\vs2019\\mimalloc.sln") - endif() - set(system_libs ${system_libs} "${MIMALLOC_LIB}" "-INCLUDE:malloc") - endif() -endif() +# ROB: win only +# if(LLVM_INTEGRATED_CRT_ALLOC) +# if (CMAKE_BUILD_TYPE AND NOT ${LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE}} MATCHES "^(MT|MTd)$") +# message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC only works with /MT or /MTd. Use LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE} to set the appropriate option.") +# endif() +# +# string(REGEX REPLACE "(/|\\\\)$" "" LLVM_INTEGRATED_CRT_ALLOC "${LLVM_INTEGRATED_CRT_ALLOC}") +# +# if(NOT EXISTS "${LLVM_INTEGRATED_CRT_ALLOC}") +# message(FATAL_ERROR "Cannot find the path to `git clone` for the CRT allocator! (${LLVM_INTEGRATED_CRT_ALLOC}). Currently, rpmalloc, snmalloc and mimalloc are supported.") +# endif() +# +# if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "rpmalloc$") +# add_definitions(-DENABLE_OVERRIDE -DENABLE_PRELOAD) +# set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/rpmalloc/rpmalloc.c") +# elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$") +# set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/malloc.cc" "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/new.cc") +# set(system_libs ${system_libs} "mincore.lib" "-INCLUDE:malloc") +# elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "mimalloc$") +# set(MIMALLOC_LIB "${LLVM_INTEGRATED_CRT_ALLOC}/out/msvc-x64/Release/mimalloc-static.lib") +# if(NOT EXISTS "${MIMALLOC_LIB}") +# message(FATAL_ERROR "Cannot find the mimalloc static library. To build it, first apply the patch from https://github.com/microsoft/mimalloc/issues/268 then build the Release x64 target through ${LLVM_INTEGRATED_CRT_ALLOC}\\ide\\vs2019\\mimalloc.sln") +# endif() +# set(system_libs ${system_libs} "${MIMALLOC_LIB}" "-INCLUDE:malloc") +# endif() +# endif() add_llvm_component_library(LLVMSupport AArch64TargetParser.cpp @@ -235,37 +236,40 @@ set(llvm_system_libs ${system_libs}) # This block is only needed for llvm-config. When we deprecate llvm-config and # move to using CMake export, this block can be removed. -if(LLVM_ENABLE_ZLIB) - # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators. - if(CMAKE_BUILD_TYPE) - string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) - get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION_${build_type}) - endif() - if(NOT zlib_library) - get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION) - endif() - get_library_name(${zlib_library} zlib_library) - set(llvm_system_libs ${llvm_system_libs} "${zlib_library}") -endif() +# ROB: LLVM_ENABLE_ZLIB is OFF +# if(LLVM_ENABLE_ZLIB) +# # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators. +# if(CMAKE_BUILD_TYPE) +# string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) +# get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION_${build_type}) +# endif() +# if(NOT zlib_library) +# get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION) +# endif() +# get_library_name(${zlib_library} zlib_library) +# set(llvm_system_libs ${llvm_system_libs} "${zlib_library}") +# endif() -if(LLVM_ENABLE_TERMINFO) - get_library_name(${TERMINFO_LIB} terminfo_library) - set(llvm_system_libs ${llvm_system_libs} "${terminfo_library}") -endif() +# ROB: LLVM_ENABLE_TERMINFO is OFF +# if(LLVM_ENABLE_TERMINFO) +# get_library_name(${TERMINFO_LIB} terminfo_library) +# set(llvm_system_libs ${llvm_system_libs} "${terminfo_library}") +# endif() set_property(TARGET LLVMSupport PROPERTY LLVM_SYSTEM_LIBS "${llvm_system_libs}") -if(LLVM_INTEGRATED_CRT_ALLOC) - if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$") - set_property(TARGET LLVMSupport PROPERTY CXX_STANDARD 17) - add_definitions(-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING) - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND - "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64") - set_property(TARGET LLVMSupport PROPERTY COMPILE_FLAGS "-mcx16") - endif() - endif() -endif() +# ROB: win only +# if(LLVM_INTEGRATED_CRT_ALLOC) +# if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$") +# set_property(TARGET LLVMSupport PROPERTY CXX_STANDARD 17) +# add_definitions(-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING) +# if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND +# "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64") +# set_property(TARGET LLVMSupport PROPERTY COMPILE_FLAGS "-mcx16") +# endif() +# endif() +# endif() if(LLVM_WITH_Z3) target_include_directories(LLVMSupport SYSTEM diff --git a/llvm/lib/WindowsManifest/CMakeLists.txt b/llvm/lib/WindowsManifest/CMakeLists.txt index 8134ac8c..bb3f9d5f 100644 --- a/llvm/lib/WindowsManifest/CMakeLists.txt +++ b/llvm/lib/WindowsManifest/CMakeLists.txt @@ -1,8 +1,9 @@ include(GetLibraryName) -if(LLVM_ENABLE_LIBXML2) - set(imported_libs LibXml2::LibXml2) -endif() +# ROB: LLVM_ENABLE_LIBXML2 is disabled +# if(LLVM_ENABLE_LIBXML2) +# set(imported_libs LibXml2::LibXml2) +# endif() add_llvm_component_library(LLVMWindowsManifest WindowsManifestMerger.cpp @@ -20,15 +21,16 @@ add_llvm_component_library(LLVMWindowsManifest # This block is only needed for llvm-config. When we deprecate llvm-config and # move to using CMake export, this block can be removed. -if(LLVM_ENABLE_LIBXML2) - # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators. - if(CMAKE_BUILD_TYPE) - string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) - get_property(libxml2_library TARGET LibXml2::LibXml2 PROPERTY LOCATION_${build_type}) - endif() - if(NOT zlib_library) - get_property(libxml2_library TARGET LibXml2::LibXml2 PROPERTY LOCATION) - endif() - get_library_name(${libxml2_library} libxml2_library) - set_property(TARGET LLVMWindowsManifest PROPERTY LLVM_SYSTEM_LIBS ${libxml2_library}) -endif() +# ROB: LLVM_ENABLE_LIBXML2 is disabled +# if(LLVM_ENABLE_LIBXML2) +# # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators. +# if(CMAKE_BUILD_TYPE) +# string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) +# get_property(libxml2_library TARGET LibXml2::LibXml2 PROPERTY LOCATION_${build_type}) +# endif() +# if(NOT zlib_library) +# get_property(libxml2_library TARGET LibXml2::LibXml2 PROPERTY LOCATION) +# endif() +# get_library_name(${libxml2_library} libxml2_library) +# set_property(TARGET LLVMWindowsManifest PROPERTY LLVM_SYSTEM_LIBS ${libxml2_library}) +# endif() diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index 243d6ceb..1c959ad5 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -37,9 +37,10 @@ endfunction() include(LLVMExternalProjectUtils) -if(NOT LLVM_BUILD_RUNTIMES) +# ROB: LLVM_BUILD_RUNTIMES is OFF +# if(NOT LLVM_BUILD_RUNTIMES) set(EXTRA_ARGS EXCLUDE_FROM_ALL) -endif() +# endif() function(check_apple_target triple builtin_or_runtime) set(error "\ @@ -207,9 +208,10 @@ function(runtime_default_target) ${runtime_name} install-${runtime_name} install-${runtime_name}-stripped) - if(LLVM_INCLUDE_TESTS) - list(APPEND test_targets check-${runtime_name}) - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # list(APPEND test_targets check-${runtime_name}) + # endif() endforeach() foreach(component ${LLVM_RUNTIME_DISTRIBUTION_COMPONENTS}) if(NOT ${component} IN_LIST SUB_COMPONENTS) @@ -217,9 +219,10 @@ function(runtime_default_target) endif() endforeach() - if(LLVM_INCLUDE_TESTS) - list(APPEND test_targets runtimes-test-depends check-runtimes) - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # list(APPEND test_targets runtimes-test-depends check-runtimes) + # endif() set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default ON) # AIX should fold 32-bit & 64-bit arch libraries into a single archive. @@ -273,10 +276,11 @@ function(runtime_register_target name target) set(install-${runtime_name}-${name} install-${runtime_name}) set(install-${runtime_name}-${name}-stripped install-${runtime_name}-stripped) list(APPEND ${name}_extra_targets ${runtime_name}-${name} install-${runtime_name}-${name} install-${runtime_name}-${name}-stripped) - if(LLVM_INCLUDE_TESTS) - set(check-${runtime_name}-${name} check-${runtime_name} ) - list(APPEND ${name}_test_targets check-${runtime_name}-${name}) - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # set(check-${runtime_name}-${name} check-${runtime_name} ) + # list(APPEND ${name}_test_targets check-${runtime_name}-${name}) + # endif() endforeach() foreach(target_name IN LISTS SUB_COMPONENTS SUB_INSTALL_TARGETS) @@ -291,17 +295,18 @@ function(runtime_register_target name target) list(APPEND ${name}_extra_targets ${component}-${name} install-${component}-${name} install-${component}-${name}-stripped) endforeach() - if(LLVM_INCLUDE_TESTS) - set(runtimes-test-depends-${name} runtimes-test-depends) - set(check-runtimes-${name} check-runtimes) - list(APPEND ${name}_test_targets runtimes-test-depends-${name} check-runtimes-${name}) - foreach(target_name IN LISTS SUB_CHECK_TARGETS) - set(${target_name}-${name} ${target_name}) - list(APPEND ${name}_test_targets ${target_name}-${name}) - list(APPEND test_targets ${target_name}-${name}) - endforeach() - set(test_targets "${test_targets}" PARENT_SCOPE) - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # set(runtimes-test-depends-${name} runtimes-test-depends) + # set(check-runtimes-${name} check-runtimes) + # list(APPEND ${name}_test_targets runtimes-test-depends-${name} check-runtimes-${name}) + # foreach(target_name IN LISTS SUB_CHECK_TARGETS) + # set(${target_name}-${name} ${target_name}) + # list(APPEND ${name}_test_targets ${target_name}-${name}) + # list(APPEND test_targets ${target_name}-${name}) + # endforeach() + # set(test_targets "${test_targets}" PARENT_SCOPE) + # endif() set(${name}_extra_args ${ARG_CMAKE_ARGS}) get_cmake_property(variableNames VARIABLES) @@ -377,11 +382,12 @@ if(runtimes) add_custom_target(runtimes-configure) add_custom_target(install-runtimes) add_custom_target(install-runtimes-stripped) - if(LLVM_INCLUDE_TESTS) - add_custom_target(check-runtimes) - add_custom_target(runtimes-test-depends) - set(test_targets "") - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # add_custom_target(check-runtimes) + # add_custom_target(runtimes-test-depends) + # set(test_targets "") + # endif() foreach(runtime_name ${runtime_names}) add_custom_target(${runtime_name}) add_custom_target(install-${runtime_name}) @@ -404,10 +410,11 @@ if(runtimes) add_dependencies(runtimes-configure runtimes-${name}-configure) add_dependencies(install-runtimes install-runtimes-${name}) add_dependencies(install-runtimes-stripped install-runtimes-${name}-stripped) - if(LLVM_INCLUDE_TESTS) - add_dependencies(check-runtimes check-runtimes-${name}) - add_dependencies(runtimes-test-depends runtimes-test-depends-${name}) - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # add_dependencies(check-runtimes check-runtimes-${name}) + # add_dependencies(runtimes-test-depends runtimes-test-depends-${name}) + # endif() foreach(runtime_name ${runtime_names}) add_dependencies(${runtime_name} ${runtime_name}-${name}) add_dependencies(install-${runtime_name} install-${runtime_name}-${name}) @@ -446,25 +453,26 @@ if(runtimes) add_dependencies(clang-bootstrap-deps runtimes) endif() - if(LLVM_INCLUDE_TESTS) - set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) - set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-runtimes) - - set(RUNTIMES_TEST_DEPENDS - FileCheck - count - llvm-nm - llvm-objdump - llvm-xray - not - obj2yaml - sancov - sanstats - gtest_main - gtest - ) - foreach(target ${test_targets} ${SUB_CHECK_TARGETS}) - add_dependencies(${target} ${RUNTIMES_TEST_DEPENDS}) - endforeach() - endif() + # ROB: LLVM_INCLUDE_TESTS is OFF + # if(LLVM_INCLUDE_TESTS) + # set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) + # set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-runtimes) + # + # set(RUNTIMES_TEST_DEPENDS + # FileCheck + # count + # llvm-nm + # llvm-objdump + # llvm-xray + # not + # obj2yaml + # sancov + # sanstats + # gtest_main + # gtest + # ) + # foreach(target ${test_targets} ${SUB_CHECK_TARGETS}) + # add_dependencies(${target} ${RUNTIMES_TEST_DEPENDS}) + # endforeach() + # endif() endif() diff --git a/llvm/utils/llvm-locstats/CMakeLists.txt b/llvm/utils/llvm-locstats/CMakeLists.txt index 1dbb9da9..d1719f1b 100644 --- a/llvm/utils/llvm-locstats/CMakeLists.txt +++ b/llvm/utils/llvm-locstats/CMakeLists.txt @@ -1,16 +1,17 @@ -if (LLVM_INCLUDE_UTILS AND LLVM_INCLUDE_TOOLS) - add_custom_command( - OUTPUT ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats - DEPENDS ${LLVM_MAIN_SRC_DIR}/utils/llvm-locstats/llvm-locstats.py - DEPENDS llvm-dwarfdump - COMMAND ${CMAKE_COMMAND} -E copy ${LLVM_MAIN_SRC_DIR}/utils/llvm-locstats/llvm-locstats.py ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats - COMMENT "Copying llvm-locstats into ${LLVM_TOOLS_BINARY_DIR}" - ) - add_custom_target(llvm-locstats ALL - DEPENDS ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats - ) - if (NOT LLVM_BUILD_TOOLS) - set_target_properties(llvm-locstats PROPERTIES EXCLUDE_FROM_ALL ON) - endif() - set_target_properties(llvm-locstats PROPERTIES FOLDER "Tools") -endif() +# ROB: LLVM_INCLUDE_UTILS is OFF +# if (LLVM_INCLUDE_UTILS AND LLVM_INCLUDE_TOOLS) +# add_custom_command( +# OUTPUT ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats +# DEPENDS ${LLVM_MAIN_SRC_DIR}/utils/llvm-locstats/llvm-locstats.py +# DEPENDS llvm-dwarfdump +# COMMAND ${CMAKE_COMMAND} -E copy ${LLVM_MAIN_SRC_DIR}/utils/llvm-locstats/llvm-locstats.py ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats +# COMMENT "Copying llvm-locstats into ${LLVM_TOOLS_BINARY_DIR}" +# ) +# add_custom_target(llvm-locstats ALL +# DEPENDS ${LLVM_TOOLS_BINARY_DIR}/llvm-locstats +# ) +# if (NOT LLVM_BUILD_TOOLS) +# set_target_properties(llvm-locstats PROPERTIES EXCLUDE_FROM_ALL ON) +# endif() +# set_target_properties(llvm-locstats PROPERTIES FOLDER "Tools") +# endif()