support -flto with clang++
This commit is contained in:
parent
110e6c3689
commit
43566bfd14
13
.travis.yml
13
.travis.yml
@ -140,6 +140,15 @@ before_install:
|
|||||||
export CXXCOMPILER='clang++'
|
export CXXCOMPILER='clang++'
|
||||||
./third_party/mason/mason install clang++ ${CLANG_VERSION}
|
./third_party/mason/mason install clang++ ${CLANG_VERSION}
|
||||||
export PATH=$(./third_party/mason/mason prefix clang++ ${CLANG_VERSION})/bin:${PATH}
|
export PATH=$(./third_party/mason/mason prefix clang++ ${CLANG_VERSION})/bin:${PATH}
|
||||||
|
./third_party/mason/mason install binutils 2.27
|
||||||
|
export PATH=$(./third_party/mason/mason prefix binutils 2.27)/bin:${PATH}
|
||||||
|
which ld
|
||||||
|
./third_party/mason/mason install llvm ${CLANG_VERSION}
|
||||||
|
export PATH=$(./third_party/mason/mason prefix llvm ${CLANG_VERSION})/bin:${PATH}
|
||||||
|
which llvm-ar
|
||||||
|
which llvm-ranlib
|
||||||
|
which llvm-nm
|
||||||
|
export CMAKE_EXTRA="-DCMAKE_AR=$(which llvm-ar) -DCMAKE_NM=$(which llvm-nm) -DCMAKE_RANLIB=$(which llvm-ranlib)"
|
||||||
fi
|
fi
|
||||||
- ccache --max-size=256M # limiting the cache's size to roughly the previous job's object sizes
|
- ccache --max-size=256M # limiting the cache's size to roughly the previous job's object sizes
|
||||||
|
|
||||||
@ -151,7 +160,7 @@ install:
|
|||||||
- export OSRM_BUILD_DIR="$(pwd)/build-osrm"
|
- export OSRM_BUILD_DIR="$(pwd)/build-osrm"
|
||||||
- mkdir ${OSRM_BUILD_DIR} && pushd ${OSRM_BUILD_DIR}
|
- mkdir ${OSRM_BUILD_DIR} && pushd ${OSRM_BUILD_DIR}
|
||||||
- export CC=${CCOMPILER} CXX=${CXXCOMPILER}
|
- export CC=${CCOMPILER} CXX=${CXXCOMPILER}
|
||||||
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_MASON=${ENABLE_MASON:-OFF} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} -DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} -DBUILD_TOOLS=ON -DBUILD_COMPONENTS=${BUILD_COMPONENTS:-OFF} -DENABLE_CCACHE=ON
|
- cmake .. ${CMAKE_EXTRA:-} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_MASON=${ENABLE_MASON:-OFF} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} -DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} -DBUILD_TOOLS=ON -DBUILD_COMPONENTS=${BUILD_COMPONENTS:-OFF} -DENABLE_CCACHE=ON
|
||||||
- echo "travis_fold:start:MAKE"
|
- echo "travis_fold:start:MAKE"
|
||||||
- make --jobs=${JOBS}
|
- make --jobs=${JOBS}
|
||||||
- make tests --jobs=${JOBS}
|
- make tests --jobs=${JOBS}
|
||||||
@ -165,7 +174,7 @@ install:
|
|||||||
fi
|
fi
|
||||||
- popd
|
- popd
|
||||||
- mkdir example/build && pushd example/build
|
- mkdir example/build && pushd example/build
|
||||||
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
- cmake .. ${CMAKE_EXTRA:-} -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
||||||
- make --jobs=${JOBS}
|
- make --jobs=${JOBS}
|
||||||
- popd
|
- popd
|
||||||
- npm run build-api-docs
|
- npm run build-api-docs
|
||||||
|
@ -141,6 +141,7 @@ if(ENABLE_GOLD_LINKER)
|
|||||||
if("${LD_VERSION}" MATCHES "GNU gold")
|
if("${LD_VERSION}" MATCHES "GNU gold")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
|
||||||
|
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
|
||||||
message(STATUS "Using GNU gold as linker.")
|
message(STATUS "Using GNU gold as linker.")
|
||||||
|
|
||||||
# Issue 2785: check gold binutils version and don't use gc-sections for versions prior 2.25
|
# Issue 2785: check gold binutils version and don't use gc-sections for versions prior 2.25
|
||||||
@ -194,8 +195,18 @@ endif()
|
|||||||
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
|
if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
|
||||||
message(STATUS "Configuring release mode optimizations")
|
message(STATUS "Configuring release mode optimizations")
|
||||||
|
# clang requires -flto in linker flags as well as cxxflags
|
||||||
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
||||||
|
# skip check_cxx_compiler_flag since we know it works
|
||||||
|
# bug causes cmake to ignore LINKER_FLAGS, so we use ENV['LDFLAGS']
|
||||||
|
# https://cmake.org/Bug/view.php?id=15264
|
||||||
|
set(OLD_LDFLAGS_ENV ENV{LDFLAGS})
|
||||||
|
set(ENV{LDFLAGS} "$ENV{LDFLAGS} -flto")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Check if LTO is available
|
# Check if LTO is available
|
||||||
check_cxx_compiler_flag("-flto" LTO_AVAILABLE)
|
check_cxx_compiler_flag("-flto" LTO_AVAILABLE)
|
||||||
|
|
||||||
if(ENABLE_LTO AND LTO_AVAILABLE)
|
if(ENABLE_LTO AND LTO_AVAILABLE)
|
||||||
set(OLD_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
set(OLD_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||||
# GCC in addition allows parallelizing LTO
|
# GCC in addition allows parallelizing LTO
|
||||||
@ -210,6 +221,13 @@ if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CM
|
|||||||
check_cxx_source_compiles("${CHECK_LTO_SRC}" LTO_WORKS)
|
check_cxx_source_compiles("${CHECK_LTO_SRC}" LTO_WORKS)
|
||||||
if(LTO_WORKS)
|
if(LTO_WORKS)
|
||||||
message(STATUS "LTO working")
|
message(STATUS "LTO working")
|
||||||
|
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -flto")
|
||||||
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
||||||
|
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -flto")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -flto")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "LTO broken")
|
message(STATUS "LTO broken")
|
||||||
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
|
||||||
@ -228,9 +246,15 @@ if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CM
|
|||||||
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" AND NOT LTO_AVAILABLE OR NOT LTO_WORKS)
|
||||||
|
# restore the original, unmodified linker flags
|
||||||
|
set(ENV{LDFLAGS} "${OLD_LDFLAGS_ENV}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_MASON AND (LTO_WORKS OR ENABLE_GOLD_LINKER))
|
endif()
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE AND ENABLE_MASON AND (LTO_WORKS OR ENABLE_GOLD_LINKER))
|
||||||
message(WARNING "ENABLE_MASON and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently")
|
message(WARNING "ENABLE_MASON and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently")
|
||||||
message(WARNING "For more details see: https://github.com/Project-OSRM/osrm-backend/issues/3202")
|
message(WARNING "For more details see: https://github.com/Project-OSRM/osrm-backend/issues/3202")
|
||||||
endif()
|
endif()
|
||||||
@ -293,9 +317,11 @@ if("${LINKER_VERSION}" MATCHES "GNU gold" OR "${LINKER_VERSION}" MATCHES "GNU ld
|
|||||||
endif()
|
endif()
|
||||||
# Default linker optimization flags
|
# Default linker optimization flags
|
||||||
set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common")
|
set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
message(STATUS "Using unknown linker, not setting linker optimizations")
|
message(STATUS "Using unknown linker, not setting linker optimizations")
|
||||||
endif ()
|
endif ()
|
||||||
|
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} ${LINKER_FLAGS}")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
|
||||||
@ -655,6 +681,7 @@ endfunction()
|
|||||||
|
|
||||||
JOIN("${OSRM_DEFINES}" " " TMP_OSRM_DEFINES)
|
JOIN("${OSRM_DEFINES}" " " TMP_OSRM_DEFINES)
|
||||||
set(LibOSRM_CXXFLAGS "${OSRM_CXXFLAGS} ${TMP_OSRM_DEFINES}")
|
set(LibOSRM_CXXFLAGS "${OSRM_CXXFLAGS} ${TMP_OSRM_DEFINES}")
|
||||||
|
set(LibOSRM_LDFLAGS "${OSRM_LDFLAGS}")
|
||||||
|
|
||||||
if(BUILD_AS_SUBPROJECT)
|
if(BUILD_AS_SUBPROJECT)
|
||||||
set(LibOSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}" PARENT_SCOPE)
|
set(LibOSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}" PARENT_SCOPE)
|
||||||
@ -671,6 +698,7 @@ endif()
|
|||||||
|
|
||||||
# pkgconfig defines
|
# pkgconfig defines
|
||||||
set(PKGCONFIG_OSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}")
|
set(PKGCONFIG_OSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}")
|
||||||
|
set(PKGCONFIG_OSRM_LDFLAGS "${LibOSRM_LDFLAGS}")
|
||||||
set(PKGCONFIG_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
set(PKGCONFIG_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
set(PKGCONFIG_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
|
set(PKGCONFIG_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
|
||||||
|
|
||||||
@ -703,6 +731,7 @@ if (ENABLE_FUZZING)
|
|||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=edge,indirect-calls,8bit-counters -fsanitize=address")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=edge,indirect-calls,8bit-counters -fsanitize=address")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
||||||
|
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -fsanitize=address")
|
||||||
|
|
||||||
message(STATUS "Using -fsanitize=${FUZZ_SANITIZER} for Fuzz testing")
|
message(STATUS "Using -fsanitize=${FUZZ_SANITIZER} for Fuzz testing")
|
||||||
|
|
||||||
|
@ -6,6 +6,6 @@ Name: libOSRM
|
|||||||
Description: Project OSRM library
|
Description: Project OSRM library
|
||||||
Version: v@OSRM_VERSION@
|
Version: v@OSRM_VERSION@
|
||||||
Requires:
|
Requires:
|
||||||
Libs: -L${libdir} -losrm
|
Libs: -L${libdir} -losrm @PKGCONFIG_OSRM_LDFLAGS@
|
||||||
Libs.private: @PKGCONFIG_OSRM_DEPENDENT_LIBRARIES@
|
Libs.private: @PKGCONFIG_OSRM_DEPENDENT_LIBRARIES@
|
||||||
Cflags: @PKGCONFIG_OSRM_INCLUDE_FLAGS@ @PKGCONFIG_OSRM_CXXFLAGS@
|
Cflags: @PKGCONFIG_OSRM_INCLUDE_FLAGS@ @PKGCONFIG_OSRM_CXXFLAGS@
|
||||||
|
Loading…
Reference in New Issue
Block a user