cmake_minimum_required(VERSION 3.24) project(fileserver) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED YES) include(CPM.cmake) CPMAddPackage("gh:gabime/spdlog#v1.13.0") set(BOOST_LIBS beast asio assert bind config container core endian intrusive logic mp11 optional smart_ptr static_assert static_string system throw_exception type_traits utility winapi align context coroutine date_time move container_hash detail predef variant2 io preprocessor pool exception algorithm lexical_cast numeric_conversion range tokenizer describe integer tuple array concept_check function regex unordered iterator mpl conversion function_types fusion typeof functional ) set(BOOST_SUPERPROJECT_VERSION 1.85.0) foreach(BOOST_LIB ${BOOST_LIBS}) CPMAddPackage("gh:boostorg/${BOOST_LIB}#boost-${BOOST_SUPERPROJECT_VERSION}") endforeach() CPMAddPackage( NAME uring VERSION 2.5 GITHUB_REPOSITORY axboe/liburing GIT_TAG liburing-2.5 DOWNLOAD_ONLY YES ) if(uring_ADDED) add_custom_command( OUTPUT ${uring_SOURCE_DIR}/include/liburing/compat.h COMMAND ${uring_SOURCE_DIR}/configure WORKING_DIRECTORY ${uring_SOURCE_DIR} ) add_library(uring STATIC ${uring_SOURCE_DIR}/include/liburing/compat.h ${uring_SOURCE_DIR}/src/setup.c ${uring_SOURCE_DIR}/src/queue.c ${uring_SOURCE_DIR}/src/register.c ${uring_SOURCE_DIR}/src/syscall.c ${uring_SOURCE_DIR}/src/version.c ) target_include_directories(uring PUBLIC ${uring_SOURCE_DIR}/src/include) target_compile_definitions(uring PUBLIC BOOST_ASIO_HAS_IO_URING PRIVATE LIBURING_INTERNAL _LARGEFILE_SOURCE _FILE_OFFSET_BITS=64 _GNU_SOURCE) endif() set(BOTAN_MODULES argon2fmt hotp base32 auto_rng system_rng tls13 certstor_system certstor_flatfile md5 asio) CPMAddPackage( NAME botan VERSION 3.4.0 GITHUB_REPOSITORY randombit/botan GIT_TAG 3.4.0 DOWNLOAD_ONLY YES ) if(botan_ADDED) list(JOIN BOTAN_MODULES , BOTAN_MODULES_STR) add_custom_command( OUTPUT botan_all.cpp botan_all.h COMMAND ${botan_SOURCE_DIR}/configure.py --disable-shared --amalgamation --minimized-build --without-documentation --with-boost --enable-modules=${BOTAN_MODULES_STR} ) add_library(botan STATIC ${CMAKE_CURRENT_BINARY_DIR}/botan_all.cpp ${CMAKE_CURRENT_BINARY_DIR}/botan_all.h) target_link_libraries(botan PUBLIC Boost::beast) endif() find_package(Threads REQUIRED) #add_custom_command( # COMMAND ./mrpc ARGS -n src/server/mrpc/fileserver -s cpp fileserver.rs # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} # MAIN_DEPENDENCY fileserver.rs # OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/server/mrpc/fileserver.cxx ${CMAKE_CURRENT_SOURCE_DIR}/src/server/mrpc/fileserver.hxx #) add_custom_command( COMMAND sh ARGS -c 'xxd -i -n index_html ${CMAKE_CURRENT_SOURCE_DIR}/frontend/dist/index.html > index_html.h' MAIN_DEPENDENCY frontend/dist/index.html OUTPUT index_html.h ) add_custom_command( COMMAND sh ARGS -c 'xxd -i -n favicon_svg ${CMAKE_CURRENT_SOURCE_DIR}/frontend/dist/favicon.svg > favicon_svg.h' MAIN_DEPENDENCY frontend/dist/favicon.svg OUTPUT favicon_svg.h ) add_executable(fileserver src/server/mrpc/fileserver.hxx src/server/mrpc/fileserver.cxx src/util/crash.hxx src/util/stb.cxx src/util/miniz.hxx src/util/miniz.cxx src/util/boost.hxx src/util/botan.hxx src/data/data.hxx src/data/data_internal.hxx src/data/data.cxx src/data/data_load.cxx src/data/data_save.cxx src/data/data_validate.cxx src/server/server.hxx src/server/server_internal.hxx src/server/server.cxx src/server/admin.cxx src/server/auth.cxx src/server/mail.cxx src/server/fs.cxx src/server/download.cxx src/server/upload.cxx src/main.cxx index_html.h favicon_svg.h ) target_include_directories(fileserver PRIVATE include ${CMAKE_CURRENT_BINARY_DIR} ${LIBURING_INCLUDE_DIR}) target_compile_options(fileserver PRIVATE -msse2) target_compile_definitions(fileserver PRIVATE BOOST_BEAST_FILE_BUFFER_SIZE=65535 BOOST_ASIO_HAS_IO_URING) target_link_options(fileserver PRIVATE -static) target_link_libraries(fileserver PRIVATE spdlog::spdlog Boost::beast botan uring Threads::Threads ) install(TARGETS fileserver)