# 生成程序的位置
SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin")

# 源码目录
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src MAIN_SRC)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/common COMMON)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/common/utils UTILS)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/common/hts HTS)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/sam SAM_SRC)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/sam/markdups SAM_MARKDUPS_SRC)

set(KTHREAD_FILE ${PROJECT_SOURCE_DIR}/lib/klib/kthread.c)

# 头文件目录
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib/htslib")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib/boost/include")

# 链接库位置
LINK_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib/htslib")
LINK_DIRECTORIES("${PROJECT_SOURCE_DIR}/lib/boost/lib")

# 编译生成的程序名称
set(PG_NAME "picard_cpp")

# 为程序添加依赖关系
ADD_EXECUTABLE(${PG_NAME} ${MAIN_SRC} ${COMMON} ${UTILS} ${HTS}
    ${SAM_SRC} ${SAM_MARKDUPS_SRC} ${KTHREAD_FILE})

# 链接库
TARGET_LINK_LIBRARIES(${PG_NAME} libhts.a)

# 检测系统是否包含必需的库

# pthread库
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
    set_property(TARGET ${PG_NAME} PROPERTY COMPILE_OPTIONS "-pthread")
    set_property(TARGET ${PG_NAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
    TARGET_LINK_LIBRARIES(${PG_NAME} "${CMAKE_THREAD_LIBS_INIT}")
endif()

# bzip2库
find_package(BZip2 REQUIRED)
if(BZip2_FOUND)
    INCLUDE_DIRECTORIES(${BZIP2_INCLUDE_DIR})
    TARGET_LINK_LIBRARIES(${PG_NAME} ${BZIP2_LIBRARIES})
endif()

#openmp
find_package(OpenMP)
if(OPENMP_FOUND)
    set_target_properties(${PG_NAME} PROPERTIES COMPILE_OPTIONS ${OpenMP_CXX_FLAGS})
    target_link_libraries(${PG_NAME} ${OpenMP_CXX_FLAGS})
endif()

# 链接库
TARGET_LINK_LIBRARIES(${PG_NAME} -lz)
TARGET_LINK_LIBRARIES(${PG_NAME} -lm)
TARGET_LINK_LIBRARIES(${PG_NAME} -llzma)
TARGET_LINK_LIBRARIES(${PG_NAME} -lbz2)
TARGET_LINK_LIBRARIES(${PG_NAME} -lcurl)

# 安装文件夹设置
INSTALL(TARGETS ${PG_NAME}
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION libstatic
    )