cmake_minimum_required(VERSION 3.1)
project(sequence)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

#################################################################################
##  BUILD TYPE
#################################################################################

# Set a default build type if none was specified
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE)
    message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
    set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
            STRING "Choose the type of build." FORCE)
    # Set the possible values of build type for cmake-gui
    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
            "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
message(STATUS "CMAKE Build type '${CMAKE_BUILD_TYPE}' ")

if (CMAKE_BUILD_TYPE STREQUAL "Release")
    set(CLANG_AVX_COMPILE_FLAGS "-arch x86_64 -fmessage-length=0 -fmacro-backtrace-limit=0 -std=c++1z -stdlib=libc++ -fmodules -gmodules -fpascal-strings -Ofast -flto -fno-common -g  -mavx2 -Wnull-character")
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${CLANG_AVX_COMPILE_FLAGS}")
endif()
message(STATUS "Using compiler flags: '${CMAKE_CXX_FLAGS}' ")


#################################################################################
##  VERSIONING
#################################################################################

# Version number
execute_process(
        COMMAND git rev-parse --abbrev-ref HEAD
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
        OUTPUT_VARIABLE GIT_BRANCH
        OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
        COMMAND git log -1 --format=%h
        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
        OUTPUT_VARIABLE GIT_COMMIT_HASH
        OUTPUT_STRIP_TRAILING_WHITESPACE
)
message(STATUS "Git current branch: ${GIT_BRANCH}")
message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}")
message(STATUS "Generating version.h")
configure_file(
        ${CMAKE_SOURCE_DIR}/libseq/version.h.in
        ${CMAKE_BINARY_DIR}/generated/version.h
)
include_directories(${CMAKE_BINARY_DIR}/generated)

#################################################################################
##  THIRDPARTY
#################################################################################
include_directories(${PROJECT_SOURCE_DIR}/thirdparty)

add_library(gatb STATIC IMPORTED GLOBAL)
set_target_properties(gatb PROPERTIES
        IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/thirdparty/lib/libgatbcore.a"
        )

#################################################################################
##  LIBSEQ
#################################################################################
include_directories(${PROJECT_SOURCE_DIR}/libseq)

# Library
add_library(seq STATIC
        libseq/timer.cpp
        libseq/logger.cpp
        libseq/fastq_mmap.cpp
        libseq/path.cpp
        libseq/precomputed.cpp
        libseq/accelerator_sse.cpp
        libseq/accelerator_uint128.cpp
        libseq/file_mmap.cpp
        libseq/file_std.cpp)

#################################################################################
##  TESTS AND BENCHMARKS
#################################################################################

# Benchmarsk
add_executable(libseqbenchmark
        libseqtests/benchmarks.cpp
        )
target_link_libraries(libseqbenchmark seq gatb)

# Unit tests
add_executable(libseqtest
        libseqtests/unittests.cpp
        )
target_link_libraries(libseqtest seq)



#################################################################################
##  DEVELOPMENT
#################################################################################
add_executable(develop_test libseqtests/develop_test.cpp)
target_link_libraries(develop_test seq)



