list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../cmake)

find_package(Boost)
find_package(MPI)
find_package(OpenMP)
find_package(TBB)

include_directories(..)
link_libraries(trng4)
link_directories(${PROJECT_BINARY_DIR}/trng)

add_executable(hello_world hello_world.cc)

add_executable(sample_output sample_output.cc)
add_executable(time time.cc)
if (Boost_FOUND)
    target_compile_definitions(time PUBLIC TRNG_HAVE_BOOST)
endif ()
add_executable(pi pi.cc)

if (MPI_FOUND)
    add_executable(pi_block_mpi pi_block_mpi.cc)
    target_link_libraries(pi_block_mpi PUBLIC MPI::MPI_CXX)
    add_executable(pi_leap_mpi pi_leap_mpi.cc)
    target_link_libraries(pi_leap_mpi PUBLIC MPI::MPI_CXX)
endif ()
if (OpenMP_FOUND)
    add_executable(pi_block_openmp pi_block_openmp.cc)
    target_link_libraries(pi_block_openmp PUBLIC OpenMP::OpenMP_CXX)
    add_executable(pi_leap_openmp pi_leap_openmp.cc)
    target_link_libraries(pi_leap_openmp PUBLIC OpenMP::OpenMP_CXX)
endif ()
if (TBB_FOUND)
    add_executable(pi_block_tbb pi_block_tbb.cc)
    target_link_libraries(pi_block_tbb PUBLIC tbb)
endif ()
add_executable(stl_container stl_container.cc)
add_executable(cpp11 cpp11.cc)
add_executable(distributions distributions.cc)
add_executable(plausibility_test plausibility_test.cc)
add_executable(Ising_model Ising_model.cc)
add_executable(correlated_normal_dist correlated_normal_dist.cc)
add_executable(discrete_dist discrete_dist.cc)
add_executable(discrete_dist_c_style discrete_dist_c_style.cc)
add_executable(bernoulli_dist bernoulli_dist.cc)
