Skip to content

Commit

Permalink
wip: cmake ng
Browse files Browse the repository at this point in the history
[nwatkins@smash smf-ng2]$ nice -n 19 ctest
Test project /home/nwatkins/src/smf-ng2
      Start  1: smf_checksum_benchmark_test
 1/11 Test  smfrpc#1: smf_checksum_benchmark_test ......................   Passed    7.66 sec
      Start  2: smf_fbsalloc_benchmark_test
 2/11 Test  smfrpc#2: smf_fbsalloc_benchmark_test ......................   Passed   45.59 sec
      Start  3: smf_histograms_integration_test
 3/11 Test  smfrpc#3: smf_histograms_integration_test ..................   Passed    0.18 sec
      Start  4: smf_rpc_integration_test
 4/11 Test  smfrpc#4: smf_rpc_integration_test .........................***Failed    4.60 sec
      Start  5: smf_rpc_recv_timeout_integration_test
 5/11 Test  smfrpc#5: smf_rpc_recv_timeout_integration_test ............   Passed    0.24 sec
      Start  6: smf_rpc_multiple_remote_addrs_integration_test
 6/11 Test  smfrpc#6: smf_rpc_multiple_remote_addrs_integration_test ...   Passed    0.19 sec
      Start  7: smf_rpc_backpressure_integration_test
 7/11 Test  smfrpc#7: smf_rpc_backpressure_integration_test ............***Failed   12.88 sec
      Start  8: smf_rpc_send_client_timeout_integration_test
 8/11 Test  smfrpc#8: smf_rpc_send_client_timeout_integration_test .....***Failed   32.02 sec
      Start  9: smf_rpc_bad_msg_t_integration_test
 9/11 Test  smfrpc#9: smf_rpc_bad_msg_t_integration_test ...............   Passed    0.08 sec
      Start 10: smf_randomstr_unit_test
10/11 Test smfrpc#10: smf_randomstr_unit_test ..........................   Passed    0.08 sec
      Start 11: smf_simple_hist_unit_test
11/11 Test smfrpc#11: smf_simple_hist_unit_test ........................   Passed    0.07 sec

73% tests passed, 3 tests failed out of 11

Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
  • Loading branch information
dotnwat committed Feb 11, 2019
1 parent 15bda33 commit 3a61a05
Show file tree
Hide file tree
Showing 9 changed files with 241 additions and 2,218 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -57,9 +57,11 @@ CPackSourceConfig.cmake
CTestTestfile.cmake
CMakeDoxyfile.in
CMakeDoxygenDefaults.cmake
deps-build/

src/demo_apps/demo_client
src/demo_apps/demo_server
bin/

