cmake_minimum_required(VERSION 3.21)

project(libpas)

set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to be used")
add_compile_options(-Wall -Werror)

# Get sources
AUX_SOURCE_DIRECTORY( "src/libpas"       libpasSources   )
AUX_SOURCE_DIRECTORY( "src/chaos"        chaosSources    )
AUX_SOURCE_DIRECTORY( "src/mbmalloc"     mbmallocSources )
AUX_SOURCE_DIRECTORY( "src/test"         testSources     )
AUX_SOURCE_DIRECTORY( "src/toys"         toysSources     )
AUX_SOURCE_DIRECTORY( "src/verifier"     verifierSources )

# Directories
include_directories(    ${CMAKE_SOURCE_DIR}/src/libpas 
                        ${CMAKE_SOURCE_DIR}/src/verifier
                        ${CMAKE_SOURCE_DIR}/src/chaos 
                        ${CMAKE_SOURCE_DIR}/src/toys
                        ${CMAKE_SOURCE_DIR}/src/test
                        ${CMAKE_SOURCE_DIR}/src/mbmalloc )

link_directories(       ${CMAKE_SOURCE_DIR}/src/libpas 
                        ${CMAKE_SOURCE_DIR}/src/verifier
                        ${CMAKE_SOURCE_DIR}/src/chaos 
                        ${CMAKE_SOURCE_DIR}/src/toys
                        ${CMAKE_SOURCE_DIR}/src/test
                        ${CMAKE_SOURCE_DIR}/src/mbmalloc )

# Create libraries
add_library(pas_lib                                 SHARED ${libpasSources})
add_library(chaos_lib                               SHARED ${chaosSources} )
add_library(verifier_lib                            SHARED ${verifierSources} )
add_library(mbmalloc_bmalloc                        SHARED ${CMAKE_SOURCE_DIR}/src/mbmalloc/mbmalloc_bmalloc.c)
add_library(mbmalloc_hotbit                         SHARED ${CMAKE_SOURCE_DIR}/src/mbmalloc/mbmalloc_hotbit.c)
add_library(mbmalloc_iso_common_primitive           SHARED ${CMAKE_SOURCE_DIR}/src/mbmalloc/mbmalloc_iso_common_primitive.c)
add_library(mbmalloc_iso_common_primitive_verified  SHARED ${CMAKE_SOURCE_DIR}/src/mbmalloc/mbmalloc_iso_common_primitive.c)

# Create executables
add_executable(test_pas ${testSources} )
add_executable(chaos    ${chaosSources} )

# Link Libraries
target_link_libraries(test_pas verifier_lib pas_lib chaos_lib)
target_link_libraries(verifier_lib pas_lib)
target_link_libraries(chaos_lib pas_lib)
target_link_libraries(chaos pas_lib)
target_link_libraries(mbmalloc_bmalloc pas_lib)
target_link_libraries(mbmalloc_hotbit pas_lib)
target_link_libraries(mbmalloc_iso_common_primitive pas_lib)
target_link_libraries(mbmalloc_iso_common_primitive_verified verifier_lib pas_lib)