cmake_minimum_required(VERSION 3.27) project(AdventOfCode2023 CXX) set(CMAKE_CXX_STANDARD 20) find_package(PkgConfig REQUIRED) pkg_check_modules(Jemalloc REQUIRED jemalloc) set(LINKER_OPTIONS -Wl,--sort-common,--as-needed,--gc-sections,--strip-all) set(COMPILE_FLAGS -pipe -march=native -mtune=native -mrdrnd -mrdseed -Wall -Wextra -Wpedantic -ffunction-sections -fdata-sections -funroll-loops -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free ) set(LINKER_OPTIONS ${LINKER_OPTIONS} -fuse-ld=gold ) if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") set(COMPILE_FLAGS -stdlib=libc++ -Wmove ${COMPILE_FLAGS} -fwhole-program-vtables) set(LINKER_OPTIONS ${LINKER_OPTIONS} -fwhole-program-vtables) set(LINKER_FLAGS ${LINKER_FLAGS} c++) elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") set(COMPILE_FLAGS ${COMPILE_FLAGS} -fuse-ld=gold -fdevirtualize-at-ltrans) set(LINKER_OPTIONS ${LINKER_OPTIONS} -fdevirtualize-at-ltrans) set(LINKER_FLAGS ${LINKER_FLAGS} stdc++) endif () add_executable(AdventOfCode2023 main.cpp) add_library(pb_1 STATIC pb_1/problem_1.cpp pb_1/problem_1.hpp) set_target_properties(AdventOfCode2023 pb_1 PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION ON UNITY_BUILD ON ) target_compile_definitions(AdventOfCode2023 PUBLIC $<$,$,GNU>>:_GLIBCXX_DEBUG>) target_compile_definitions(pb_1 PUBLIC $<$,$,GNU>>:_GLIBCXX_DEBUG>) target_compile_options(AdventOfCode2023 PUBLIC ${COMPILE_OPTIONS}) target_link_options(AdventOfCode2023 PUBLIC ${LINKER_OPTIONS}) target_link_libraries(AdventOfCode2023 PUBLIC pb_1 ${Jemalloc_LIBRARIES}) target_link_libraries(pb_1 PUBLIC ${Jemalloc_LIBRARIES})