# Copyright 2017 The NXT Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

cmake_minimum_required(VERSION 2.8)
project(nxt C CXX)

function(SetCXX14 Target)
    if(MSVC)
        set_property(TARGET ${Target} APPEND PROPERTY COMPILE_OPTIONS "/std:c++14")
    else()
        set_property(TARGET ${Target} APPEND PROPERTY COMPILE_OPTIONS "-std=c++14")
    endif()
endfunction()
function(SetPIC Target)
    if(MSVC)
    else()
        set_property(TARGET ${Target} APPEND PROPERTY COMPILE_OPTIONS "-fPIC")
    endif()
endfunction()

add_subdirectory(third_party)
add_subdirectory(generator)

set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/include)

Generate(
    LIB_NAME nxt
    LIB_TYPE SHARED
    PRINT_NAME libNXT
    COMMAND_LINE_ARGS
        ${GENERATOR_COMMON_ARGS}
        -T nxt
)
target_include_directories(nxt PUBLIC ${GENERATED_DIR})

Generate(
    LIB_NAME nxtcpp
    LIB_TYPE SHARED
    PRINT_NAME libNXT++
    COMMAND_LINE_ARGS
        ${GENERATOR_COMMON_ARGS}
        -T nxtcpp
)
target_include_directories(nxtcpp PUBLIC ${GENERATED_DIR} PUBLIC ${INCLUDE_DIR})
target_link_libraries(nxtcpp nxt)
SetCXX14(nxtcpp)

Generate(
    LIB_NAME mock_nxt
    LIB_TYPE SHARED
    PRINT_NAME libMockNXT
    COMMAND_LINE_ARGS
        ${GENERATOR_COMMON_ARGS}
        -T mock_nxt
)
target_include_directories(mock_nxt PUBLIC ${GENERATED_DIR})
target_link_libraries(mock_nxt nxt gtest)
SetCXX14(mock_nxt)

set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)

add_subdirectory(src/backend)
add_subdirectory(src/wire)
add_subdirectory(src/tests)

add_subdirectory(examples)
