cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
enable_language(CXX)
include(ExternalProject)

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

project(Mario)

list(APPEND CommonFiles
    global_vars.cpp
    sprites.cpp
    maploader.cpp
    mapobject.cpp
    blocks/simpleblocks.cpp
    mario.cpp
    blocks.cpp
    )
set(SDLPPDir ${CMAKE_CURRENT_SOURCE_DIR}/../sdlpp)

add_library(sdlpp STATIC IMPORTED)
set_target_properties(sdlpp PROPERTIES
    IMPORTED_LOCATION libsdlpp.a
)

ExternalProject_Add(sdlpp_external
    SOURCE_DIR ${SDLPPDir}
    CONFIGURE_COMMAND ""
    BUILD_COMMAND make libsdlpp.a
    BUILD_IN_SOURCE 1
    INSTALL_COMMAND install -m 644 "${SDLPPDir}/libsdlpp.a" ${CMAKE_CURRENT_BINARY_DIR}
    )

add_executable(mario
    ${CommonFiles}
    main.cpp
    visitors/mario_visitor.cpp
    visitors/bounce_visitor.cpp
    visitors/visitor_generator.cpp
    blocks/coinblock.cpp
    )

add_executable(editor
    ${CommonFiles}
    blocks/coineditorblock.cpp
    editor.cpp
    edit_box.cpp
    tool_box.cpp
    editor_visitor.cpp
    )

target_compile_definitions(editor PUBLIC EDITOR)
target_link_libraries(mario PRIVATE sdlpp)
target_link_libraries(editor PRIVATE sdlpp)

target_link_libraries(mario PRIVATE SDL2 SDL2_image SDL2_gfx SDL2_ttf Threads::Threads)
target_link_libraries(editor PRIVATE SDL2 SDL2_image SDL2_gfx SDL2_ttf Threads::Threads)

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/testfont.ttf ${CMAKE_CURRENT_SOURCE_DIR}/sprites DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
