cmake scripts do not work for CentOS7 #914

Updated minimum cmake version to 3.1
Added checks in findllvm script to handle old 3.4 LLVM version
Added back include directories needed by old LLVM version in ICG.
This commit is contained in:
Alex Lin 2019-11-22 08:12:54 -06:00
parent 88149a990d
commit 83338c4957
4 changed files with 19 additions and 12 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 3.1)
project(trick) project(trick)
set(TRICK_MAJOR 19) set(TRICK_MAJOR 19)
set(TRICK_MINOR 1) set(TRICK_MINOR 1)

View File

@ -107,11 +107,14 @@ else()
llvm_set(HOST_TARGET host-target) llvm_set(HOST_TARGET host-target)
llvm_set(INCLUDE_DIRS includedir true) llvm_set(INCLUDE_DIRS includedir true)
llvm_set(ROOT_DIR prefix true) llvm_set(ROOT_DIR prefix true)
llvm_set(ENABLE_ASSERTIONS assertion-mode)
# The LLVM version string _may_ contain a git/svn suffix, so match only the x.y.z part # The LLVM version string _may_ contain a git/svn suffix, so match only the x.y.z part
string(REGEX MATCH "^[0-9]+[.][0-9]+[.][0-9]+" LLVM_VERSION_BASE_STRING "${LLVM_VERSION_STRING}") string(REGEX MATCH "^[0-9]+[.][0-9]+[.][0-9]+" LLVM_VERSION_BASE_STRING "${LLVM_VERSION_STRING}")
if(NOT ${LLVM_VERSION_STRING} MATCHES "^3\\.4\\..*")
llvm_set(ENABLE_ASSERTIONS assertion-mode)
endif()
# Versions below 4.0 do not support components debuginfomsf and demangle # Versions below 4.0 do not support components debuginfomsf and demangle
if(${LLVM_VERSION_STRING} MATCHES "^3\\..*") if(${LLVM_VERSION_STRING} MATCHES "^3\\..*")
list(REMOVE_ITEM LLVM_FIND_COMPONENTS "debuginfomsf" index) list(REMOVE_ITEM LLVM_FIND_COMPONENTS "debuginfomsf" index)
@ -125,7 +128,9 @@ else()
llvm_set(LDFLAGS ldflags) llvm_set(LDFLAGS ldflags)
# In LLVM 3.5+, the system library dependencies (e.g. "-lz") are accessed # In LLVM 3.5+, the system library dependencies (e.g. "-lz") are accessed
# using the separate "--system-libs" flag. # using the separate "--system-libs" flag.
llvm_set(SYSTEM_LIBS system-libs) if(NOT ${LLVM_VERSION_STRING} MATCHES "^3\\.4\\..*")
llvm_set(SYSTEM_LIBS system-libs)
endif()
string(REPLACE "\n" " " LLVM_LDFLAGS "${LLVM_LDFLAGS} ${LLVM_SYSTEM_LIBS}") string(REPLACE "\n" " " LLVM_LDFLAGS "${LLVM_LDFLAGS} ${LLVM_SYSTEM_LIBS}")
string(STRIP ${LLVM_LDFLAGS} LLVM_LDFLAGS) string(STRIP ${LLVM_LDFLAGS} LLVM_LDFLAGS)
llvm_set(LIBRARY_DIRS libdir true) llvm_set(LIBRARY_DIRS libdir true)
@ -150,10 +155,12 @@ else()
# Parse LLVM_NATIVE_ARCH manually from LLVMConfig.cmake; including it leads to issues like # Parse LLVM_NATIVE_ARCH manually from LLVMConfig.cmake; including it leads to issues like
# https://github.com/ldc-developers/ldc/issues/3079. # https://github.com/ldc-developers/ldc/issues/3079.
file(STRINGS "${LLVM_CMAKEDIR}/LLVMConfig.cmake" LLVM_NATIVE_ARCH LIMIT_COUNT 1 REGEX "^set\\(LLVM_NATIVE_ARCH (.+)\\)$") if(EXISTS "${LLVM_CMAKEDIR}/LLVMConfig.cmake")
string(REGEX MATCH "set\\(LLVM_NATIVE_ARCH (.+)\\)" LLVM_NATIVE_ARCH "${LLVM_NATIVE_ARCH}") file(STRINGS "${LLVM_CMAKEDIR}/LLVMConfig.cmake" LLVM_NATIVE_ARCH LIMIT_COUNT 1 REGEX "^set\\(LLVM_NATIVE_ARCH (.+)\\)$")
set(LLVM_NATIVE_ARCH ${CMAKE_MATCH_1}) string(REGEX MATCH "set\\(LLVM_NATIVE_ARCH (.+)\\)" LLVM_NATIVE_ARCH "${LLVM_NATIVE_ARCH}")
message(STATUS "LLVM_NATIVE_ARCH: ${LLVM_NATIVE_ARCH}") set(LLVM_NATIVE_ARCH ${CMAKE_MATCH_1})
message(STATUS "LLVM_NATIVE_ARCH: ${LLVM_NATIVE_ARCH}")
endif()
endif() endif()
# On CMake builds of LLVM, the output of llvm-config --cxxflags does not # On CMake builds of LLVM, the output of llvm-config --cxxflags does not
@ -180,6 +187,7 @@ endif()
string(REGEX REPLACE "([0-9]+).*" "\\1" LLVM_VERSION_MAJOR "${LLVM_VERSION_STRING}" ) string(REGEX REPLACE "([0-9]+).*" "\\1" LLVM_VERSION_MAJOR "${LLVM_VERSION_STRING}" )
string(REGEX REPLACE "[0-9]+\\.([0-9]+).*[A-Za-z]*" "\\1" LLVM_VERSION_MINOR "${LLVM_VERSION_STRING}" ) string(REGEX REPLACE "[0-9]+\\.([0-9]+).*[A-Za-z]*" "\\1" LLVM_VERSION_MINOR "${LLVM_VERSION_STRING}" )
string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*[A-Za-z]*" "\\1" LLVM_VERSION_PATCH "${LLVM_VERSION_STRING}" )
if (${LLVM_VERSION_STRING} VERSION_LESS ${LLVM_FIND_VERSION}) if (${LLVM_VERSION_STRING} VERSION_LESS ${LLVM_FIND_VERSION})
message(FATAL_ERROR "Unsupported LLVM version found ${LLVM_VERSION_STRING}. At least version ${LLVM_FIND_VERSION} is required.") message(FATAL_ERROR "Unsupported LLVM version found ${LLVM_VERSION_STRING}. At least version ${LLVM_FIND_VERSION} is required.")

