From b0aae61c97966cb9d424b500d7ced5bdf500d8db Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 20 Aug 2017 11:18:21 +0200 Subject: [PATCH] Fixes for cross platform build with new LLVM/CLANG version --- CMakeLists.txt | 3 ++- cmake/FindLibClang.cmake | 55 ---------------------------------------- src/CMakeLists.txt | 17 +++++++++---- src/portable.cpp | 1 + 4 files changed, 15 insertions(+), 61 deletions(-) delete mode 100644 cmake/FindLibClang.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d8337d4dd90..ed633209ad0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,8 @@ endif() set(MACOS_VERSION_MIN 10.5) if (use_libclang) set(clang "1" CACHE INTERNAL "used in settings.h") - find_package(LibClang REQUIRED) + find_package(LLVM CONFIG REQUIRED) + find_package(Clang CONFIG REQUIRED) if (${CMAKE_SYSTEM} MATCHES "Darwin") set(MACOS_VERSION_MIN 10.11) endif() diff --git a/cmake/FindLibClang.cmake b/cmake/FindLibClang.cmake deleted file mode 100644 index e7462d4b8f0..00000000000 --- a/cmake/FindLibClang.cmake +++ /dev/null @@ -1,55 +0,0 @@ -if (NOT CLANG_ROOT) - set(CLANG_ROOT $ENV{CLANG_ROOT}) -endif () - -if (NOT LLVM_CONFIG) - set(LLVM_CONFIG $ENV{LLVM_CONFIG}) - if (NOT LLVM_CONFIG) - set(llvm_config_names llvm-config) - foreach(minor RANGE 9 1) - list(APPEND llvm_config_names "llvm-config3${minor}" "llvm-config-3.${minor}" "llvm-config-mp-3.${minor}") - endforeach () - find_program(LLVM_CONFIG NAMES ${llvm_config_names}) - endif () -endif () - -if (LLVM_CONFIG) - message(STATUS "llvm-config found at: ${LLVM_CONFIG}") -else () - message(FATAL_ERROR "Could NOT find llvm-config executable.") -endif () - -if (NOT EXISTS ${CLANG_INCLUDEDIR}) - execute_process(COMMAND ${LLVM_CONFIG} --includedir OUTPUT_VARIABLE CLANG_INCLUDEDIR OUTPUT_STRIP_TRAILING_WHITESPACE) - if (NOT EXISTS ${CLANG_INCLUDEDIR}) - message(FATAL_ERROR "Could NOT find clang includedir. You can fix this by setting CLANG_INCLUDEDIR in your shell or as a cmake variable.") - endif () -endif () - -if (NOT EXISTS ${CLANG_LIBDIR}) - execute_process(COMMAND ${LLVM_CONFIG} --libdir OUTPUT_VARIABLE CLANG_LIBDIR OUTPUT_STRIP_TRAILING_WHITESPACE) - if (NOT EXISTS ${CLANG_LIBDIR}) - message(FATAL_ERROR "Could NOT find clang libdir. You can fix this by setting CLANG_LIBDIR in your shell or as a cmake variable.") - endif () -endif () - -if (NOT CLANG_LIBS) - find_library(CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT NAMES clang libclang ${CLANG_ROOT}/lib ${CLANG_LIBDIR} NO_DEFAULT_PATH) - if (NOT EXISTS ${CLANG_CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT}) - find_library(CLANG_LIBS NAMES clang libclang) - if (NOT EXISTS ${CLANG_LIBS}) - if (MSVC) - set (CLANG_LIBS "${CLANG_LIBDIR}/libclang.lib") - else() - set (CLANG_LIBS "-L${CLANG_LIBDIR}" "-lclang" "-Wl,-rpath,${CLANG_LIBDIR}") - endif() - endif () - else () - set(CLANG_LIBS "${CLANG_LIB_HACK_CMAKECACHE_DOT_TEXT_BULLSHIT}") - endif () -endif () - -execute_process(COMMAND ${LLVM_CONFIG} --version OUTPUT_VARIABLE CLANG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) -message("-- Using Clang ${CLANG_VERSION} from ${CLANG_LIBDIR} with LIBS ${CLANG_LIBS} and CXXFLAGS ${CLANG_CXXFLAGS}") - - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index df76cb01fd0..be395f45c10 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -248,13 +248,20 @@ add_executable(doxygen main.cpp) if (use_libclang) find_package(LLVM REQUIRED CONFIG) find_package(Clang REQUIRED CONFIG) - target_compile_features(_doxygen PRIVATE cxx_alignof) - target_compile_options(_doxygen PRIVATE -stdlib=libc++ -std=c++11) - target_compile_features(doxygen PRIVATE cxx_alignof) - target_compile_options(doxygen PRIVATE -stdlib=libc++ -std=c++11) + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + target_compile_features(_doxygen PRIVATE cxx_alignof) + target_compile_features(doxygen PRIVATE cxx_alignof) + target_compile_options(_doxygen PRIVATE -stdlib=libc++ -std=c++11) + target_compile_options(doxygen PRIVATE -stdlib=libc++ -std=c++11) + elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + target_compile_options(_doxygen PRIVATE -std=c++11) + target_compile_options(doxygen PRIVATE -std=c++11) + endif() + include_directories(${LLVM_INCLUDE_DIRS}) + add_definitions(${LLVM_DEFINITIONS}) llvm_map_components_to_libnames(llvm_libs support core option) target_compile_definitions(doxygen PRIVATE ${LLVM_DEFINITIONS}) - set(CLANG_LIBS ${llvm_libs} ${CLANG_LIBS} clangTooling) + set(CLANG_LIBS libclang clangTooling ${llvm_libs}) endif() target_link_libraries(doxygen diff --git a/src/portable.cpp b/src/portable.cpp index 1983fe72759..4ad88a46c10 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -180,6 +180,7 @@ int portable_system(const char *command,const char *args,bool commandHasConsole) } } #endif + return 1; // we should never get here }