mirror of https://github.com/google/benchmark.git
Add BENCHMARK_BUILD_32_BITS option and add builders to test it (#360)
* Add BENCHMARK_BUILD_32_BITS option and add builders to test it * Attempt to fix travis configuration * Make add_required_cxx_compiler_flag cause an error when the flag isn't supported * add gcc-multilib dependancy on travis * attempt to fix travis.yml parsing error * Require g++-multilib instead of gcc-multilib * Add 32 bit release configurations * Attempt to fix libc++ travis build w/ 32 bits * Work around CMake configuration failure on Travis
This commit is contained in:
parent
ec15860da5
commit
0dbcdf56a0
|
@ -10,12 +10,18 @@ git clone --depth=1 https://github.com/llvm-mirror/llvm.git llvm-source
|
||||||
git clone --depth=1 https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx
|
git clone --depth=1 https://github.com/llvm-mirror/libcxx.git llvm-source/projects/libcxx
|
||||||
git clone --depth=1 https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi
|
git clone --depth=1 https://github.com/llvm-mirror/libcxxabi.git llvm-source/projects/libcxxabi
|
||||||
|
|
||||||
|
# Setup libc++ options
|
||||||
|
if [ -z "$BUILD_32_BITS" ]; then
|
||||||
|
export BUILD_32_BITS=OFF && echo disabling 32 bit build
|
||||||
|
fi
|
||||||
|
|
||||||
# Build and install libc++ (Use unstable ABI for better sanitizer coverage)
|
# Build and install libc++ (Use unstable ABI for better sanitizer coverage)
|
||||||
mkdir llvm-build && cd llvm-build
|
mkdir llvm-build && cd llvm-build
|
||||||
cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} \
|
cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
-DLIBCXX_ABI_UNSTABLE=ON \
|
-DLIBCXX_ABI_UNSTABLE=ON \
|
||||||
-DLLVM_USE_SANITIZER=${LIBCXX_SANITIZER} \
|
-DLLVM_USE_SANITIZER=${LIBCXX_SANITIZER} \
|
||||||
|
-DLLVM_BUILD_32_BITS=${BUILD_32_BITS} \
|
||||||
../llvm-source
|
../llvm-source
|
||||||
make cxx -j2
|
make cxx -j2
|
||||||
sudo make install-cxxabi install-cxx
|
sudo make install-cxxabi install-cxx
|
||||||
|
|
50
.travis.yml
50
.travis.yml
|
@ -20,6 +20,18 @@ matrix:
|
||||||
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Debug
|
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Debug
|
||||||
- compiler: gcc
|
- compiler: gcc
|
||||||
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Release
|
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Release
|
||||||
|
- compiler: gcc
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Debug BUILD_32_BITS=ON
|
||||||
|
- compiler: gcc
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
env: COMPILER=g++ C_COMPILER=gcc BUILD_TYPE=Release BUILD_32_BITS=ON
|
||||||
- compiler: gcc
|
- compiler: gcc
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
@ -44,6 +56,39 @@ matrix:
|
||||||
- COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
|
- COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
|
||||||
- LIBCXX_BUILD=1
|
- LIBCXX_BUILD=1
|
||||||
- EXTRA_FLAGS="-stdlib=libc++"
|
- EXTRA_FLAGS="-stdlib=libc++"
|
||||||
|
- compiler: clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
clang-3.8
|
||||||
|
env:
|
||||||
|
- COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Release
|
||||||
|
- LIBCXX_BUILD=1
|
||||||
|
- EXTRA_FLAGS="-stdlib=libc++"
|
||||||
|
# Clang w/ 32bit libc++
|
||||||
|
- compiler: clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
- g++-multilib
|
||||||
|
env:
|
||||||
|
- COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Debug
|
||||||
|
- LIBCXX_BUILD=1
|
||||||
|
- BUILD_32_BITS=ON
|
||||||
|
- EXTRA_FLAGS="-stdlib=libc++ -m32"
|
||||||
|
# Clang w/ 32bit libc++
|
||||||
|
- compiler: clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
- g++-multilib
|
||||||
|
env:
|
||||||
|
- COMPILER=clang++-3.8 C_COMPILER=clang-3.8 BUILD_TYPE=Release
|
||||||
|
- LIBCXX_BUILD=1
|
||||||
|
- BUILD_32_BITS=ON
|
||||||
|
- EXTRA_FLAGS="-stdlib=libc++ -m32"
|
||||||
# Clang w/ libc++, ASAN, UBSAN
|
# Clang w/ libc++, ASAN, UBSAN
|
||||||
- compiler: clang
|
- compiler: clang
|
||||||
addons:
|
addons:
|
||||||
|
@ -77,6 +122,9 @@ matrix:
|
||||||
- EXTRA_FLAGS="-stdlib=libc++ -g -O2 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all"
|
- EXTRA_FLAGS="-stdlib=libc++ -g -O2 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all"
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
|
- if [ -z "$BUILD_32_BITS" ]; then
|
||||||
|
export BUILD_32_BITS=OFF && echo disabling 32 bit build;
|
||||||
|
fi
|
||||||
- if [ -n "${LIBCXX_BUILD}" ]; then
|
- if [ -n "${LIBCXX_BUILD}" ]; then
|
||||||
source .travis-libcxx-setup.sh;
|
source .travis-libcxx-setup.sh;
|
||||||
fi
|
fi
|
||||||
|
@ -90,7 +138,7 @@ install:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_FLAGS="${EXTRA_FLAGS}" ..
|
- cmake -DCMAKE_C_COMPILER=${C_COMPILER} -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_FLAGS="${EXTRA_FLAGS}" -DBENCHMARK_BUILD_32_BITS=${BUILD_32_BITS} ..
|
||||||
- make
|
- make
|
||||||
- make CTEST_OUTPUT_ON_FAILURE=1 test
|
- make CTEST_OUTPUT_ON_FAILURE=1 test
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON)
|
||||||
option(BENCHMARK_ENABLE_EXCEPTIONS "Enable the use of exceptions in the benchmark library." ON)
|
option(BENCHMARK_ENABLE_EXCEPTIONS "Enable the use of exceptions in the benchmark library." ON)
|
||||||
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF)
|
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF)
|
||||||
option(BENCHMARK_USE_LIBCXX "Build and test using libc++ as the standard library." OFF)
|
option(BENCHMARK_USE_LIBCXX "Build and test using libc++ as the standard library." OFF)
|
||||||
|
option(BENCHMARK_BUILD_32_BITS "Build a 32 bit version of the library" OFF)
|
||||||
|
|
||||||
# Make sure we can import out CMake functions
|
# Make sure we can import out CMake functions
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
@ -34,6 +36,10 @@ include(CheckCXXCompilerFlag)
|
||||||
include(AddCXXCompilerFlag)
|
include(AddCXXCompilerFlag)
|
||||||
include(CXXFeatureCheck)
|
include(CXXFeatureCheck)
|
||||||
|
|
||||||
|
if (BENCHMARK_BUILD_32_BITS)
|
||||||
|
add_required_cxx_compiler_flag(-m32)
|
||||||
|
endif()
|
||||||
|
|
||||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
# Turn compiler warnings up to 11
|
# Turn compiler warnings up to 11
|
||||||
string(REGEX REPLACE "[-/]W[1-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
string(REGEX REPLACE "[-/]W[1-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
|
|
@ -19,14 +19,21 @@ set(__add_cxx_compiler_flag INCLUDED)
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
|
|
||||||
function(add_cxx_compiler_flag FLAG)
|
function(mangle_compiler_flag FLAG OUTPUT)
|
||||||
string(TOUPPER "HAVE_CXX_FLAG_${FLAG}" SANITIZED_FLAG)
|
string(TOUPPER "HAVE_CXX_FLAG_${FLAG}" SANITIZED_FLAG)
|
||||||
string(REPLACE "+" "X" SANITIZED_FLAG ${SANITIZED_FLAG})
|
string(REPLACE "+" "X" SANITIZED_FLAG ${SANITIZED_FLAG})
|
||||||
string(REGEX REPLACE "[^A-Za-z_0-9]" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
|
string(REGEX REPLACE "[^A-Za-z_0-9]" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
|
||||||
string(REGEX REPLACE "_+" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
|
string(REGEX REPLACE "_+" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
|
||||||
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
|
set(${OUTPUT} "${SANITIZED_FLAG}" PARENT_SCOPE)
|
||||||
check_cxx_compiler_flag("${FLAG}" ${SANITIZED_FLAG})
|
endfunction(mangle_compiler_flag)
|
||||||
if(${SANITIZED_FLAG})
|
|
||||||
|
function(add_cxx_compiler_flag FLAG)
|
||||||
|
mangle_compiler_flag("${FLAG}" MANGLED_FLAG)
|
||||||
|
set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
|
||||||
|
check_cxx_compiler_flag("${FLAG}" ${MANGLED_FLAG})
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
|
||||||
|
if(${MANGLED_FLAG})
|
||||||
set(VARIANT ${ARGV1})
|
set(VARIANT ${ARGV1})
|
||||||
if(ARGV1)
|
if(ARGV1)
|
||||||
string(TOUPPER "_${VARIANT}" VARIANT)
|
string(TOUPPER "_${VARIANT}" VARIANT)
|
||||||
|
@ -35,3 +42,23 @@ function(add_cxx_compiler_flag FLAG)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(add_required_cxx_compiler_flag FLAG)
|
||||||
|
mangle_compiler_flag("${FLAG}" MANGLED_FLAG)
|
||||||
|
set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
|
||||||
|
check_cxx_compiler_flag("${FLAG}" ${MANGLED_FLAG})
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
|
||||||
|
if(${MANGLED_FLAG})
|
||||||
|
set(VARIANT ${ARGV1})
|
||||||
|
if(ARGV1)
|
||||||
|
string(TOUPPER "_${VARIANT}" VARIANT)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_FLAGS${VARIANT} "${CMAKE_CXX_FLAGS${VARIANT}} ${FLAG}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLAG}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Required flag '${FLAG}' is not supported by the compiler")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
Loading…
Reference in New Issue