# dependencies

find_package(Threads REQUIRED)

if (GGWAVE_SUPPORT_SDL2)
    # SDL2

    if (EMSCRIPTEN)
        set(CMAKE_CXX_FLAGS " \
        -s USE_SDL=2 \
        -s DISABLE_EXCEPTION_CATCHING=0 \
        ")

        set(CMAKE_CXX_LINK_FLAGS " \
        --bind \
        -s TOTAL_MEMORY=67108864 \
        -s ASSERTIONS=1 \
        -s 'EXPORTED_RUNTIME_METHODS=[\"writeArrayToMemory\"]' \
        ")

        unset(SDL2_INCLUDE_DIRS)
        unset(SDL2_LIBRARIES)
    endif()

    if (NOT EMSCRIPTEN)
        find_package(SDL2)

        if (NOT USE_FINDSDL2 AND NOT SDL2_FOUND)
            message(WARNING "Unable to find SDL2 library. It is either not installed or CMake cannot find it."
                " In the latter case, setting the USE_FINDSDL2 variable might help:\n"
                "   $ cmake -D USE_FINDSDL2 .."
                )

            message(FATAL_ERROR "Aborting")
        endif()

        string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)

        message(STATUS "SDL2_INCLUDE_DIRS = ${SDL2_INCLUDE_DIRS}")
        message(STATUS "SDL2_LIBRARIES = ${SDL2_LIBRARIES}")
    endif()
endif()

# third-party

add_subdirectory(third-party)

# helper libraries

add_library(ggwave-common
    ggwave-common.cpp
    )

target_link_libraries(ggwave-common PRIVATE
    ${CMAKE_DL_LIBS}
    )

if (MINGW)
    target_link_libraries(ggwave-common PUBLIC
        stdc++
    )
endif()

if (GGWAVE_SUPPORT_SDL2)
    # ggwave-common-sdl2

    add_library(ggwave-common-sdl2
        ggwave-common-sdl2.cpp
        )

    target_include_directories(ggwave-common-sdl2 PUBLIC
        ${SDL2_INCLUDE_DIRS}
        )

    target_link_libraries(ggwave-common-sdl2 PRIVATE
        ggwave
        imgui-sdl2
        ${SDL2_LIBRARIES}
        )
endif()

# examples

if (EMSCRIPTEN)
    add_subdirectory(ggwave-js)
    add_subdirectory(buttons)
else()
    add_subdirectory(ggwave-to-file)
    add_subdirectory(ggwave-from-file)

    add_subdirectory(arduino-rx)
    add_subdirectory(arduino-tx)
    add_subdirectory(arduino-tx-obsolete)
    add_subdirectory(esp32-rx)
    add_subdirectory(rp2040-rx)
endif()

if (GGWAVE_SUPPORT_SDL2)
    if (UNIX AND NOT APPLE)
        add_subdirectory(r2t2)
    endif()

    add_subdirectory(arduino-rx-web)
    if (EMSCRIPTEN)
        # emscripten sdl2 examples

        add_subdirectory(ggwave-wasm)
    else()
        # non-emscripten sdl2 examples

        add_subdirectory(ggwave-rx)
        add_subdirectory(ggwave-cli)
    endif()

    add_subdirectory(waver)
    add_subdirectory(spectrogram)
endif()

install(TARGETS ggwave-common
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib/static
    )

if (GGWAVE_SUPPORT_SDL2)
    install(TARGETS ggwave-common-sdl2
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static
        )
endif()
