diff --git a/CMakeLists.txt b/CMakeLists.txt index 80a235c..e8b8981 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,3 @@ -# $Id$ cmake_minimum_required(VERSION 2.8) project(find-unnecessary-includes) @@ -16,6 +15,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) enable_testing() # Visual C++ Express Editions do not support solution folders. +set(LLVM_USE_FOLDERS OFF) set_property(GLOBAL PROPERTY USE_FOLDERS OFF) option(USE_INSTALLED_CLANG "Use an installed clang/llvm?" OFF) @@ -29,13 +29,6 @@ if(USE_INSTALLED_CLANG) set(CLANG_INCLUDE_DIRS) link_directories(${LLVM_LIBRARY_DIRS}) else() - # Patch LLVM CMake script to set USE_FOLDERS property to OFF. - configure_file( - patch/llvm/CMakeLists.txt - ${CMAKE_SOURCE_DIR}/llvm/CMakeLists.txt - COPYONLY) - add_subdirectory(llvm) - set(CLANG_BUILD_STANDALONE 1 CACHE INTERNAL "Build clang as standalone.") set(CLANG_PATH_TO_LLVM_SOURCE "${CMAKE_SOURCE_DIR}/llvm" @@ -48,6 +41,8 @@ else() patch/clang/CMakeLists.txt ${CMAKE_SOURCE_DIR}/clang/CMakeLists.txt COPYONLY) + + add_subdirectory(llvm) add_subdirectory(clang) set(LLVM_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/llvm/include diff --git a/clang b/clang index e8a9798..7728057 160000 --- a/clang +++ b/clang @@ -1 +1 @@ -Subproject commit e8a97985f72b4e11435ff2107c0f11e925fb6d96 +Subproject commit 7728057cf03f8e5791e46eefc6e146214d0a1c24 diff --git a/llvm b/llvm index 95ce4c2..7dcb23a 160000 --- a/llvm +++ b/llvm @@ -1 +1 @@ -Subproject commit 95ce4c2ffb0ff31a79b060fb112659322a5be3bf +Subproject commit 7dcb23a0522eb23c3a50f6c8249f10ccdf214993 diff --git a/patch/clang/CMakeLists.txt b/patch/clang/CMakeLists.txt index bd6675a..b2914e6 100644 --- a/patch/clang/CMakeLists.txt +++ b/patch/clang/CMakeLists.txt @@ -88,7 +88,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE ) "`CMakeFiles'. Please delete them.") endif() -if( CLANG_BUILD_STANDALONE OR CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) +if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) file(GLOB_RECURSE tablegenned_files_on_include_dir "${CLANG_SOURCE_DIR}/include/clang/*.inc") @@ -266,10 +266,12 @@ add_subdirectory(examples) # TODO: docs. add_subdirectory(test) -if( LLVM_INCLUDE_TESTS ) - if( NOT CLANG_BUILT_STANDALONE ) - add_subdirectory(unittests) - endif() +option(CLANG_INCLUDE_TESTS + "Generate build targets for the Clang unit tests." + ${LLVM_INCLUDE_TESTS}) + +if( CLANG_INCLUDE_TESTS ) + add_subdirectory(unittests) endif() # Workaround for MSVS10 to avoid the Dialog Hell diff --git a/patch/llvm/CMakeLists.txt b/patch/llvm/CMakeLists.txt deleted file mode 100644 index 6248d23..0000000 --- a/patch/llvm/CMakeLists.txt +++ /dev/null @@ -1,489 +0,0 @@ -# See docs/CMake.html for instructions about how to build LLVM with CMake. - -project(LLVM) -cmake_minimum_required(VERSION 2.8) - -# Add path for custom modules -set(CMAKE_MODULE_PATH - ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" - ) - -set(LLVM_VERSION_MAJOR 3) -set(LLVM_VERSION_MINOR 3) - -set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}svn") - -# 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 - "Append the version control system revision id to LLVM version" OFF) - -if( LLVM_APPEND_VC_REV ) - add_version_info_from_vcs(PACKAGE_VERSION) -endif() - -set(PACKAGE_NAME LLVM) -set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") -set(PACKAGE_BUGREPORT "http://llvm.org/bugs/") - -# Sanity check our source directory to make sure that we are not trying to -# generate an in-tree build (unless on MSVC_IDE, where it is ok), and to make -# sure that we don't have any stray generated files lying around in the tree -# (which would end up getting picked up by header search, instead of the correct -# versions). -if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE ) - message(FATAL_ERROR "In-source builds are not allowed. -CMake would overwrite the makefiles distributed with LLVM. -Please create a directory and run cmake from there, passing the path -to this source directory as the last argument. -This process created the file `CMakeCache.txt' and the directory `CMakeFiles'. -Please delete them.") -endif() -if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) - file(GLOB_RECURSE - tablegenned_files_on_include_dir - "${CMAKE_CURRENT_SOURCE_DIR}/include/llvm/*.gen") - file(GLOB_RECURSE - tablegenned_files_on_lib_dir - "${CMAKE_CURRENT_SOURCE_DIR}/lib/Target/*.inc") - if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir) - message(FATAL_ERROR "Apparently there is a previous in-source build, -probably as the result of running `configure' and `make' on -${CMAKE_CURRENT_SOURCE_DIR}. -This may cause problems. The suspicious files are: -${tablegenned_files_on_lib_dir} -${tablegenned_files_on_include_dir} -Please clean the source directory.") - endif() -endif() - -string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) - -set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include) -set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin) -set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples) -set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" ) - -set(LLVM_ALL_TARGETS - ARM - CppBackend - Hexagon - Mips - MBlaze - MSP430 - NVPTX - PowerPC - Sparc - X86 - XCore - ) - -# List of targets with JIT support: -set(LLVM_TARGETS_WITH_JIT X86 PowerPC ARM Mips) - -if( MSVC ) - set(LLVM_TARGETS_TO_BUILD X86 - CACHE STRING "Semicolon-separated list of targets to build, or \"all\".") -else( MSVC ) - set(LLVM_TARGETS_TO_BUILD "all" - CACHE STRING "Semicolon-separated list of targets to build, or \"all\".") -endif( MSVC ) - -set(LLVM_EXPERIMENTAL_TARGETS_TO_BUILD "" - CACHE STRING "Semicolon-separated list of experimental targets to build.") - -option(BUILD_SHARED_LIBS - "Build all libraries as shared libraries instead of static" OFF) - -option(LLVM_ENABLE_CBE_PRINTF_A "Set to ON if CBE is enabled for printf %a output" ON) -if(LLVM_ENABLE_CBE_PRINTF_A) - set(ENABLE_CBE_PRINTF_A 1) -endif() - -option(LLVM_ENABLE_TIMESTAMPS "Enable embedding timestamp information in build" ON) -if(LLVM_ENABLE_TIMESTAMPS) - set(ENABLE_TIMESTAMPS 1) -endif() - -option(LLVM_ENABLE_BACKTRACES "Enable embedding backtraces on crash." ON) -if(LLVM_ENABLE_BACKTRACES) - set(ENABLE_BACKTRACES 1) -endif() - -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_THREADS "Use threads if available." ON) - -if( LLVM_TARGETS_TO_BUILD STREQUAL "all" ) - set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} ) -endif() - -set(LLVM_TARGETS_TO_BUILD - ${LLVM_TARGETS_TO_BUILD} - ${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}) - -set(LLVM_ENUM_TARGETS "") -foreach(c ${LLVM_TARGETS_TO_BUILD}) - list(FIND LLVM_ALL_TARGETS ${c} idx) - list(FIND LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ${c} idy) - if( idx LESS 0 AND idy LESS 0 ) - message(FATAL_ERROR "The target `${c}' does not exist. - It should be one of\n${LLVM_ALL_TARGETS}") - else() - set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n") - endif() -endforeach(c) - -set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm) - -include(AddLLVMDefinitions) - -option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON) - -# MSVC has a gazillion warnings with this. -if( MSVC ) - option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." OFF) -else( MSVC ) - option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON) -endif() - -option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) -option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) - -if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" ) - option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF) -else() - option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON) -endif() - -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) - -# If enabled, ierify 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 ) - -# 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 ) - # 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 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() - -# Define options to control the inclusion and default build behavior for -# components which may not strictly be necessary (tools, runtime, 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." ON) -option(LLVM_BUILD_TOOLS - "Build the LLVM tools. If OFF, just generate build targets." ON) - -option(LLVM_INCLUDE_RUNTIME "Generate build targets for the LLVM runtimes" ON) -option(LLVM_BUILD_RUNTIME - "Build the LLVM runtime libraries. If OFF, just generate build targets." ON) - -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" ON) - -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." ON) - -# All options referred to from HandleLLVMOptions have to be specified -# BEFORE this include, otherwise options will not be correctly set on -# first cmake run -include(config-ix) - -# By default, we target the host, but this can be overridden at CMake -# invocation time. -set(LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_HOST_TRIPLE}" CACHE STRING - "Default target for which LLVM will generate code." ) -set(TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}") - -include(HandleLLVMOptions) - -# Verify that we can find a Python interpreter, -include(FindPythonInterp) -if( NOT PYTHONINTERP_FOUND ) - message(FATAL_ERROR -"Unable to find Python interpreter, required for builds and testing. - -Please install Python or specify the PYTHON_EXECUTABLE CMake variable.") -endif() - -###### -# LLVMBuild Integration -# -# We use llvm-build to generate all the data required by the CMake based -# build system in one swoop: -# -# - We generate a file (a CMake fragment) in the object root which contains -# all the definitions that are required by CMake. -# -# - We generate the library table used by llvm-config. -# -# - We generate the dependencies for the CMake fragment, so that we will -# automatically reconfigure outselves. - -set(LLVMBUILDTOOL "${LLVM_MAIN_SRC_DIR}/utils/llvm-build/llvm-build") -set(LLVMCONFIGLIBRARYDEPENDENCIESINC - "${LLVM_BINARY_DIR}/tools/llvm-config/LibraryDependencies.inc") -set(LLVMBUILDCMAKEFRAG - "${LLVM_BINARY_DIR}/LLVMBuild.cmake") - -# Create the list of optional components that are enabled -if (LLVM_USE_INTEL_JITEVENTS) - set(LLVMOPTIONALCOMPONENTS IntelJITEvents) -endif (LLVM_USE_INTEL_JITEVENTS) -if (LLVM_USE_OPROFILE) - set(LLVMOPTIONALCOMPONENTS ${LLVMOPTIONALCOMPONENTS} OProfileJIT) -endif (LLVM_USE_OPROFILE) - -message(STATUS "Constructing LLVMBuild project information") -execute_process( - COMMAND ${PYTHON_EXECUTABLE} ${LLVMBUILDTOOL} - --native-target "${LLVM_NATIVE_ARCH}" - --enable-targets "${LLVM_TARGETS_TO_BUILD}" - --enable-optional-components "${LLVMOPTIONALCOMPONENTS}" - --write-library-table ${LLVMCONFIGLIBRARYDEPENDENCIESINC} - --write-cmake-fragment ${LLVMBUILDCMAKEFRAG} - ERROR_VARIABLE LLVMBUILDOUTPUT - ERROR_VARIABLE LLVMBUILDERRORS - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE LLVMBUILDRESULT) - -# On Win32, CMake doesn't properly handle piping the default output/error -# streams into the GUI console. So, we explicitly catch and report them. -if( NOT "${LLVMBUILDOUTPUT}" STREQUAL "") - message(STATUS "llvm-build output: ${LLVMBUILDOUTPUT}") -endif() -if( NOT "${LLVMBUILDRESULT}" STREQUAL "0" ) - message(FATAL_ERROR - "Unexpected failure executing llvm-build: ${LLVMBUILDERRORS}") -endif() - -# Include the generated CMake fragment. This will define properties from the -# LLVMBuild files in a format which is easy to consume from CMake, and will add -# the dependencies so that CMake will reconfigure properly when the LLVMBuild -# files change. -include(${LLVMBUILDCMAKEFRAG}) - -###### - -# Configure all of the various header file fragments LLVM uses which depend on -# configuration variables. -set(LLVM_ENUM_ASM_PRINTERS "") -set(LLVM_ENUM_ASM_PARSERS "") -set(LLVM_ENUM_DISASSEMBLERS "") -foreach(t ${LLVM_TARGETS_TO_BUILD}) - set( td ${LLVM_MAIN_SRC_DIR}/lib/Target/${t} ) - file(GLOB asmp_file "${td}/*AsmPrinter.cpp") - if( asmp_file ) - set(LLVM_ENUM_ASM_PRINTERS - "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n") - endif() - if( EXISTS ${td}/AsmParser/CMakeLists.txt ) - set(LLVM_ENUM_ASM_PARSERS - "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n") - endif() - if( EXISTS ${td}/Disassembler/CMakeLists.txt ) - set(LLVM_ENUM_DISASSEMBLERS - "${LLVM_ENUM_DISASSEMBLERS}LLVM_DISASSEMBLER(${t})\n") - endif() -endforeach(t) - -# Produce the target definition files, which provide a way for clients to easily -# include various classes of targets. -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in - ${LLVM_BINARY_DIR}/include/llvm/Config/AsmPrinters.def - ) -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in - ${LLVM_BINARY_DIR}/include/llvm/Config/AsmParsers.def - ) -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Disassemblers.def.in - ${LLVM_BINARY_DIR}/include/llvm/Config/Disassemblers.def - ) -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in - ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def - ) - -# Configure the three LLVM configuration header files. -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/config.h.cmake - ${LLVM_BINARY_DIR}/include/llvm/Config/config.h) -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/llvm-config.h.cmake - ${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h) -configure_file( - ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support/DataTypes.h.cmake - ${LLVM_BINARY_DIR}/include/llvm/Support/DataTypes.h) - -set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} ) -set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib ) -set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib ) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR}) - -if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include llvm/Support/Solaris.h") -endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS ) - -include(AddLLVM) -include(TableGen) - -if( MINGW ) - # 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/Support) -add_subdirectory(lib/TableGen) - -add_subdirectory(utils/TableGen) - -add_subdirectory(include/llvm) - -add_subdirectory(lib) - -add_subdirectory(utils/FileCheck) -add_subdirectory(utils/FileUpdate) -add_subdirectory(utils/count) -add_subdirectory(utils/not) -add_subdirectory(utils/llvm-lit) -add_subdirectory(utils/yaml-bench) -add_subdirectory(utils/obj2yaml) -add_subdirectory(utils/yaml2obj) - -add_subdirectory(projects) - -if( LLVM_INCLUDE_TOOLS ) - add_subdirectory(tools) -endif() - -if( LLVM_INCLUDE_RUNTIME ) - add_subdirectory(runtime) -endif() - -if( LLVM_INCLUDE_EXAMPLES ) - add_subdirectory(examples) -endif() - -if( LLVM_INCLUDE_TESTS ) - add_subdirectory(test) - add_subdirectory(utils/unittest) - add_subdirectory(unittests) - if (MSVC) - # This utility is used to prevent chrashing 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) - add_lit_target(check-all - "Running all regression tests" - ${LLVM_LIT_TESTSUITES} - PARAMS ${LLVM_LIT_PARAMS} - DEPENDS ${LLVM_LIT_DEPENDS} - ARGS ${LLVM_LIT_EXTRA_ARGS} - ) -endif() - -add_subdirectory(cmake/modules) - -install(DIRECTORY include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.def" - PATTERN "*.h" - PATTERN "*.td" - PATTERN "*.inc" - PATTERN "LICENSE.TXT" - PATTERN ".svn" EXCLUDE - ) - -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.def" - PATTERN "*.h" - PATTERN "*.gen" - PATTERN "*.inc" - # Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def" - PATTERN "CMakeFiles" EXCLUDE - PATTERN ".svn" EXCLUDE - ) - -# TODO: make and install documentation. - -set(CPACK_PACKAGE_VENDOR "LLVM") -set(CPACK_PACKAGE_VERSION_MAJOR ${LLVM_VERSION_MAJOR}) -set(CPACK_PACKAGE_VERSION_MINOR ${LLVM_VERSION_MINOR}) -add_version_info_from_vcs(CPACK_PACKAGE_VERSION_PATCH) -include(CPack) - -# Workaround for MSVS10 to avoid the Dialog Hell -# FIXME: This could be removed with future version of CMake. -if(MSVC_VERSION EQUAL 1600) - set(LLVM_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/LLVM.sln") - if( EXISTS "${LLVM_SLN_FILENAME}" ) - file(APPEND "${LLVM_SLN_FILENAME}" "\n# This should be regenerated!\n") - endif() -endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eb89a78..7db347c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,3 @@ -# $Id$ - include(HandleLLVMOptions) include_directories( @@ -8,19 +6,6 @@ include_directories( ${CMAKE_BINARY_DIR}/include ) -set_source_files_properties( - ${CMAKE_BINARY_DIR}/clang/include/clang/Basic/DiagnosticCommonKinds.inc - PROPERTIES HEADER_FILE_ONLY TRUE) - -# HACK: we depend on some dyanamically generated headers - ensure they are build -# before our own source files our compiled. -set_source_files_properties( - main.cpp - OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/clang/include/clang/Basic/DiagnosticCommonKinds.inc) -set_source_files_properties( - UnnecessaryIncludeFinder.cpp - OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/clang/include/clang/Basic/DiagnosticCommonKinds.inc) - add_clang_executable(find-unnecessary-includes main.cpp UnnecessaryIncludeFinder.cpp diff --git a/src/UnnecessaryIncludeFinder.cpp b/src/UnnecessaryIncludeFinder.cpp index 69419f6..83bfd41 100644 --- a/src/UnnecessaryIncludeFinder.cpp +++ b/src/UnnecessaryIncludeFinder.cpp @@ -1,4 +1,3 @@ -// $Id$ #include "UnnecessaryIncludeFinder.h" #include "clang/AST/ASTContext.h" #include "clang/Basic/FileManager.h" @@ -18,7 +17,7 @@ IncludeDirective::printFileName (std::ostream& out) << fileName_ << (angled_ ? '>' : '"'); } - + void IncludeDirective::printWarningPrefix (std::ostream& out) { @@ -95,7 +94,7 @@ class UsedHeaderReporter: public IncludeDirectiveVisitor public: UsedHeaderReporter ( - const UsedHeaders& usedHeaders, SourceManager& sourceManager): + const UsedHeaders& usedHeaders): usedHeaders_(usedHeaders) { } @@ -116,16 +115,14 @@ class UsedHeaderReporter: public IncludeDirectiveVisitor }; void -SourceFile::reportNestedUsedHeaders ( - const UsedHeaders& usedHeaders, SourceManager& sourceManager) +SourceFile::reportNestedUsedHeaders (const UsedHeaders& usedHeaders) { - UsedHeaderReporter reporter(usedHeaders, sourceManager); + UsedHeaderReporter reporter(usedHeaders); traverse(reporter); } bool -SourceFile::reportUnnecessaryIncludes ( - const UsedHeaders& allUsedHeaders, SourceManager& sourceManager) +SourceFile::reportUnnecessaryIncludes (const UsedHeaders& allUsedHeaders) { bool foundUnnecessary = false; @@ -150,7 +147,7 @@ SourceFile::reportUnnecessaryIncludes ( pIncludeDirective->printWarningPrefix(std::cout); if (haveNestedUsedHeader) { std::cout << "is replaceable. It includes these used headers:"; - pHeader->reportNestedUsedHeaders(allUsedHeaders, sourceManager); + pHeader->reportNestedUsedHeaders(allUsedHeaders); } else { std::cout << "is unnecessary"; } @@ -173,17 +170,16 @@ class PreprocessorCallbacks: public clang::PPCallbacks delegate_(delegate) { } - virtual void InclusionDirective( clang::SourceLocation hashLoc, - const clang::Token &includeToken, + const clang::Token& includeToken, llvm::StringRef fileName, bool isAngled, clang::CharSourceRange filenameRange, - const clang::FileEntry *file, + const clang::FileEntry* pFile, llvm::StringRef searchPath, llvm::StringRef relativePath, - const clang::Module *imported) + const clang::Module* pImported) { delegate_.InclusionDirective( hashLoc, @@ -191,10 +187,10 @@ class PreprocessorCallbacks: public clang::PPCallbacks fileName, isAngled, filenameRange, - file, + pFile, searchPath, relativePath, - imported); + pImported); } virtual void FileChanged ( @@ -264,14 +260,14 @@ UnnecessaryIncludeFinder::markUsed ( void UnnecessaryIncludeFinder::InclusionDirective( clang::SourceLocation hashLoc, - const clang::Token &includeTok, + const clang::Token& includeToken, llvm::StringRef fileName, bool isAngled, clang::CharSourceRange filenameRange, - const clang::FileEntry *file, + const clang::FileEntry* pFile, llvm::StringRef searchPath, llvm::StringRef relativePath, - const clang::Module *imported) + const clang::Module* pImported) { std::string directiveLocation; raw_string_ostream rso(directiveLocation); @@ -282,8 +278,8 @@ UnnecessaryIncludeFinder::InclusionDirective( IncludeDirective::Ptr pIncludeDirective( new IncludeDirective(directiveLocation, fileName, isAngled)); - fileToIncludeDirectiveMap_.erase(file); - fileToIncludeDirectiveMap_.insert(std::make_pair(file, pIncludeDirective)); + fileToIncludeDirectiveMap_.erase(pFile); + fileToIncludeDirectiveMap_.insert(std::make_pair(pFile, pIncludeDirective)); } SourceFile::Ptr @@ -444,8 +440,7 @@ UnnecessaryIncludeFinderAction::CreateASTConsumer ( } bool -UnnecessaryIncludeFinderAction::reportUnnecessaryIncludes ( - SourceManager& sourceManager) +UnnecessaryIncludeFinderAction::reportUnnecessaryIncludes () { bool foundUnnecessary = false; @@ -455,8 +450,7 @@ UnnecessaryIncludeFinderAction::reportUnnecessaryIncludes ( { SourceFile::Ptr pMainSource(*ppSource); - bool found = pMainSource->reportUnnecessaryIncludes( - allUsedHeaders_, sourceManager); + bool found = pMainSource->reportUnnecessaryIncludes(allUsedHeaders_); if (found) { foundUnnecessary = true; } diff --git a/src/UnnecessaryIncludeFinder.h b/src/UnnecessaryIncludeFinder.h index 429d5ab..34da788 100644 --- a/src/UnnecessaryIncludeFinder.h +++ b/src/UnnecessaryIncludeFinder.h @@ -1,4 +1,3 @@ -// $Id$ #ifndef UNUSEDHEADERFINDER_H #define UNUSEDHEADERFINDER_H @@ -107,16 +106,14 @@ class SourceFile: public llvm::RefCountedBase /** * Reports the headers included by this source file that are used. */ - void reportNestedUsedHeaders( - const UsedHeaders& usedHeaders, clang::SourceManager& sourceManager); + void reportNestedUsedHeaders(const UsedHeaders& usedHeaders); /** * Reports unnecessary #include directives in this source file. * * @return true if an unnecessary #include directive was found */ - bool reportUnnecessaryIncludes( - const UsedHeaders& allUsedHeaders, clang::SourceManager& sourceManager); + bool reportUnnecessaryIncludes(const UsedHeaders& allUsedHeaders); }; class UnnecessaryIncludeFinderAction; @@ -137,7 +134,7 @@ class UnnecessaryIncludeFinder: UnnecessaryIncludeFinderAction& action_; clang::SourceManager& sourceManager_; - // map file to last #include directive that includes it + // map file to last #include directive that includes it typedef llvm::DenseMap FileToIncludeDirectiveMap; FileToIncludeDirectiveMap fileToIncludeDirectiveMap_; @@ -181,15 +178,15 @@ class UnnecessaryIncludeFinder: clang::PPCallbacks* createPreprocessorCallbacks(); virtual void InclusionDirective( - clang::SourceLocation HashLoc, - const clang::Token &IncludeTok, - llvm::StringRef FileName, - bool IsAngled, - clang::CharSourceRange FilenameRange, - const clang::FileEntry *File, - llvm::StringRef SearchPath, - llvm::StringRef RelativePath, - const clang::Module *Imported); + clang::SourceLocation hashLoc, + const clang::Token& includeToken, + llvm::StringRef fileName, + bool isAngled, + clang::CharSourceRange filenameRange, + const clang::FileEntry* pFile, + llvm::StringRef searchPath, + llvm::StringRef relativePath, + const clang::Module* pImported); virtual void FileChanged( clang::SourceLocation newLocation, @@ -218,10 +215,10 @@ class UnnecessaryIncludeFinder: // Called when a class template is used. bool VisitTemplateSpecializationTypeLoc( clang::TemplateSpecializationTypeLoc typeLoc); - + // Called when a variable, function, or enum constant is used. bool VisitDeclRefExpr(clang::DeclRefExpr* pExpr); - + // Called when a class, struct, or union member is used. bool VisitMemberExpr(clang::MemberExpr* pExpr); @@ -249,7 +246,7 @@ class UnnecessaryIncludeFinderAction: public clang::ASTFrontendAction * * @return true if any unnecessary #include directives were found */ - bool reportUnnecessaryIncludes(clang::SourceManager& sourceManager); + bool reportUnnecessaryIncludes(); }; #endif diff --git a/src/main.cpp b/src/main.cpp index aa22229..30da358 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,3 @@ -// $Id$ #include "clang/Basic/Version.h" #include "clang/Frontend/CompilerInstance.h" #include "llvm/Support/ManagedStatic.h" @@ -108,8 +107,7 @@ main (int argc, char* argv[]) UnnecessaryIncludeFinderAction action; compiler.ExecuteAction(action); - bool foundUnnecessary = action.reportUnnecessaryIncludes( - compiler.getSourceManager()); + bool foundUnnecessary = action.reportUnnecessaryIncludes(); llvm_shutdown(); return foundUnnecessary ? EXIT_FAILURE : EXIT_SUCCESS;