This repository has been archived by the owner on Jul 7, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
60 changed files
with
6,569 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
*.a | ||
*.so | ||
*.so.?* | ||
*.dll | ||
*.exe | ||
*.dylib | ||
*.cmake | ||
!/cmake/*.cmake | ||
*~ | ||
*.pyc | ||
__pycache__ | ||
|
||
# lcov | ||
*.lcov | ||
/lcov | ||
|
||
# cmake files. | ||
/Testing | ||
CMakeCache.txt | ||
CMakeFiles/ | ||
cmake_install.cmake | ||
|
||
# makefiles. | ||
Makefile | ||
|
||
# in-source build. | ||
bin/ | ||
lib/ | ||
/test/*_test | ||
|
||
# exuberant ctags. | ||
tags | ||
|
||
# YouCompleteMe configuration. | ||
.ycm_extra_conf.pyc | ||
|
||
# ninja generated files. | ||
.ninja_deps | ||
.ninja_log | ||
build.ninja | ||
install_manifest.txt | ||
rules.ninja | ||
|
||
# out-of-source build top-level folders. | ||
build/ | ||
_build/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#!/usr/bin/env bash | ||
|
||
# Before install | ||
|
||
sudo add-apt-repository -y ppa:kalakris/cmake | ||
if [ "$STD" = "c++11" ]; then | ||
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test | ||
if [ "$CXX" = "clang++" ]; then | ||
wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - | ||
sudo add-apt-repository -y "deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.6 main" | ||
fi | ||
fi | ||
sudo apt-get update -qq | ||
|
||
# Install | ||
sudo apt-get install -qq cmake | ||
if [ "$STD" = "c++11" ] && [ "$CXX" = "g++" ]; then | ||
sudo apt-get install -qq gcc-4.8 g++-4.8 | ||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90 | ||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90 | ||
elif [ "$CXX" = "clang++" ]; then | ||
sudo apt-get install -qq clang-3.6 | ||
sudo update-alternatives --install /usr/local/bin/clang clang /usr/bin/clang-3.6 90 | ||
sudo update-alternatives --install /usr/local/bin/clang++ clang++ /usr/bin/clang++-3.6 90 | ||
export PATH=/usr/local/bin:$PATH | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
language: cpp | ||
|
||
# NOTE: The COMPILER variable is unused. It simply makes the display on | ||
# travis-ci.org more readable. | ||
matrix: | ||
include: | ||
- compiler: gcc | ||
env: COMPILER=g++-4.6 STD=c++0x BUILD_TYPE=Coverage | ||
- compiler: gcc | ||
env: COMPILER=g++-4.6 STD=c++0x BUILD_TYPE=Debug | ||
- compiler: gcc | ||
env: COMPILER=g++-4.6 STD=c++0x BUILD_TYPE=Release | ||
- compiler: gcc | ||
env: COMPILER=g++-4.8 STD=c++11 BUILD_TYPE=Debug | ||
- compiler: gcc | ||
env: COMPILER=g++-4.8 STD=c++11 BUILD_TYPE=Release | ||
- compiler: clang | ||
env: COMPILER=clang++-3.6 STD=c++11 BUILD_TYPE=Debug | ||
- compiler: clang | ||
env: COMPILER=clang++-3.6 STD=c++11 BUILD_TYPE=Release | ||
|
||
before_script: | ||
- source .travis-setup.sh | ||
- mkdir build && cd build | ||
|
||
install: | ||
- if [ "${BUILD_TYPE}" == "Coverage" -a "${TRAVIS_OS_NAME}" == "linux" ]; then | ||
PATH=~/.local/bin:${PATH}; | ||
pip install --user --upgrade pip; | ||
pip install --user cpp-coveralls; | ||
fi | ||
|
||
script: | ||
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_CXX_FLAGS="-std=${STD}" | ||
- make | ||
- make CTEST_OUTPUT_ON_FAILURE=1 test | ||
|
||
after_success: | ||
- if [ "${BUILD_TYPE}" == "Coverage" -a "${TRAVIS_OS_NAME}" == "linux" ]; then | ||
coveralls --include src --include include --gcov-options '\-lp' --root .. --build-root .; | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
import os | ||
import ycm_core | ||
|
||
# These are the compilation flags that will be used in case there's no | ||
# compilation database set (by default, one is not set). | ||
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. | ||
flags = [ | ||
'-Wall', | ||
'-Werror', | ||
'-pendantic-errors', | ||
'-std=c++0x', | ||
'-fno-strict-aliasing', | ||
'-O3', | ||
'-DNDEBUG', | ||
# ...and the same thing goes for the magic -x option which specifies the | ||
# language that the files to be compiled are written in. This is mostly | ||
# relevant for c++ headers. | ||
# For a C project, you would set this to 'c' instead of 'c++'. | ||
'-x', 'c++', | ||
'-I', 'include', | ||
'-isystem', '/usr/include', | ||
'-isystem', '/usr/local/include', | ||
] | ||
|
||
|
||
# Set this to the absolute path to the folder (NOT the file!) containing the | ||
# compile_commands.json file to use that instead of 'flags'. See here for | ||
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html | ||
# | ||
# Most projects will NOT need to set this to anything; you can just change the | ||
# 'flags' list of compilation flags. Notice that YCM itself uses that approach. | ||
compilation_database_folder = '' | ||
|
||
if os.path.exists( compilation_database_folder ): | ||
database = ycm_core.CompilationDatabase( compilation_database_folder ) | ||
else: | ||
database = None | ||
|
||
SOURCE_EXTENSIONS = [ '.cc' ] | ||
|
||
def DirectoryOfThisScript(): | ||
return os.path.dirname( os.path.abspath( __file__ ) ) | ||
|
||
|
||
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ): | ||
if not working_directory: | ||
return list( flags ) | ||
new_flags = [] | ||
make_next_absolute = False | ||
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] | ||
for flag in flags: | ||
new_flag = flag | ||
|
||
if make_next_absolute: | ||
make_next_absolute = False | ||
if not flag.startswith( '/' ): | ||
new_flag = os.path.join( working_directory, flag ) | ||
|
||
for path_flag in path_flags: | ||
if flag == path_flag: | ||
make_next_absolute = True | ||
break | ||
|
||
if flag.startswith( path_flag ): | ||
path = flag[ len( path_flag ): ] | ||
new_flag = path_flag + os.path.join( working_directory, path ) | ||
break | ||
|
||
if new_flag: | ||
new_flags.append( new_flag ) | ||
return new_flags | ||
|
||
|
||
def IsHeaderFile( filename ): | ||
extension = os.path.splitext( filename )[ 1 ] | ||
return extension in [ '.h', '.hxx', '.hpp', '.hh' ] | ||
|
||
|
||
def GetCompilationInfoForFile( filename ): | ||
# The compilation_commands.json file generated by CMake does not have entries | ||
# for header files. So we do our best by asking the db for flags for a | ||
# corresponding source file, if any. If one exists, the flags for that file | ||
# should be good enough. | ||
if IsHeaderFile( filename ): | ||
basename = os.path.splitext( filename )[ 0 ] | ||
for extension in SOURCE_EXTENSIONS: | ||
replacement_file = basename + extension | ||
if os.path.exists( replacement_file ): | ||
compilation_info = database.GetCompilationInfoForFile( | ||
replacement_file ) | ||
if compilation_info.compiler_flags_: | ||
return compilation_info | ||
return None | ||
return database.GetCompilationInfoForFile( filename ) | ||
|
||
|
||
def FlagsForFile( filename, **kwargs ): | ||
if database: | ||
# Bear in mind that compilation_info.compiler_flags_ does NOT return a | ||
# python list, but a "list-like" StringVec object | ||
compilation_info = GetCompilationInfoForFile( filename ) | ||
if not compilation_info: | ||
return None | ||
|
||
final_flags = MakeRelativePathsInFlagsAbsolute( | ||
compilation_info.compiler_flags_, | ||
compilation_info.compiler_working_dir_ ) | ||
else: | ||
relative_to = DirectoryOfThisScript() | ||
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) | ||
|
||
return { | ||
'flags': final_flags, | ||
'do_cache': True | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# This is the official list of benchmark authors for copyright purposes. | ||
# This file is distinct from the CONTRIBUTORS files. | ||
# See the latter for an explanation. | ||
# | ||
# Names should be added to this file as: | ||
# Name or Organization <email address> | ||
# The email address is not required for organizations. | ||
# | ||
# Please keep the list sorted. | ||
|
||
Arne Beer <[email protected]> | ||
Christopher Seymour <[email protected]> | ||
David Coeurjolly <[email protected]> | ||
Dominic Hamon <[email protected]> | ||
Eugene Zhuk <[email protected]> | ||
Evgeny Safronov <[email protected]> | ||
Felix Homann <[email protected]> | ||
Google Inc. | ||
JianXiong Zhou <[email protected]> | ||
Kaito Udagawa <[email protected]> | ||
Lei Xu <[email protected]> | ||
Matt Clarkson <[email protected]> | ||
Oleksandr Sochka <[email protected]> | ||
Paul Redmond <[email protected]> | ||
Shuo Chen <[email protected]> | ||
Yusuke Suzuki <[email protected]> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
cmake_minimum_required (VERSION 2.8.11) | ||
project (benchmark) | ||
|
||
option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON) | ||
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF) | ||
# Make sure we can import out CMake functions | ||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") | ||
|
||
# Read the git tags to determine the project version | ||
include(GetGitVersion) | ||
get_git_version(GIT_VERSION) | ||
|
||
# Tell the user what versions we are using | ||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" VERSION ${GIT_VERSION}) | ||
message("-- Version: ${VERSION}") | ||
|
||
# The version of the libraries | ||
set(GENERIC_LIB_VERSION ${VERSION}) | ||
string(SUBSTRING ${VERSION} 0 1 GENERIC_LIB_SOVERSION) | ||
|
||
# Import our CMake modules | ||
include(CheckCXXCompilerFlag) | ||
include(AddCXXCompilerFlag) | ||
include(CXXFeatureCheck) | ||
|
||
# Try and enable C++11. Don't use C++14 because it doesn't work in some | ||
# configurations. | ||
add_cxx_compiler_flag(-std=c++11) | ||
if (NOT HAVE_CXX_FLAG_STD_CXX11) | ||
add_cxx_compiler_flag(-std=c++0x) | ||
endif() | ||
|
||
# Turn compiler warnings up to 11 | ||
add_cxx_compiler_flag(-Wall) | ||
add_cxx_compiler_flag(-Wextra) | ||
add_cxx_compiler_flag(-Wshadow) | ||
add_cxx_compiler_flag(-Werror RELEASE) | ||
add_cxx_compiler_flag(-pedantic) | ||
add_cxx_compiler_flag(-pedantic-errors) | ||
add_cxx_compiler_flag(-Wshorten-64-to-32) | ||
add_cxx_compiler_flag(-Wfloat-equal) | ||
add_cxx_compiler_flag(-Wzero-as-null-pointer-constant) | ||
add_cxx_compiler_flag(-fstrict-aliasing) | ||
if (HAVE_CXX_FLAG_FSTRICT_ALIASING) | ||
add_cxx_compiler_flag(-Wstrict-aliasing) | ||
endif() | ||
add_cxx_compiler_flag(-Wthread-safety) | ||
if (HAVE_WTHREAD_SAFETY) | ||
add_definitions(-DHAVE_WTHREAD_SAFETY) | ||
cxx_feature_check(THREAD_SAFETY_ATTRIBUTES) | ||
endif() | ||
|
||
# Link time optimisation | ||
if (BENCHMARK_ENABLE_LTO) | ||
add_cxx_compiler_flag(-flto) | ||
if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") | ||
find_program(GCC_AR gcc-ar) | ||
if (GCC_AR) | ||
set(CMAKE_AR ${GCC_AR}) | ||
endif() | ||
find_program(GCC_RANLIB gcc-ranlib) | ||
if (GCC_RANLIB) | ||
set(CMAKE_RANLIB ${GCC_RANLIB}) | ||
endif() | ||
endif() | ||
endif() | ||
|
||
# Coverage build type | ||
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING | ||
"Flags used by the C++ compiler during coverage builds." | ||
FORCE) | ||
set(CMAKE_EXE_LINKER_FLAGS_COVERAGE | ||
"${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING | ||
"Flags used for linking binaries during coverage builds." | ||
FORCE) | ||
set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE | ||
"${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING | ||
"Flags used by the shared libraries linker during coverage builds." | ||
FORCE) | ||
mark_as_advanced( | ||
CMAKE_CXX_FLAGS_COVERAGE | ||
CMAKE_EXE_LINKER_FLAGS_COVERAGE | ||
CMAKE_SHARED_LINKER_FLAGS_COVERAGE) | ||
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING | ||
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage." | ||
FORCE) | ||
add_cxx_compiler_flag(--coverage COVERAGE) | ||
|
||
# C++ feature checks | ||
cxx_feature_check(STD_REGEX) | ||
cxx_feature_check(GNU_POSIX_REGEX) | ||
cxx_feature_check(POSIX_REGEX) | ||
cxx_feature_check(STEADY_CLOCK) | ||
|
||
# Ensure we have pthreads | ||
find_package(Threads REQUIRED) | ||
|
||
# Set up directories | ||
include_directories(${PROJECT_SOURCE_DIR}/include) | ||
|
||
# Build the targets | ||
add_subdirectory(src) | ||
|
||
if (BENCHMARK_ENABLE_TESTING) | ||
enable_testing() | ||
add_subdirectory(test) | ||
endif() |
Oops, something went wrong.