# CMakeList.txt: 顶层 CMake 项目文件，在此处执行全局配置
# 并包含子项目。
#
# cmake需要的最低版本
cmake_minimum_required(VERSION 3.8)

# 项目名称
cmake_policy(SET CMP0048 NEW)
project (pnd_cpp_api VERSION 0.6.1 LANGUAGES CXX)

# 添加编译宏
# add_definitions(-DDEBUG)

# 指定头文件搜索路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/pnd/include)

# 跨平台引入库目录头文件
IF(WIN32)
    link_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}/pnd/lib/win_x64
    )
ELSEIF(APPLE)
    EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE )
    message( STATUS "Architecture: ${ARCHITECTURE}" )
    if( ${ARCHITECTURE} STREQUAL  "arm64" )
        link_directories(
            ${CMAKE_CURRENT_SOURCE_DIR}/pnd/lib/darwin_arm64
        )
    elseif( ${ARCHITECTURE} STREQUAL  "x86_64" )
        link_directories(
            ${CMAKE_CURRENT_SOURCE_DIR}/pnd/lib/darwin_x86_64
        )
    else()
        message( "ERROR: Platform architecture mismatch in macos" )
    endif()
    
ELSEIF(UNIX)
    EXECUTE_PROCESS(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE)

    if(${ARCHITECTURE} STREQUAL "armv7l")
        link_directories(
            ${CMAKE_CURRENT_SOURCE_DIR}/pnd/lib/linux_armv7l
        )
    elseif(${ARCHITECTURE} STREQUAL "x86_64")
        link_directories(
            ${CMAKE_CURRENT_SOURCE_DIR}/pnd/lib/linux_x86_64
        )
    else()
        message("ERROR: Platform architecture mismatch")
    endif()
ENDIF()

# 编译静态库
set(pnd_cpp_src
    src/lookup.cpp
    src/groupCommand.cpp
    src/groupFeedback.cpp
    src/group.cpp
    src/version.cpp
)

# 编译库
add_library(_pndc++-obj OBJECT ${pnd_cpp_src})
add_library(pndc++ SHARED $<TARGET_OBJECTS:_pndc++-obj>)
add_library(pndc++-static STATIC $<TARGET_OBJECTS:_pndc++-obj>)

# 链接动态库pnd
target_link_libraries(pndc++ PUBLIC pnd)
target_link_libraries(pndc++-static PUBLIC pnd)

target_include_directories(_pndc++-obj
    PUBLIC src include pnd
)
target_include_directories(pndc++ INTERFACE $<TARGET_PROPERTY:_pndc++-obj,INTERFACE_INCLUDE_DIRECTORIES>)
target_include_directories(pndc++-static INTERFACE $<TARGET_PROPERTY:_pndc++-obj,INTERFACE_INCLUDE_DIRECTORIES>)

# 项目支持C++14
set_target_properties(_pndc++-obj pndc++ pndc++-static PROPERTIES
    CXX_STANDARD 14
    CXX_STANDARD_REQUIRED YES
    POSITION_INDEPENDENT_CODE ON
    VERSION ${pnd_cpp_api_VERSION})

if(WIN32)
    set_target_properties(pndc++ PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()

set_property(TARGET pndc++ pndc++-static PROPERTY INTERFACE_LINK_LIBRARIES
    $<$<BOOL:${UNIX}>:m pthread>
    $<$<BOOL:${WIN32}>:kernel32>
)