﻿set(PROJ_NAME ${CMAKE_PROJECT_NAME})

if (DEFINED CFG_BOOTLOADER_ENABLE)
    set(CMAKE_PROJECT_NAME bootloader)
    add_subdirectory(../bootloader ../bootloader)
endif()

set(CMAKE_PROJECT_NAME ${PROJ_NAME})

if (DEFINED CFG_NET_WIFI_SDIO_VND_MHD)
    SET (WIFI_PATH
        ${PROJECT_SOURCE_DIR}/sdk/driver/non_gpl_wifi_mhd/wlan_lib
    )
endif()

ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_WATCHDOG_ENABLE)

add_definitions(
    -DCFG_WEBSERVER_PORT=${CFG_WEBSERVER_PORT}
    -DCFG_WEBSERVER_PORT_STR="${CFG_WEBSERVER_PORT}"
    -DCFG_HW_VERSION="${CFG_HW_VERSION}"
    -DCFG_UPGRADE_FTP_URL="${CFG_UPGRADE_FTP_URL}"
)

ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_CHECK_FILES_CRC_ON_BOOTING)

if (DEFINED CFG_PLAY_VIDEO_ON_BOOTING)
    add_definitions(
        -DCFG_PLAY_VIDEO_ON_BOOTING
        -DCFG_BOOT_VIDEO_BGCOLOR=${CFG_BOOT_VIDEO_BGCOLOR}
        -DCFG_BOOT_VIDEO_VOLUME=${CFG_BOOT_VIDEO_VOLUME}
    )
endif()

ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_ENABLE_ROTATE)

if (DEFINED CFG_BOOT_VIDEO_ENABLE_WINDOW_MODE)
    add_definitions(
        -DCFG_BOOT_VIDEO_ENABLE_WINDOW_MODE
        -DCFG_VIDEO_WINDOW_X_POS=${CFG_VIDEO_WINDOW_X_POS}
        -DCFG_VIDEO_WINDOW_Y_POS=${CFG_VIDEO_WINDOW_Y_POS}
        -DCFG_VIDEO_WINDOW_WIDTH=${CFG_VIDEO_WINDOW_WIDTH}
        -DCFG_VIDEO_WINDOW_HEIGHT=${CFG_VIDEO_WINDOW_HEIGHT}
    )
endif()

ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_SCREENSHOT_ENABLE)

if (DEFINED CFG_UPGRADE_GUI)
    add_definitions(
        -DCFG_UPGRADE_GUI
    )
endif()

if (DEFINED CFG_UPGRADE_DOWNLOAD_STORAGE)
    add_definitions(
        -DCFG_UPGRADE_DOWNLOAD_STORAGE
        -DCFG_UPGRADE_DOWNLOAD_POS=${CFG_UPGRADE_DOWNLOAD_POS}
    )

    ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_UPGRADE_DOWNLOAD_NAND)
    ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_UPGRADE_DOWNLOAD_NOR)
    ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_UPGRADE_DOWNLOAD_SD0)
    ITE_ADD_DEFINITIONS_IF_DEFINED(CFG_UPGRADE_DOWNLOAD_SD1)
endif()

if (DEFINED CFG_DYNAMIC_LOAD_TP_MODULE)
    add_definitions(
        -DCFG_DYNAMIC_LOAD_TP_MODULE
    )

    if (DEFINED CFG_TOUCH_ENABLE)

        unset(modules)
        foreach (m ${CFG_TOUCH_MODULE})
            set(modules "${modules} ${m}")
        endforeach()

        add_definitions(
            -DCFG_CTRLBOARD_TOUCH_MODULE="${modules}"
        )
    endif()
endif()

if (DEFINED CFG_NOR_PAGE_ALLOCATION)
    add_definitions(
        -DCFG_NOR_PAGE_ALLOCATION
        -DCFG_NOR_PAGE_ALLOCATION_START=${CFG_NOR_PAGE_ALLOCATION_START}
        -DCFG_NOR_PAGE_ALLOCATION_SHUTDOWN_GPIO=${CFG_NOR_PAGE_ALLOCATION_SHUTDOWN_GPIO}
    )
