- Sidequest: Clean up header-only library dependencies with cmake.

This commit is contained in:
Ian Roddis
2021-08-13 12:43:39 -03:00
parent de8025e0f9
commit 71344b3a2a
12 changed files with 82 additions and 48 deletions

View File

@@ -9,11 +9,11 @@ set(THIRD_PARTY_DIR ${CMAKE_BINARY_DIR}/third_party)
find_package(Threads REQUIRED)
include(cmake/rapidjson.cmake)
include(cmake/Pistache.cmake)
include(cmake/pistache.cmake)
include(cmake/MagicEnum.cmake)
include_directories(${RAPIDJSON_INCLUDE_DIR})
include_directories(${MAGIC_ENUM_INCLUDE_DIR})
include(cmake/argparse.cmake)
include(cmake/Catch2.cmake)
add_subdirectory(daggy)
add_subdirectory(tests)
add_subdirectory(utils)

View File

@@ -13,6 +13,8 @@ Tasks
- [ ] Slurm Executor
- Loggers
- [ ] FileSystemLogger
- [ ] Add unit tests
- [ ] Add more error checking
- [ ] General logger
- Completed

7
cmake/Catch2.cmake Normal file
View File

@@ -0,0 +1,7 @@
Include(FetchContent)
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v2.13.7)
FetchContent_MakeAvailable(Catch2)

View File

@@ -1,17 +1,15 @@
include(ExternalProject)
# Download RapidJSON
ExternalProject_Add(
magic-enum
PREFIX "third_party/magic-enum"
GIT_REPOSITORY "https://github.com/Neargye/magic_enum"
project(magicEnum)
ExternalProject_Add(${PROJECT_NAME}-external
GIT_REPOSITORY https://github.com/Neargye/magic_enum.git
GIT_TAG "v0.7.3"
TIMEOUT 10
CONFIGURE_COMMAND ""
GIT_SHALLOW TRUE
SOURCE_DIR ${THIRD_PARTY_DIR}/${PROJECT_NAME}
BUILD_COMMAND ""
INSTALL_COMMAND ""
UPDATE_COMMAND ""
)
# Magic Enums is a header-only
ExternalProject_Get_Property(magic-enum source_dir)
set(MAGIC_ENUM_INCLUDE_DIR ${source_dir}/include)
CONFIGURE_COMMAND "")
add_library(${PROJECT_NAME} INTERFACE)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}-external)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${THIRD_PARTY_DIR}/${PROJECT_NAME}/include)

15
cmake/argparse.cmake Normal file
View File

@@ -0,0 +1,15 @@
include(ExternalProject)
project(argparse)
ExternalProject_Add(${PROJECT_NAME}-external
GIT_REPOSITORY https://github.com/p-ranav/argparse.git
GIT_TAG "v2.1"
GIT_SHALLOW TRUE
SOURCE_DIR ${THIRD_PARTY_DIR}/${PROJECT_NAME}
BUILD_COMMAND ""
INSTALL_COMMAND ""
CONFIGURE_COMMAND "")
add_library(${PROJECT_NAME} INTERFACE)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}-external)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${THIRD_PARTY_DIR}/${PROJECT_NAME}/include)

View File

@@ -1,21 +1,15 @@
include(ExternalProject)
# Download RapidJSON
ExternalProject_Add(
rapidjson
PREFIX "third_party/rapidjson"
GIT_REPOSITORY "https://github.com/Tencent/rapidjson.git"
GIT_TAG f54b0e47a08782a6131cc3d60f94d038fa6e0a51
TIMEOUT 10
CMAKE_ARGS
-DRAPIDJSON_BUILD_TESTS=OFF
-DRAPIDJSON_BUILD_DOC=OFF
-DRAPIDJSON_BUILD_EXAMPLES=OFF
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
UPDATE_COMMAND ""
)
# Prepare RapidJSON (RapidJSON is a header-only library)
ExternalProject_Get_Property(rapidjson source_dir)
set(RAPIDJSON_INCLUDE_DIR ${source_dir}/include)
project(rapidjson)
ExternalProject_Add(${PROJECT_NAME}-external
GIT_REPOSITORY https://github.com/Tencent/rapidjson.git
GIT_TAG "v1.1.0"
GIT_SHALLOW TRUE
SOURCE_DIR ${THIRD_PARTY_DIR}/${PROJECT_NAME}
BUILD_COMMAND ""
INSTALL_COMMAND ""
CONFIGURE_COMMAND "")
add_library(${PROJECT_NAME} INTERFACE)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}-external)
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${THIRD_PARTY_DIR}/${PROJECT_NAME}/include)

View File

@@ -1,10 +1,7 @@
project(daggy)
#ExternalProject_Add_StepDependencies(pistache_extern build)
file(GLOB_RECURSE SOURCES src/*.cpp)
add_library(${PROJECT_NAME} STATIC ${SOURCES})
include_directories(${PISTACHE_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PUBLIC include)
target_link_libraries(${PROJECT_NAME} pistache pthread)
add_dependencies(${PROJECT_NAME} PistacheDownload rapidjson magic-enum)
target_link_libraries(${PROJECT_NAME} pistache pthread rapidjson magicEnum)

View File

@@ -1,11 +1,3 @@
Include(FetchContent)
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v2.13.7)
FetchContent_MakeAvailable(Catch2)
project(tests)
file(GLOB UNIT_TESTS unit_*.cpp)
file(GLOB INTEGRATION_TESTS int_*.cpp)

1
utils/CMakeLists.txt Normal file
View File

@@ -0,0 +1 @@
add_subdirectory(rest_server)

View File

@@ -0,0 +1,5 @@
project(rest_server)
file(GLOB SOURCES *.cpp)
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} daggy stdc++fs rapidjson pistache argparse)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "daggy")

View File

@@ -0,0 +1,23 @@
#include <iostream>
#include <fstream>
#include <argoarse/argparse.hpp>
#include <daggy/Server.hpp>
#include <daggy/executors/task/ForkingTaskExecutor.hpp>
#include <daggy/loggers/dag_run/OStreamLogger.hpp>
int main(int argc, char **argv) {
argparse::ArgumentParser args("Daggy");
args.add_argument("-v", "--verbose");
args.add_argument("-c", "--config")
.help("Config file");
args.add_argument("--ip")
.help("IP address to listen to");
args.add_argument("--port")
.help("Port to listen to")
.action([](const std::string &value) { return std::stoi(value); });
daggy::Server endpoint;
}