-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
61 changed files
with
4,536 additions
and
756 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,11 @@ | ||
root = true | ||
|
||
[*] | ||
charset = utf-8 | ||
indent_style = space | ||
indent_size = 2 | ||
insert_final_newline = true | ||
end_of_line = lf | ||
|
||
[CMakeLists.txt] | ||
indent_style = tab |
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,55 @@ | ||
name: Linux | ||
|
||
on: | ||
pull_request: | ||
push: | ||
release: | ||
types: published | ||
|
||
jobs: | ||
build: | ||
runs-on: [ubuntu-latest] | ||
container: | ||
image: centos:7 | ||
steps: | ||
- uses: actions/checkout@v1 | ||
- name: Install dependencies | ||
run: | | ||
curl -L -O https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-Linux-x86_64.sh | ||
chmod +x cmake-3.16.2-Linux-x86_64.sh | ||
./cmake-3.16.2-Linux-x86_64.sh --skip-license --prefix=/usr/local | ||
curl -L -O https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel/7/x86_64/Packages/p/p7zip-16.02-10.el7.x86_64.rpm | ||
curl -L -O https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel/7/x86_64/Packages/p/p7zip-plugins-16.02-10.el7.x86_64.rpm | ||
rpm -U --quiet p7zip-16.02-10.el7.x86_64.rpm | ||
rpm -U --quiet p7zip-plugins-16.02-10.el7.x86_64.rpm | ||
yum install -y make gcc-c++ | ||
- name: Build ninja | ||
shell: bash | ||
run: | | ||
mkdir build && cd build | ||
cmake -DCMAKE_BUILD_TYPE=Release .. | ||
cmake --build . --parallel --config Release | ||
ctest -vv | ||
strip ninja | ||
- name: Create ninja archive | ||
run: | | ||
mkdir artifact | ||
7z a artifact/ninja-linux.zip ./build/ninja | ||
# Upload ninja binary archive as an artifact | ||
- name: Upload artifact | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
name: ninja-binary-archives | ||
path: artifact | ||
|
||
- name: Upload release asset | ||
if: github.event.action == 'published' | ||
uses: actions/upload-release-asset@v1.0.1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ github.event.release.upload_url }} | ||
asset_path: ./artifact/ninja-linux.zip | ||
asset_name: ninja-linux.zip | ||
asset_content_type: application/zip |
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,49 @@ | ||
name: macOS | ||
|
||
on: | ||
pull_request: | ||
push: | ||
release: | ||
types: published | ||
|
||
jobs: | ||
build: | ||
runs-on: macOS-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v1 | ||
|
||
- name: Install dependencies | ||
run: brew install re2c p7zip cmake | ||
|
||
- name: Build ninja | ||
shell: bash | ||
run: | | ||
mkdir build && cd build | ||
cmake -DCMAKE_BUILD_TYPE=Release .. | ||
cmake --build . --parallel --config Release | ||
ctest -vv | ||
- name: Create ninja archive | ||
shell: bash | ||
run: | | ||
mkdir artifact | ||
7z a artifact/ninja-mac.zip ./build/ninja | ||
# Upload ninja binary archive as an artifact | ||
- name: Upload artifact | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
name: ninja-binary-archives | ||
path: artifact | ||
|
||
- name: Upload release asset | ||
if: github.event.action == 'published' | ||
uses: actions/upload-release-asset@v1.0.1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ github.event.release.upload_url }} | ||
asset_path: ./artifact/ninja-mac.zip | ||
asset_name: ninja-mac.zip | ||
asset_content_type: application/zip |
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,49 @@ | ||
name: Windows | ||
|
||
on: | ||
pull_request: | ||
push: | ||
release: | ||
types: published | ||
|
||
jobs: | ||
build: | ||
runs-on: windows-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v1 | ||
|
||
- name: Install dependencies | ||
run: choco install re2c | ||
|
||
- name: Build ninja | ||
shell: bash | ||
run: | | ||
mkdir build && cd build | ||
cmake -DCMAKE_BUILD_TYPE=Release .. | ||
cmake --build . --parallel --config Release | ||
ctest -vv | ||
- name: Create ninja archive | ||
shell: bash | ||
run: | | ||
mkdir artifact | ||
7z a artifact/ninja-win.zip ./build/Release/ninja.exe | ||
# Upload ninja binary archive as an artifact | ||
- name: Upload artifact | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
name: ninja-binary-archives | ||
path: artifact | ||
|
||
- name: Upload release asset | ||
if: github.event.action == 'published' | ||
uses: actions/upload-release-asset@v1.0.1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ github.event.release.upload_url }} | ||
asset_path: ./artifact/ninja-win.zip | ||
asset_name: ninja-win.zip | ||
asset_content_type: application/zip |
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
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
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,129 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
cmake_policy(SET CMP0091 NEW) | ||
project(ninja) | ||
|
||
if(CMAKE_BUILD_TYPE MATCHES "Release") | ||
cmake_policy(SET CMP0069 NEW) | ||
include(CheckIPOSupported) | ||
check_ipo_supported(RESULT lto_supported OUTPUT error) | ||
|
||
if(lto_supported) | ||
message(STATUS "IPO / LTO enabled") | ||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) | ||
else() | ||
message(STATUS "IPO / LTO not supported: <${error}>") | ||
endif() | ||
endif() | ||
|
||
if(MSVC) | ||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /GR- /Zc:__cplusplus") | ||
else() | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -fdiagnostics-color") | ||
endif() | ||
|
||
find_program(RE2C re2c) | ||
if(RE2C) | ||
# the depfile parser and ninja lexers are generated using re2c. | ||
function(re2c IN OUT) | ||
add_custom_command(DEPENDS ${IN} OUTPUT ${OUT} | ||
COMMAND ${RE2C} -b -i --no-generation-date -o ${OUT} ${IN} | ||
) | ||
endfunction() | ||
re2c(${CMAKE_SOURCE_DIR}/src/depfile_parser.in.cc ${CMAKE_BINARY_DIR}/depfile_parser.cc) | ||
re2c(${CMAKE_SOURCE_DIR}/src/lexer.in.cc ${CMAKE_BINARY_DIR}/lexer.cc) | ||
add_library(libninja-re2c OBJECT ${CMAKE_BINARY_DIR}/depfile_parser.cc ${CMAKE_BINARY_DIR}/lexer.cc) | ||
else() | ||
message(WARNING "re2c was not found; changes to src/*.in.cc will not affect your build.") | ||
add_library(libninja-re2c OBJECT src/depfile_parser.cc src/lexer.cc) | ||
endif() | ||
target_include_directories(libninja-re2c PRIVATE src) | ||
|
||
# Core source files all build into ninja library. | ||
add_library(libninja OBJECT | ||
src/build_log.cc | ||
src/build.cc | ||
src/clean.cc | ||
src/clparser.cc | ||
src/dyndep.cc | ||
src/dyndep_parser.cc | ||
src/debug_flags.cc | ||
src/deps_log.cc | ||
src/disk_interface.cc | ||
src/edit_distance.cc | ||
src/eval_env.cc | ||
src/graph.cc | ||
src/graphviz.cc | ||
src/line_printer.cc | ||
src/manifest_parser.cc | ||
src/metrics.cc | ||
src/parser.cc | ||
src/state.cc | ||
src/string_piece_util.cc | ||
src/util.cc | ||
src/version.cc | ||
) | ||
if(WIN32) | ||
target_sources(libninja PRIVATE | ||
src/subprocess-win32.cc | ||
src/includes_normalize-win32.cc | ||
src/msvc_helper-win32.cc | ||
src/msvc_helper_main-win32.cc | ||
src/getopt.c | ||
) | ||
if(MSVC) | ||
target_sources(libninja PRIVATE src/minidump-win32.cc) | ||
endif() | ||
else() | ||
target_sources(libninja PRIVATE src/subprocess-posix.cc) | ||
endif() | ||
|
||
#Fixes GetActiveProcessorCount on MinGW | ||
if(MINGW) | ||
target_compile_definitions(libninja PRIVATE _WIN32_WINNT=0x0601 __USE_MINGW_ANSI_STDIO=1) | ||
endif() | ||
|
||
# Main executable is library plus main() function. | ||
add_executable(ninja src/ninja.cc) | ||
target_link_libraries(ninja PRIVATE libninja libninja-re2c) | ||
|
||
# Tests all build into ninja_test executable. | ||
add_executable(ninja_test | ||
src/build_log_test.cc | ||
src/build_test.cc | ||
src/clean_test.cc | ||
src/clparser_test.cc | ||
src/depfile_parser_test.cc | ||
src/deps_log_test.cc | ||
src/disk_interface_test.cc | ||
src/dyndep_parser_test.cc | ||
src/edit_distance_test.cc | ||
src/graph_test.cc | ||
src/lexer_test.cc | ||
src/manifest_parser_test.cc | ||
src/ninja_test.cc | ||
src/state_test.cc | ||
src/string_piece_util_test.cc | ||
src/subprocess_test.cc | ||
src/test.cc | ||
src/util_test.cc | ||
) | ||
if(WIN32) | ||
target_sources(ninja_test PRIVATE src/includes_normalize_test.cc src/msvc_helper_test.cc) | ||
endif() | ||
target_link_libraries(ninja_test PRIVATE libninja libninja-re2c) | ||
|
||
foreach(perftest | ||
build_log_perftest | ||
canon_perftest | ||
clparser_perftest | ||
depfile_parser_perftest | ||
hash_collision_bench | ||
manifest_parser_perftest | ||
) | ||
add_executable(${perftest} src/${perftest}.cc) | ||
target_link_libraries(${perftest} PRIVATE libninja libninja-re2c) | ||
endforeach() | ||
|
||
enable_testing() | ||
add_test(NinjaTest ninja_test) |
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,34 @@ | ||
# How to successfully make changes to Ninja | ||
|
||
We're very wary of changes that increase the complexity of Ninja (in particular, | ||
new build file syntax or command-line flags) or increase the maintenance burden | ||
of Ninja. Ninja is already successfully used by hundreds of developers for large | ||
projects and it already achieves (most of) the goals we set out for it to do. | ||
It's probably best to discuss new feature ideas on the | ||
[mailing list](https://groups.google.com/forum/#!forum/ninja-build) or in an | ||
issue before creating a PR. | ||
|
||
## Coding guidelines | ||
|
||
Generally it's the | ||
[Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) with | ||
a few additions: | ||
|
||
* Any code merged into the Ninja codebase which will be part of the main | ||
executable must compile as C++03. You may use C++11 features in a test or an | ||
unimportant tool if you guard your code with `#if __cplusplus >= 201103L`. | ||
* We have used `using namespace std;` a lot in the past. For new contributions, | ||
please try to avoid relying on it and instead whenever possible use `std::`. | ||
However, please do not change existing code simply to add `std::` unless your | ||
contribution already needs to change that line of code anyway. | ||
* All source files should have the Google Inc. license header. | ||
* Use `///` for [Doxygen](http://www.doxygen.nl/) (use `\a` to refer to | ||
arguments). | ||
* It's not necessary to document each argument, especially when they're | ||
relatively self-evident (e.g. in | ||
`CanonicalizePath(string* path, string* err)`, the arguments are hopefully | ||
obvious). | ||
|
||
If you're unsure about code formatting, please use | ||
[clang-format](https://clang.llvm.org/docs/ClangFormat.html). However, please do | ||
not format code that is not otherwise part of your contribution. |
Oops, something went wrong.