endif()

include_directories(
    ${CMAKE_CURRENT_BINARY_DIR}
    #=== RTL8189F ===#
    if (DEFINED CFG_NET_WIFI_SDIO_NGPL_8189FTV)
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8189f/include/
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8189f/api/wifi/
    endif()

    #=== RTL8723DS ===#
    if (DEFINED CFG_NET_WIFI_SDIO_NGPL_8723DS)
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8723d/include/
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8723d/api/wifi/
    endif()

    #=== RTL8723DS ===#
    if (DEFINED CFG_NET_WIFI_SDIO_NGPL_8821CS)
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8821c/include/
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8821c/api/wifi/
    endif()

    #=== RTL8733BS ===#
    if (DEFINED CFG_NET_WIFI_SDIO_NGPL_8733BS)
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8733b/include/
        ${PROJECT_SOURCE_DIR}/sdk/driver/wifi_rtk/non_gpl_wifi_8733b/api/wifi/
    endif()
)

if (DEFINED CFG_NET_WIFI_SDIO_VND_MHD)
    include_directories(
        ${CMAKE_CURRENT_BINARY_DIR}
        ${PROJECT_SOURCE_DIR}/sdk/driver/non_gpl_wifi_mhd/include
    )
endif()

include_directories(
    ${CMAKE_CURRENT_BINARY_DIR}
    ${PROJECT_SOURCE_DIR}/sdk/driver/mmp/include
    #${PROJECT_SOURCE_DIR}/sdk/share/audio_mgr
    ${PROJECT_SOURCE_DIR}/sdk/include/flower
    ${PROJECT_SOURCE_DIR}/sdk/share/ffmpeg
    ${PROJECT_SOURCE_DIR}/sdk/share/lwip_ftpd
    ${PROJECT_SOURCE_DIR}/sdk/share/microhttpd
    ${PROJECT_SOURCE_DIR}/sdk/share/microhttpd/include
    ${PROJECT_SOURCE_DIR}/sdk/share/ping/
    ${PROJECT_SOURCE_DIR}/sdk/share/wifi_mgr/
    ${PROJECT_SOURCE_DIR}/sdk/driver/itv

    if (CFG_CHIP_FAMILY STREQUAL 9070)
        include_directories(
            ${PROJECT_SOURCE_DIR}/sdk/share/itu
            ${PROJECT_SOURCE_DIR}/sdk/share/itu/it9070
        )
    else()
        include_directories(
            ${PROJECT_SOURCE_DIR}/sdk/share/itu
            ${PROJECT_SOURCE_DIR}/sdk/share/itu/it9850
        )
    endif()
)

if (DEFINED CFG_AUDIO_ENABLE)
add_executable(${CMAKE_PROJECT_NAME}
    audio.c
    )	
endif()
    
add_executable(${CMAKE_PROJECT_NAME}
    config.c
    ctrlboard.h
    external.c
    external_process.c
    function_table.c
    main.c
    photo.c
    reset.c
    scene.c
    scene.h
    screen.c
    storage.c
    upgrade.c
    backup.c
)

if (DEFINED CFG_NOR_PAGE_ALLOCATION)
    add_executable(${CMAKE_PROJECT_NAME}
        nor_page_allocation.c
    )
endif()

# layers
include(layer.cmake)

if (DEFINED CFG_NET_ENABLE)
    add_executable(${CMAKE_PROJECT_NAME}
        network_func.c
        network_main.c
        network_config.h
        webserver.c
    )
endif()

if (DEFINED CFG_NET_ETHERNET)
    add_executable(${CMAKE_PROJECT_NAME}
        network_ethernet.c
    )
endif()

if (DEFINED CFG_NET_ETHERNET_4G)
    add_executable(${CMAKE_PROJECT_NAME}
        network_ecm.c
    )

	# ECM 4G
    include_directories(
        ${PROJECT_SOURCE_DIR}/sdk/share/eth_mgr/
	    )
endif()

if (DEFINED CFG_NET_WIFI)
    add_executable(${CMAKE_PROJECT_NAME}
        network_wifi.c
    )
endif()

