From ec6e7c7a77c8010d42ae0b27b83a097a5875fc4e Mon Sep 17 00:00:00 2001 From: Jan Niklas Hasse Date: Thu, 18 Apr 2019 11:04:56 +0200 Subject: Add CMake build file as an alternative to configure.py --- CMakeLists.txt | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d313342 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,84 @@ +cmake_minimum_required(VERSION 3.1) +project(ninja) + +if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /GR-") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -fdiagnostics-color") +endif() + +# 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) +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 + ) +else() + target_sources(libninja PRIVATE src/subprocess-posix.cc) +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) -- cgit v0.12 From 691b821c9046eafa73f12335a8c3150fd9db1595 Mon Sep 17 00:00:00 2001 From: Jan Niklas Hasse Date: Fri, 10 May 2019 17:03:20 +0200 Subject: CMake: Support building without re2c --- CMakeLists.txt | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d313342..004d059 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,15 +7,21 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -fdiagnostics-color") endif() -# 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) +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. -- cgit v0.12 From 6f27f9642cb0508c0e24b379f2654f1797841fe6 Mon Sep 17 00:00:00 2001 From: Jan Niklas Hasse Date: Mon, 13 May 2019 09:29:19 +0200 Subject: CMake: Fix Windows build --- CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 004d059..78ebe5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,11 @@ if(WIN32) 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() @@ -88,3 +92,6 @@ 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) + +enable_testing() +add_test(NinjaTest ninja_test) -- cgit v0.12 From 15d8ead0fc58a66aa89f89a96e047ec0c5206140 Mon Sep 17 00:00:00 2001 From: Jan Niklas Hasse Date: Tue, 14 May 2019 14:12:00 +0200 Subject: Ignore all kinds of build directories --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 46736a6..98fbb21 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ *.pdb *.ilk TAGS -/build +/build*/ /build.ninja /ninja /ninja.bootstrap -- cgit v0.12