forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Squashed 'src/crc32c/' content from commit 224988680f7673cd7c769963d4…
…035cb315aa3388 git-subtree-dir: src/crc32c git-subtree-split: 224988680f7673cd7c769963d4035cb315aa3388
- Loading branch information
0 parents
commit 2e18193
Showing
38 changed files
with
2,730 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,37 @@ | ||
# Build matrix / environment variables are explained on: | ||
# https://www.appveyor.com/docs/appveyor-yml/ | ||
# This file can be validated on: https://ci.appveyor.com/tools/validate-yaml | ||
|
||
version: "{build}" | ||
|
||
environment: | ||
matrix: | ||
# AppVeyor currently has no custom job name feature. | ||
# http://help.appveyor.com/discussions/questions/1623-can-i-provide-a-friendly-name-for-jobs | ||
- JOB: Visual Studio 2017 | ||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 | ||
CMAKE_GENERATOR: Visual Studio 15 2017 | ||
|
||
platform: | ||
- x86 | ||
- x64 | ||
|
||
configuration: | ||
- RelWithDebInfo | ||
- Debug | ||
|
||
build_script: | ||
- git submodule update --init --recursive | ||
- mkdir build | ||
- cd build | ||
- if "%platform%"=="x64" set CMAKE_GENERATOR=%CMAKE_GENERATOR% Win64 | ||
- cmake --version | ||
- cmake .. -G "%CMAKE_GENERATOR%" -DCRC32C_USE_GLOG=0 | ||
-DCMAKE_CONFIGURATION_TYPES="%CONFIGURATION%" | ||
- cmake --build . --config "%CONFIGURATION%" | ||
- cd .. | ||
|
||
test_script: | ||
- build\%CONFIGURATION%\crc32c_tests.exe | ||
- build\%CONFIGURATION%\crc32c_capi_tests.exe | ||
- build\%CONFIGURATION%\crc32c_bench.exe |
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,3 @@ | ||
--- | ||
Language: Cpp | ||
BasedOnStyle: Google |
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,8 @@ | ||
-Ibuild/include/ | ||
-Ibuild/third_party/glog/ | ||
-Iinclude/ | ||
-Ithird_party/benchmark/include/ | ||
-Ithird_party/googletest/googletest/include/ | ||
-Ithird_party/googletest/googlemock/include/ | ||
-Ithird_party/glog/src/ | ||
-std=c++11 |
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,8 @@ | ||
# Editors. | ||
*.sw* | ||
.DS_Store | ||
/.vscode | ||
|
||
# Build directory. | ||
build/ | ||
out/ |
Empty file.
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,76 @@ | ||
# Build matrix / environment variables are explained on: | ||
# http://about.travis-ci.org/docs/user/build-configuration/ | ||
# This file can be validated on: http://lint.travis-ci.org/ | ||
|
||
language: cpp | ||
dist: bionic | ||
osx_image: xcode10.3 | ||
|
||
compiler: | ||
- gcc | ||
- clang | ||
os: | ||
- linux | ||
- osx | ||
|
||
env: | ||
- GLOG=1 SHARED_LIB=0 BUILD_TYPE=Debug | ||
- GLOG=1 SHARED_LIB=0 BUILD_TYPE=RelWithDebInfo | ||
- GLOG=0 SHARED_LIB=0 BUILD_TYPE=Debug | ||
- GLOG=0 SHARED_LIB=0 BUILD_TYPE=RelWithDebInfo | ||
- GLOG=0 SHARED_LIB=1 BUILD_TYPE=Debug | ||
- GLOG=0 SHARED_LIB=1 BUILD_TYPE=RelWithDebInfo | ||
|
||
addons: | ||
apt: | ||
sources: | ||
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main' | ||
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' | ||
- sourceline: 'ppa:ubuntu-toolchain-r/test' | ||
packages: | ||
- clang-9 | ||
- cmake | ||
- gcc-9 | ||
- g++-9 | ||
- ninja-build | ||
homebrew: | ||
packages: | ||
- cmake | ||
- gcc@9 | ||
- llvm@9 | ||
- ninja | ||
update: true | ||
|
||
install: | ||
# The following Homebrew packages aren't linked by default, and need to be | ||
# prepended to the path explicitly. | ||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then | ||
export PATH="$(brew --prefix llvm)/bin:$PATH"; | ||
fi | ||
# /usr/bin/gcc points to an older compiler on both Linux and macOS. | ||
- if [ "$CXX" = "g++" ]; then export CXX="g++-9" CC="gcc-9"; fi | ||
# /usr/bin/clang points to an older compiler on both Linux and macOS. | ||
# | ||
# Homebrew's llvm package doesn't ship a versioned clang++ binary, so the values | ||
# below don't work on macOS. Fortunately, the path change above makes the | ||
# default values (clang and clang++) resolve to the correct compiler on macOS. | ||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then | ||
if [ "$CXX" = "clang++" ]; then export CXX="clang++-9" CC="clang-9"; fi; | ||
fi | ||
- echo ${CC} | ||
- echo ${CXX} | ||
- ${CXX} --version | ||
- cmake --version | ||
|
||
before_script: | ||
- mkdir -p build && cd build | ||
- cmake .. -G Ninja -DCRC32C_USE_GLOG=$GLOG -DCMAKE_BUILD_TYPE=$BUILD_TYPE | ||
-DBUILD_SHARED_LIBS=$SHARED_LIB -DCMAKE_INSTALL_PREFIX=$HOME/.local | ||
- cmake --build . | ||
- cd .. | ||
|
||
script: | ||
- build/crc32c_tests | ||
- build/crc32c_capi_tests | ||
- build/crc32c_bench | ||
- cd build && cmake --build . --target install |
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,142 @@ | ||
# Copyright 2017 The CRC32C Authors. All rights reserved. | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
"""YouCompleteMe configuration that interprets a .clang_complete file. | ||
This module implementes the YouCompleteMe configuration API documented at: | ||
https://github.com/Valloric/ycmd#ycm_extra_confpy-specification | ||
The implementation loads and processes a .clang_complete file, documented at: | ||
https://github.com/Rip-Rip/clang_complete/blob/master/README.md | ||
""" | ||
|
||
import os | ||
|
||
# Flags added to the list in .clang_complete. | ||
BASE_FLAGS = [ | ||
'-Werror', # Unlike clang_complete, YCM can also be used as a linter. | ||
'-DUSE_CLANG_COMPLETER', # YCM needs this. | ||
'-xc++', # YCM needs this to avoid compiling headers as C code. | ||
] | ||
|
||
# Clang flags that take in paths. | ||
# See https://clang.llvm.org/docs/ClangCommandLineReference.html | ||
PATH_FLAGS = [ | ||
'-isystem', | ||
'-I', | ||
'-iquote', | ||
'--sysroot=' | ||
] | ||
|
||
|
||
def DirectoryOfThisScript(): | ||
"""Returns the absolute path to the directory containing this script.""" | ||
return os.path.dirname(os.path.abspath(__file__)) | ||
|
||
|
||
def MakeRelativePathsInFlagsAbsolute(flags, build_root): | ||
"""Expands relative paths in a list of Clang command-line flags. | ||
Args: | ||
flags: The list of flags passed to Clang. | ||
build_root: The current directory when running the Clang compiler. Should be | ||
an absolute path. | ||
Returns: | ||
A list of flags with relative paths replaced by absolute paths. | ||
""" | ||
new_flags = [] | ||
make_next_absolute = False | ||
for flag in flags: | ||
new_flag = flag | ||
|
||
if make_next_absolute: | ||
make_next_absolute = False | ||
if not flag.startswith('/'): | ||
new_flag = os.path.join(build_root, 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(build_root, path) | ||
break | ||
|
||
if new_flag: | ||
new_flags.append(new_flag) | ||
return new_flags | ||
|
||
|
||
def FindNearest(target, path, build_root): | ||
"""Looks for a file with a specific name closest to a project path. | ||
This is similar to the logic used by a version-control system (like git) to | ||
find its configuration directory (.git) based on the current directory when a | ||
command is invoked. | ||
Args: | ||
target: The file name to search for. | ||
path: The directory where the search starts. The search will explore the | ||
given directory's ascendants using the parent relationship. Should be an | ||
absolute path. | ||
build_root: A directory that acts as a fence for the search. If the search | ||
reaches this directory, it will not advance to its parent. Should be an | ||
absolute path. | ||
Returns: | ||
The path to a file with the desired name. None if the search failed. | ||
""" | ||
candidate = os.path.join(path, target) | ||
if os.path.isfile(candidate): | ||
return candidate | ||
|
||
if path == build_root: | ||
return None | ||
|
||
parent = os.path.dirname(path) | ||
if parent == path: | ||
return None | ||
|
||
return FindNearest(target, parent, build_root) | ||
|
||
|
||
def FlagsForClangComplete(file_path, build_root): | ||
"""Reads the .clang_complete flags for a source file. | ||
Args: | ||
file_path: The path to the source file. Should be inside the project. Used | ||
to locate the relevant .clang_complete file. | ||
build_root: The current directory when running the Clang compiler for this | ||
file. Should be an absolute path. | ||
Returns: | ||
A list of strings, where each element is a Clang command-line flag. | ||
""" | ||
clang_complete_path = FindNearest('.clang_complete', file_path, build_root) | ||
if clang_complete_path is None: | ||
return None | ||
clang_complete_flags = open(clang_complete_path, 'r').read().splitlines() | ||
return clang_complete_flags | ||
|
||
|
||
def FlagsForFile(filename, **kwargs): | ||
"""Implements the YouCompleteMe API.""" | ||
|
||
# kwargs can be used to pass 'client_data' to the YCM configuration. This | ||
# configuration script does not need any extra information, so | ||
# pylint: disable=unused-argument | ||
|
||
build_root = DirectoryOfThisScript() | ||
file_path = os.path.realpath(filename) | ||
|
||
flags = BASE_FLAGS | ||
clang_flags = FlagsForClangComplete(file_path, build_root) | ||
if clang_flags: | ||
flags += clang_flags | ||
|
||
final_flags = MakeRelativePathsInFlagsAbsolute(flags, build_root) | ||
|
||
return {'flags': final_flags} |
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,9 @@ | ||
# This is the list of CRC32C authors for copyright purposes. | ||
# | ||
# This does not necessarily list everyone who has contributed code, since in | ||
# some cases, their employer may be the copyright holder. To see the full list | ||
# of contributors, see the revision history in source control. | ||
Google Inc. | ||
|
||
Fangming Fang <[email protected]> | ||
Vadim Skipin <[email protected]> |
Oops, something went wrong.