hs5/CMakeLists.txt

162 lines
5.1 KiB
CMake

cmake_minimum_required(VERSION 3.21...4.0)
project(hs5 VERSION 0.1.7 LANGUAGES CXX C)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_custom_target(sqlgen)
add_custom_command(
TARGET sqlgen
PRE_LINK
COMMAND "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/sqlite-cpp-sqlgen" "template.db" "DbDao.cpp"
WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}"
)
set(APIGEN_SCHEMAS
HapiError
AddUserParams
AddUserResp
LoginParams
LoginResp
ListParams
ListResp
AddBucketParams
AddBucketResp
SessionCheckParams
SessionCheckResp # Must be last
)
# Checkout https://github.com/duckdb/duckdb-ui at revision 6cbef805772b2cc974b86ab01da3906a0d365fdb into subdir duckdb-ui, don't run CMake on it
set(DUCKDB_UI_REVISION "6cbef805772b2cc974b86ab01da3906a0d365fdb")
include(FetchContent)
FetchContent_Declare(
duckdb-ui
GIT_REPOSITORY https://github.com/duckdb/duckdb-ui.git
GIT_TAG ${DUCKDB_UI_REVISION}
SOURCE_DIR ${CMAKE_SOURCE_DIR}/duckdb-ui
CONFIGURE_COMMAND "" # Prevent running CMake on duckdb-ui
BUILD_COMMAND "" # Prevent building duckdb-ui
INSTALL_COMMAND "" # Prevent installing duckdb-ui
)
FetchContent_Populate(duckdb-ui)
set(DUCKDB_SRCS "duckdb-ui/src/event_dispatcher.cpp"
"duckdb-ui/src/http_server.cpp"
"duckdb-ui/src/settings.cpp"
"duckdb-ui/src/state.cpp"
"duckdb-ui/src/ui_extension.cpp"
"duckdb-ui/src/watcher.cpp"
"duckdb-ui/src/utils/encoding.cpp"
"duckdb-ui/src/utils/env.cpp"
"duckdb-ui/src/utils/helpers.cpp"
"duckdb-ui/src/utils/md_helpers.cpp"
"duckdb-ui/src/utils/serialization.cpp"
)
add_custom_target(apigen)
foreach(SCHEMA ${APIGEN_SCHEMAS})
add_custom_command(
TARGET apigen
PRE_LINK
COMMAND "echo" "Generating ${SCHEMA}..."
WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}"
)
add_custom_command(
TARGET apigen
PRE_LINK
COMMAND "quicktype" "-s" "schema" "src/schemas/${SCHEMA}.json" "-o" "src/apigen/${SCHEMA}.cpp" "--include-location" "global-include" "--type-style" "pascal-case" "--member-style" "camel-case" "--enumerator-style" "camel-case" "--no-boost" "--source-style" "multi-source" "--namespace" "Api" "--code-format" "with-struct"
WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}"
)
add_custom_command(TARGET apigen
PRE_LINK
COMMAND ${CMAKE_COMMAND} -E rename
"src/apigen/Generators.hpp"
"src/apigen/Generators${SCHEMA}.hpp"
WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
endforeach()
set(SCHEMA_SOURCES "")
foreach(SCHEMA ${APIGEN_SCHEMAS})
if(EXISTS "src/apigen/${SCHEMA}.cpp")
list(APPEND SCHEMA_SOURCES "src/apigen/${SCHEMA}.cpp")
endif()
endforeach()
# Get the current git revision
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Configure config.h
configure_file(
${CMAKE_SOURCE_DIR}/src/config.h.in
${CMAKE_BINARY_DIR}/config.h
@ONLY
)
# add_compile_options(-fno-omit-frame-pointer)
# if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_CONFIGURATION_TYPES MATCHES ".*[dD]ebug.*")
# add_compile_options(-fsanitize=address)
# add_link_options(-fsanitize=address)
# endif()
add_executable(hs5
external/lmdb/midl.cpp
external/lmdb/mdb.c
external/lmdb/cppmidl.cpp
src/main.cpp
src/s3handler.cpp
src/SingleFileStorage.cpp
src/data.cpp
src/os_functions.cpp
src/utils.cpp
src/crypt.cpp
src/File.cpp
src/Buckets.cpp
src/DbDao.cpp
src/Policy.cpp
src/Auth.cpp
src/ApiHandler.cpp
src/Session.cpp
src/cmd.cpp
src/StaticHandler.cpp
src/WalFile.cpp
wwwgen/www_files.cpp
src/DuckDbFs.cpp
${SCHEMA_SOURCES}
${DUCKDB_SRCS})
set_property(TARGET hs5 PROPERTY CXX_STANDARD 20)
# Include the generated config.h
target_include_directories(hs5 PRIVATE ${CMAKE_BINARY_DIR})
#set(GCC_COVERAGE_COMPILE_FLAGS "-fcoroutines")
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
find_package(fmt CONFIG REQUIRED)
find_package(folly CONFIG REQUIRED)
find_package(proxygen CONFIG REQUIRED)
find_package(zstd CONFIG REQUIRED)
find_package(expat CONFIG REQUIRED)
find_package(unofficial-sodium CONFIG REQUIRED)
find_package(sqlite-cpp-sqlgen CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(DuckDB CONFIG REQUIRED)
find_path(TCLAP_INCLUDE_DIRS "tclap/Arg.h")
target_include_directories(hs5 PRIVATE ${TCLAP_INCLUDE_DIRS})
target_link_libraries(hs5 PRIVATE $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static> Folly::folly Folly::folly_deps Folly::follybenchmark Folly::folly_test_util
proxygen::proxygen proxygen::proxygencurl proxygen::proxygenhttpserver expat::expat unofficial-sodium::sodium SqliteCppGen::SqliteCppGen nlohmann_json::nlohmann_json fmt::fmt
$<IF:$<TARGET_EXISTS:duckdb>,duckdb,duckdb_static>)
# DuckDB UI
target_compile_definitions(hs5 PRIVATE UI_EXTENSION_SEQ_NUM="1" UI_EXTENSION_GIT_SHA="${DUCKDB_UI_REVISION}")
target_include_directories(hs5 PRIVATE ${CMAKE_SOURCE_DIR}/duckdb-ui/src/include ${CMAKE_SOURCE_DIR}/duckdb-ui/third_party/httplib)
target_compile_features(hs5 PUBLIC cxx_std_20)