include(PrependFilePaths)
prepend_file_paths("../" Platforms_SRCS)

# Create platforms target for web
set(Platforms_SRCS ${Platforms_SRCS}
    conversion.hpp
    conversion.cpp
    mp4packager.hpp
    mp4packager.cpp
    msereaderfactory.hpp
    msereaderfactory.cpp
    web-http.hpp
    web-http.cpp
    web-log.hpp
    web-mediasink.hpp
    web-mediasink.cpp
    web-platform.hpp
    web-platform.cpp
    web-scheduler.hpp
    web-mediaplayer.hpp
    web-mediaplayer.cpp
    web-scheduler.cpp
)
add_library(platforms ${Platforms_SRCS})
target_include_directories(platforms PUBLIC ${PLAYER_LIB_INC})
target_link_libraries(platforms json11 mediamp4 media)

# Create asmjs and WebAssembly target names
set(ASMJS_TARGET "worker")
set(WASM_TARGET "wasmworker")
if("$ENV{NODE_ENV}" STREQUAL "production")
    set(ASMJS_TARGET "${ASMJS_TARGET}.min")
    set(WASM_TARGET "${WASM_TARGET}.min")
endif()

# General settings
foreach(WEB_TARGET "${ASMJS_TARGET}" "${WASM_TARGET}")
    add_executable(${WEB_TARGET} web-bindings.cpp)
    target_link_libraries(${WEB_TARGET} platforms playercore)

    if(BUILD_TESTS)
        target_link_libraries(${WEB_TARGET} integrationtest integrationWebTest )
    endif()

    # Set emscripten compiler (emcc) flags
    # Need space on ends of the string so the flags concatenate properly

    # basic
    set_property(TARGET ${WEB_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
        " -Os --llvm-lto 1 --bind -s MODULARIZE=1 -s EXPORT_ES6=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s STRICT=1 ")

    # memory
    set_property(TARGET ${WEB_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
        " -s \"MALLOC='emmalloc'\" --memory-init-file 0 -s TOTAL_MEMORY=33554432 -s ALLOW_MEMORY_GROWTH=1 ")

    # optimizations to minimize build size
    set_property(TARGET ${WEB_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
        " -s ENVIRONMENT=worker -s NO_EXIT_RUNTIME=1 -s NO_FILESYSTEM=1 -s DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[] -s EXPORTED_RUNTIME_METHODS=[] ")

    # debug/release specific flags
    if("$ENV{NODE_ENV}" STREQUAL "production")
        set_property(TARGET ${WEB_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
            " --closure 1 -s IGNORE_CLOSURE_COMPILER_ERRORS=1 -s EVAL_CTORS=1 -s ABORTING_MALLOC=0 ")
    else()
        set_property(TARGET ${WEB_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
            " -g3 -s ASSERTIONS=2 -s DEMANGLE_SUPPORT=1 -s SAFE_HEAP=1 -s EXPORTED_FUNCTIONS='[\"_runTests\"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\"]'")
    endif()

endforeach(WEB_TARGET)

# Add ASMJS specific settings
set_property(TARGET ${ASMJS_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
    " -s WASM=0 -s LEGACY_VM_SUPPORT=1 ")
if("$ENV{NODE_ENV}" STREQUAL "production")
    set_property(TARGET ${ASMJS_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
        " -s ELIMINATE_DUPLICATE_FUNCTIONS=1 -s ELIMINATE_DUPLICATE_FUNCTIONS_PASSES=3 ")
endif()

# Add WASM specific settings
set_property(TARGET ${WASM_TARGET} APPEND_STRING PROPERTY LINK_FLAGS
        " -s WASM=1 -s \"BINARYEN_TRAP_MODE='js'\" ")
add_custom_command(
    TARGET ${WASM_TARGET} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
            ${CMAKE_CURRENT_BINARY_DIR}/${WASM_TARGET}.wasm
            ${PROJECT_SOURCE_DIR}/artifacts/${WASM_TARGET}.wasm)

