cmake_minimum_required (VERSION 3.6)
project (ProgParallel)

option(PROF "Reference build" NO)
include(FetchContent)

FetchContent_Declare(
  GoogleBenchmark
  URL https://github.com/google/benchmark/archive/v1.6.1.tar.gz
  )

FetchContent_Declare(
  CLI11
  URL https://github.com/CLIUtils/CLI11/archive/v1.7.1.tar.gz
  )

FetchContent_Declare(
  spdlog
  URL https://github.com/gabime/spdlog/archive/v1.3.1.tar.gz
  )


if (NOT GoogleBenchmark_POPULATED)
  FetchContent_Populate(GoogleBenchmark)
  set(BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE BOOL "From Gtest")
  set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "From Gtest")
  add_subdirectory(${googlebenchmark_SOURCE_DIR} ${googlebenchmark_BINARY_DIR})
endif()

if (NOT spdlog_POPULATED)
  FetchContent_Populate(spdlog)
  add_subdirectory(${spdlog_SOURCE_DIR} ${spdlog_BINARY_DIR})
endif()

if (NOT CLI11_POPULATED)
  FetchContent_Populate(CLI11)
  add_subdirectory(${cli11_SOURCE_DIR} ${cli11_BINARY_DIR})
endif()



find_package(Threads REQUIRED)
find_package(SDL2 REQUIRED)
find_package(TBB QUIET)
if (NOT TBB_FOUND)
   find_package(PkgConfig REQUIRED)
   pkg_check_modules(TBB REQUIRED tbb)
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-W -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native -s")


if (NOT PROF)
  add_library(renderer src/render.hpp src/render.cpp)
  target_link_libraries(renderer PRIVATE tbb)
  add_executable(view src/view.cpp)
  target_link_libraries(view renderer SDL2::SDL2 Threads::Threads spdlog CLI11)


  add_executable(bench src/bench.cpp)
  target_link_libraries(bench renderer benchmark)
else()
  set(CMAKE_CXX_COMPILER clang++)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")

  add_library(renderer src/render.hpp src/prof_render.cpp)
  target_link_libraries(renderer PRIVATE tbb)

  add_executable(view src/view.cpp)
  target_link_libraries(view renderer SDL2::SDL2 Threads::Threads spdlog CLI11)

  add_executable(bench src/bench.cpp)
  target_link_libraries(bench renderer benchmark)
endif()