# tests
src/integration_tests/*_test
Expand Down
Empty file added .gitmodules
Empty file.
179 changes: 64 additions & 115 deletions CMakeLists.txt
@@ -1,11 +1,8 @@
cmake_minimum_required(VERSION 3.5) # 3.5 required by seastar
list(APPEND CMAKE_MODULE_PATH
${CMAKE_CURRENT_SOURCE_DIR}/cmake
${CMAKE_CURRENT_BINARY_DIR})
include(Cooking OPTIONAL)
cmake_minimum_required(VERSION 3.9)
project(SMF VERSION "0.1.0" LANGUAGES CXX C)
# https://cmake.org/cmake/help/v3.4/policy/CMP0065.html
cmake_policy(SET CMP0065 OLD)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)

set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -v")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
Expand All @@ -16,32 +13,58 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

option(SMF_INSTALL "Enable installation of smf" ON)
option(SMF_ENABLE_TESTS "Useful for disabling all tests" ON)
option(SMF_BUILD_PROGRAMS "Build smf programs and demos" ON)
option(SMF_ENABLE_INTEGRATION_TESTS "control if integrations are bulit and ran" ON)
option(SMF_ENABLE_UNIT_TESTS "control if unit tests are bulit and ran" ON)
option(SMF_ENABLE_BENCHMARK_TESTS "control if benchmarks are bulit and ran" OFF)
option(SMF_ENABLE_CMAKE_PROJECT_FLAGS "control cmake_cxx_flags_*" OFF)
option(SMF_BUILD_PROGRAMS "Build smf programs and demos" ON)
option(SMF_INSTALL "Enable installation of smf" ON)
option(SMF_ENABLE_TESTS "Useful for disabling all tests" ON)

if(NOT SMF_ENABLE_TESTS)
set(SMF_ENABLE_INTEGRATION_TESTS OFF)
set(SMF_ENABLE_UNIT_TESTS OFF)
set(SMF_ENABLE_BENCHMARK_TESTS OFF)
# fetch and build dependencies. each dependency is built in isolation allowing
# tight control over the build configuration, and avoiding any inadvertant cmake
# cache pollution. the dependencies are built at configure-time and then
# imported as normal cmake dependencies, which will easily enable future
# iterations to selectively satisfy dependencies from system packages.
configure_file(CMakeLists.txt.in deps-build/CMakeLists.txt @ONLY)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/deps-build)
if(result)
message(FATAL_ERROR "CMake step for deps-build failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/deps-build)
if(result)
message(FATAL_ERROR "Build step for deps-build failed: ${result}")
endif()

include(ccache)
include(doxygen_gen)
include(packaging)
include(set_option)
include(tests)
include(smfc_generator)
# wire up dependency search paths
foreach(dep_dir
"seastar_ext-prefix/src/seastar_ext/build/release"
"seastar_ext-prefix/src/seastar_ext/build/release/_cooking/installed"
"xxhash_ext-prefix"
"HdrHistogram_ext-prefix"
"gtest_ext-prefix"
"gflags_ext-prefix/lib/cmake"
"glog_ext-prefix/lib64/cmake"
"googlebenchmark_ext-prefix/lib/cmake")
list(APPEND CMAKE_PREFIX_PATH
"${CMAKE_CURRENT_BINARY_DIR}/deps-build/${dep_dir}")
endforeach()

# seastar includes several custom cmake modules
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_BINARY_DIR}/deps-build/seastar_ext-prefix/src/seastar_ext/cmake")

# FIXME: according to the docs, cmake >= 3.1 should support pkg-config
# automatically searching CMAKE_PREFIX_PATH for pkg-config modules. However, as
# it stand it seems to only work when configuring the search path via
# environment variable.
set(ENV{PKG_CONFIG_PATH}
"${CMAKE_CURRENT_BINARY_DIR}/deps-build/zstd_ext-prefix/src/zstd_ext-build/lib")

# must come before installation
# Because of a cmake bugs. One can only include
# targets defined in the same file. wut!...
# So here life becomes a french farce and we have to inline a bunch of code
# https://cmake.org/Bug/view.php?id=14444
find_package(Seastar REQUIRED)
find_package(Flatbuffers REQUIRED)
find_package(gflags REQUIRED)
find_package(glog REQUIRED)
Expand All @@ -50,92 +73,29 @@ find_package(Boost COMPONENTS
filesystem
REQUIRED)
find_package (Threads)

set(SMFC_SOURCES
src/smfc/codegen.cc
src/smfc/cpp_generator.cc
src/smfc/go_generator.cc
src/smfc/main.cc)

set(SMFC_LIBS
Flatbuffers::flatbuffers
Boost::system
Boost::filesystem
gflags
glog::glog
${CMAKE_THREAD_LIBS_INIT}
)

add_executable(smfc ${SMFC_SOURCES})
target_link_libraries(smfc PRIVATE ${SMFC_LIBS})
target_include_directories(smfc PRIVATE src/smfc)


find_package(Zstd REQUIRED)
find_package(Hdrhistogram REQUIRED)
find_package(xxHash REQUIRED)
find_package(Seastar 1.0 REQUIRED)

smfc_gen(
CPP
TARGET_NAME raw_rpc_gen
OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/include/smf
SOURCES ${PROJECT_SOURCE_DIR}/src/core/rpc.fbs)

find_package(Zstd REQUIRED)

file(GLOB smf_includes "${CMAKE_CURRENT_SOURCE_DIR}/src/include/*.h")
file(GLOB smf_srcs "${CMAKE_CURRENT_SOURCE_DIR}/src/core/*.cc")
add_library(smf STATIC
${raw_rpc_gen}
${smf_srcs}
${smf_includes}
)
set_target_properties(smf PROPERTIES VERSION ${PROJECT_VERSION})
target_include_directories(smf PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/include>
$<INSTALL_INTERFACE:include> # <prefix>/include
)
if(CMAKE_BUILD_TYPE MATCHES Debug)
target_compile_options(smf PRIVATE
-fdiagnostics-color=auto
-Wall
-Werror
-Wextra
-Wformat
-Wmissing-braces
-Wparentheses
-Wpointer-arith
-Wformat-security
-Wunused
-Wno-unused-parameter
-Wcast-align
-Wno-missing-field-initializers
-Wdelete-non-virtual-dtor
-Wno-ignored-qualifiers)
if(NOT SMF_ENABLE_TESTS)
set(SMF_ENABLE_INTEGRATION_TESTS OFF)
set(SMF_ENABLE_UNIT_TESTS OFF)
set(SMF_ENABLE_BENCHMARK_TESTS OFF)
endif()

target_compile_definitions(smf PUBLIC -DXXH_PRIVATE_API)
target_link_libraries(smf
PUBLIC
Seastar::seastar
Flatbuffers::flatbuffers
xxHash::xxhash
Zstd::zstd
Hdrhistogram::hdr_histogram)
# put all the libs and binaries in one place
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# we need the compiler to generate the rpc header
add_dependencies(smf smfc)
include(smfc_generator)
include(tests)
include(ccache)
include(doxygen_gen)
include(packaging)

add_subdirectory(src)

if(SMF_ENABLE_BENCHMARK_TESTS)
add_subdirectory(src/benchmarks)
endif()
if(SMF_ENABLE_INTEGRATION_TESTS)
add_subdirectory(src/integration_tests)
endif()
if(SMF_ENABLE_UNIT_TESTS)
add_subdirectory(src/tests)
endif()
if(SMF_BUILD_PROGRAMS)
add_subdirectory(demo_apps)
endif()
Expand All @@ -148,17 +108,6 @@ if(SMF_INSTALL)
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(
TARGETS
smfc
EXPORT smf-export
DESTINATION ${CMAKE_INSTALL_BINDIR})
install(
TARGETS
smf
EXPORT smf-export
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(
EXPORT smf-export
FILE smfTargets.cmake
Expand Down
84 changes: 84 additions & 0 deletions CMakeLists.txt.in
@@ -0,0 +1,84 @@
cmake_minimum_required(VERSION 3.5)
project(build-seastar NONE)

include(ExternalProject)

ExternalProject_Add(seastar_ext
GIT_REPOSITORY https://github.com/scylladb/seastar.git
GIT_TAG 9ed5fca9207f81662dd205b5c778890165959f3f
CONFIGURE_COMMAND ./configure.py --mode=release --enable-dpdk --without-tests --without-apps --without-demos
BUILD_IN_SOURCE 1
BUILD_COMMAND ninja -C build/release
INSTALL_COMMAND "")

ExternalProject_Add(zstd_ext
GIT_REPOSITORY https://github.com/facebook/zstd.git
GIT_TAG 470344d33e1d52a2ada75d278466da8d4ee2faf6
SOURCE_SUBDIR "build/cmake"
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DZSTD_MULTITHREAD_SUPPORT=OFF
-DZSTD_LEGACY_SUPPORT=OFF
-DZSTD_BUILD_STATIC=ON
-DZSTD_BUILD_SHARED=OFF
-DZSTD_BUILD_PROGRAMS=OFF)

ExternalProject_Add(HdrHistogram_ext
GIT_REPOSITORY https://github.com/HdrHistogram/HdrHistogram_c.git
GIT_TAG 59cbedec68d56ae2b484d45cd7ad2f930f2c9d91
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DHDR_HISTOGRAM_BUILD_PROGRAMS=OFF
-DHDR_HISTOGRAM_BUILD_SHARED=OFF)

ExternalProject_Add(xxhash_ext
GIT_REPOSITORY https://github.com/Cyan4973/xxHash.git
GIT_TAG c9970b8ec4155e789f1c3682da923869a496ba9d
SOURCE_SUBDIR "cmake_unofficial"
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DBUILD_XXHSUM=OFF
-DBUILD_SHARED_LIBS=OFF
-DBUILD_ENABLE_INLINE_API=ON)

ExternalProject_Add(gtest_ext
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG 644319b9f06f6ca9bf69fe791be399061044bc3d
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>)

ExternalProject_Add(gflags_ext
GIT_REPOSITORY https://github.com/gflags/gflags.git
GIT_TAG 1005485222e8b0feff822c5723ddcaa5abadc01a
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DBUILD_SHARED_LIBS=OFF
-DBUILD_STATIC_LIBS=ON
-DBUILD_gflags_LIB=ON
-DBUILD_TESTING=OFF
-DBUILD_PACKAGING=OFF)

ExternalProject_Add(glog_ext
GIT_REPOSITORY https://github.com/google/glog.git
GIT_TAG 5d46e1bcfc92bf06a9ca3b3f1c5bb1dc024d9ecd
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DBUILD_SHARED_LIBS=OFF
-DWITH_GFLAGS=ON
DEPENDS gflags_ext)

ExternalProject_Add(googlebenchmark_ext
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG eec9a8e4976a397988c15e5a4b71a542375a2240
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DBENCHMARK_ENABLE_GTEST_TESTS=OFF
-DBENCHMARK_ENABLE_TESTING=OFF
DEPENDS gflags_ext)
1 change: 0 additions & 1 deletion cmake/.gitignore

This file was deleted.

0 comments on commit 3a61a05

Please sign in to comment.