cmake_minimum_required(VERSION 3.17 FATAL_ERROR) project(GeminiServer CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_COMPILER_LAUNCHER ccache) find_package(Boost REQUIRED COMPONENTS system) find_package(OpenSSL REQUIRED) find_package(OpenMP REQUIRED) include_directories(${Boost_INCLUDE_DIR} ${OpenSSL_INCLUDE_DIR}) set(COMPILE_DEFINITIONS $<$:_GLIBCXX_DEBUG> BOOST_ASIO_NO_DEPRECATED BOOST_ASIO_NO_TS_EXECUTORS #[[_FORTIFY_SOURCE=2]] ) set(COMPILE_FLAGS -pipe -march=skylake # change to native or your architecture. -mtune=skylake # same as above -mrdseed # be careful about this, this is linked to the x86 architecture. -mrdrnd # same as above -stdlib=libc++ -Wpedantic -Wall -Wextra -Wmove -Wopenmp -funroll-loops -flto=thin -fwhole-program-vtables -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free ) set(LINKER_OPTIONS PRIVATE -Wl,--sort-common,--as-needed -stdlib=libc++ -flto=thin -fwhole-program-vtables -fuse-ld=gold ) set(LINKER_FLAGS jemalloc ${Boost_LIBRARIES} OpenSSL::SSL OpenMP::OpenMP_CXX ) file(GLOB HEADERS includes/*.hpp) set(FILES main.cpp src/network.cpp include/information.hpp src/cache_files.cpp include/cache_files.hpp src/simdjson.cpp include/simdjson.h ) add_executable(GeminiServer ${FILES}) target_precompile_headers(GeminiServer PRIVATE ${HEADERS}) target_compile_definitions(GeminiServer PRIVATE ${COMPILE_DEFINITIONS}) target_compile_options(GeminiServer PRIVATE ${COMPILE_FLAGS}) target_link_options(GeminiServer ${LINKER_OPTIONS}) target_link_libraries(GeminiServer ${LINKER_FLAGS})