# upgrade fw from uart
if (DEFINED CFG_UPGRADE_FROM_UART_RUN_TIME)
    add_executable(${CMAKE_PROJECT_NAME}
        upgrade_uart.c
    )
endif()

# boot video
if (DEFINED CFG_PLAY_VIDEO_ON_BOOTING)
    add_executable(${CMAKE_PROJECT_NAME}
        video.c
    )

    file(COPY
        ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/media/boot/boot.mp4
        DESTINATION ${CMAKE_BINARY_DIR}/data/private/media
    )
endif()

if (DEFINED CFG_PLAY_MJPEG_ON_BOOTING)
    add_executable(${CMAKE_PROJECT_NAME}
        video_mjpeg.c
    )

    file(COPY
        ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/media/boot/${CFG_BOOT_MJPEG_FILE}
        DESTINATION ${CMAKE_BINARY_DIR}/data/private/media
    )
endif()

# files
configure_file(${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/ctrlboard.ini ${CMAKE_BINARY_DIR}/data/public/ctrlboard.ini COPYONLY)

if (DEFINED CFG_AUDIO_ENABLE)
file(COPY
    ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/sounds
    DESTINATION ${CMAKE_BINARY_DIR}/data/private
    )
endif()

if (DEFINED CFG_LCD_MULTIPLE)
    file(COPY
        ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/itu
        DESTINATION ${CMAKE_BINARY_DIR}/data/private
        PATTERN "*.xml" EXCLUDE
        PATTERN "*.bak" EXCLUDE
        PATTERN "*.xls" EXCLUDE
        PATTERN "*_rotate" EXCLUDE
        PATTERN "upgrade.itu" EXCLUDE
    )
else()
    file(GLOB files ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/${CFG_ITU_PATH}/*.*)
    file(COPY
        ${files}
        DESTINATION ${CMAKE_BINARY_DIR}/data/private
        PATTERN "*.xml" EXCLUDE
        PATTERN "*.bak" EXCLUDE
    )
endif()

# backups
configure_file(${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/ctrlboard.ini ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_PUBLIC_DRIVE}/ctrlboard.ini COPYONLY)
if (DEFINED CFG_A_B_DUAL_BOOT_ENABLE)
    configure_file(${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/ctrlboard.ini ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_SUB_PUBLIC_DRIVE}/ctrlboard.ini COPYONLY)
endif()


# font
file(COPY
    ${PROJECT_SOURCE_DIR}/data/font/${CFG_FONT_FILENAME}
    DESTINATION ${CMAKE_BINARY_DIR}/data/private/font
)

# web
if (DEFINED CFG_NET_ENABLE)
file(GLOB files ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/web/*.*)
foreach (src ${files})
    string(REPLACE "${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/web/" "${CMAKE_BINARY_DIR}/data/private/web/" dest ${src})
    configure_file(${src} ${dest} COPYONLY)
endforeach()
endif()

if(DEFINED CFG_BL_SHOW_LOGO)
# screen saver
file(COPY
    ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/screensaver.jpg
    DESTINATION ${CMAKE_BINARY_DIR}/data/public
)
endif()

# codec
if (DEFINED CFG_COMPRESS_AUDIO_PLUGIN AND DEFINED CFG_AUDIO_ENABLE)
    configure_file(${CMAKE_BINARY_DIR}/lib/sm32/mp3.codecs ${CMAKE_BINARY_DIR}/data/private/codec/mp3.codecs COPYONLY)
    configure_file(${CMAKE_BINARY_DIR}/lib/sm32/wave.codecs ${CMAKE_BINARY_DIR}/data/private/codec/wave.codecs COPYONLY)
endif()

# Update Compile Time
file(REMOVE ${CMAKE_BINARY_DIR}/project/${CMAKE_PROJECT_NAME}/CMakeFiles/${CMAKE_PROJECT_NAME}.dir/layer_MainMenu.c.obj)

add_definitions(
	-DCFG_RAM_INIT_SCRIPT="${CFG_RAM_INIT_SCRIPT}"
	-DCFG_LCD_INIT_SCRIPT="${CFG_LCD_INIT_SCRIPT}"
	#-DCFG_UPGRADE_PACKAGE_VERSION=${CFG_UPGRADE_PACKAGE_VERSION}
)

# media
file(GLOB files ${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/media/*.*)
foreach (src ${files})
   string(REPLACE "${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/media/" "${CMAKE_BINARY_DIR}/data/public/media/" dest ${src})
   configure_file(${src} ${dest} COPYONLY)
endforeach()

file(COPY
	${PROJECT_SOURCE_DIR}/project/${CMAKE_PROJECT_NAME}/media/test.ts
	DESTINATION ${CMAKE_BINARY_DIR}/data/private
)

if (DEFINED CFG_DYNAMIC_LOAD_TP_MODULE)
    add_executable(${CMAKE_PROJECT_NAME}
        load_tp_module.c
    )
endif()

# crc
if (DEFINED CFG_CHECK_FILES_CRC_ON_BOOTING)
    file(REMOVE ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_PUBLIC_DRIVE}/ite_crc.dat)
    execute_process(COMMAND makecrc -c ${CMAKE_BINARY_DIR}/data/public/ite_crc.dat -i ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_PUBLIC_DRIVE})
    execute_process(COMMAND makecrc -v ${CMAKE_BINARY_DIR}/data/public/ite_crc.dat -i ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_PUBLIC_DRIVE})
    file(COPY ${CMAKE_BINARY_DIR}/data/public/ite_crc.dat DESTINATION ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_PUBLIC_DRIVE})
endif()
if (DEFINED CFG_A_B_DUAL_BOOT_ENABLE)
if (DEFINED CFG_CHECK_FILES_CRC_ON_BOOTING)
    file(REMOVE ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_SUB_PUBLIC_DRIVE}/ite_crc.dat)
    file(COPY ${CMAKE_BINARY_DIR}/data/public/ite_crc.dat DESTINATION ${CMAKE_BINARY_DIR}/data/private/backup/${CFG_SUB_PUBLIC_DRIVE})
endif()
endif()

if (DEFINED CFG_NET_WIFI_SDIO_NGPL_AP6256)
    if (DEFINED CFG_NET_LWIP)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4345x-LwIP_1_4_1.a
        )
    endif()
    if (DEFINED CFG_NET_LWIP_2)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4345x-LwIP_2_2_0.a
        )
    endif()
endif()

if (DEFINED CFG_NET_WIFI_SDIO_NGPL_AP6236)
    if (DEFINED CFG_NET_LWIP)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4343x-LwIP_1_4_1.a
        )
    endif()
    if (DEFINED CFG_NET_LWIP_2)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4343x-LwIP_2_2_0.a
        )
    endif()
endif()

if (DEFINED CFG_NET_WIFI_SDIO_NGPL_AP6212)
    if (DEFINED CFG_NET_LWIP)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd43438-LwIP_1_4_1.a
        )
    endif()
    if (DEFINED CFG_NET_LWIP_2)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd43438-LwIP_2_2_0.a
        )
    endif()
endif()

if (DEFINED CFG_NET_WIFI_SDIO_NGPL_AP6203)
    if (DEFINED CFG_NET_LWIP)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4301x-LwIP_1_4_1.a
        )
    endif()
    if (DEFINED CFG_NET_LWIP_2)
        set (PREBUILD_LIB
            ${WIFI_PATH}/libmhd4301x-LwIP_2_2_0.a
        )
    endif()
endif()

if (DEFINED CFG_NET_WIFI_SDIO_NGPL_SYN4345x)
    set (PREBUILD_LIB
        ${WIFI_PATH}/libmhd_sdio_4345x.a
    )
endif()

if (DEFINED CFG_NET_WIFI_SDIO_VND_MHD)
    file(COPY ${PREBUILD_LIB}
        DESTINATION ${CMAKE_BINARY_DIR}/lib/${CFG_CPU_NAME}/
    )
endif()

#target_link_libraries(${CMAKE_PROJECT_NAME} ${CMAKE_BINARY_DIR}/lib/fa626/liblive555MediaServer.a)

# build
include(${PROJECT_SOURCE_DIR}/sdk/build.cmake)