View File

@ -25,15 +25,14 @@ set ( ICG_SRC
add_executable( trick-ICG ${ICG_SRC} ) add_executable( trick-ICG ${ICG_SRC} )
target_compile_options( trick-ICG PUBLIC -g -DTRICK_VERSION="${TRICK_MAJOR}.${TRICK_MINOR}.${TRICK_TINY}" -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS) target_compile_options( trick-ICG PUBLIC -g -DTRICK_VERSION="${TRICK_MAJOR}.${TRICK_MINOR}.${TRICK_TINY}" -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS)
target_compile_options( trick-ICG PUBLIC -DLIBCLANG_MAJOR=${LLVM_VERSION_MAJOR} -DLIBCLANG_MINOR=${LLVM_VERSION_MINOR})
target_compile_options( trick-ICG PUBLIC -DEXTERNAL_BUILD) target_compile_options( trick-ICG PUBLIC -DEXTERNAL_BUILD)
target_compile_options( trick-ICG PUBLIC -DLLVM_HOME="${LLVM_ROOT_DIR}")
target_compile_options( trick-ICG PUBLIC -DLIBCLANG_MAJOR=${LLVM_VERSION_MAJOR} -DLIBCLANG_MINOR=${LLVM_VERSION_MINOR} -DLIBCLANG_PATCHLEVEL=${LLVM_VERSION_PATCH})
target_include_directories( trick-ICG PUBLIC ${UDUNITS2_INCLUDES} ) target_include_directories( trick-ICG PUBLIC ${UDUNITS2_INCLUDES} )
target_include_directories( trick-ICG PUBLIC ${LLVM_INCLUDE_DIRS} ) target_include_directories( trick-ICG PUBLIC ${LLVM_INCLUDE_DIRS} )
set_property(SOURCE trick-ICG APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/include/mongoose/mongoose.h) set_property(SOURCE trick-ICG APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/include/mongoose/mongoose.h)
target_link_libraries( trick-ICG target_link_libraries( trick-ICG
${LLVM_LDFLAGS}
${LLVM_LIBRARIES}
-lclangFrontend -lclangFrontend
-lclangDriver -lclangDriver
-lclangSerialization -lclangSerialization
@ -44,6 +43,8 @@ target_link_libraries( trick-ICG
-lclangAST -lclangAST
-lclangLex -lclangLex
-lclangBasic -lclangBasic
${LLVM_LDFLAGS}
${LLVM_LIBRARIES}
${UDUNITS2_LIBRARIES} ${UDUNITS2_LIBRARIES}
) )

View File

@ -36,7 +36,6 @@ void HeaderSearchDirs::AddCompilerBuiltInSearchDirs () {
// Add clang specific include directory first. Only required on linux systems. :( // Add clang specific include directory first. Only required on linux systems. :(
// This is so that ICG will find clang friendly headers first. gcc headers cause // This is so that ICG will find clang friendly headers first. gcc headers cause
// all kinds of problems. On macs all headers are clang friendly. // all kinds of problems. On macs all headers are clang friendly.
#ifndef EXTERNAL_BUILD
#if __linux #if __linux
std::stringstream icg_dir ; std::stringstream icg_dir ;
icg_dir << LLVM_HOME << "/lib/clang/" ; icg_dir << LLVM_HOME << "/lib/clang/" ;
@ -49,7 +48,6 @@ void HeaderSearchDirs::AddCompilerBuiltInSearchDirs () {
if ( resolved_path != NULL ) { if ( resolved_path != NULL ) {
hso.AddPath(resolved_path , clang::frontend::System, IsFramework, IsSysRootRelative); hso.AddPath(resolved_path , clang::frontend::System, IsFramework, IsSysRootRelative);
} }
#endif
#endif #endif
fp = popen("${TRICK_HOME}/bin/trick-gte TRICK_CXX" , "r") ; fp = popen("${TRICK_HOME}/bin/trick-gte TRICK_CXX" , "r") ;