spejsiot-sonoff_pow/soft/CMakeLists.txt

124 lines
5.0 KiB
CMake

cmake_minimum_required (VERSION 3.0)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
project (comm_mcu)
# specify the cross compiler
set(GCC_PREFIX "xtensa-lx106-elf")
set(CMAKE_C_COMPILER "${GCC_PREFIX}-gcc")
set(CMAKE_CXX_COMPILER "${GCC_PREFIX}-g++")
set(CPP_FLAGS "${CPP_FLAGS} -Os -g")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wundef -Wno-unused-function -Wcast-align -Wextra -Wshadow -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes")
set(CPP_FLAGS "${CPP_FLAGS} -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -finline-functions -mtext-section-literals")
set(CPP_FLAGS "${CPP_FLAGS} -D__ets__ -DICACHE_FLASH -DARDUINO=106 -DCOM_SPEED_SERIAL=115200 -DENABLE_CMD_EXECUTOR=1 -DCUST_FILE_BASE=application -DDEBUG_VERBOSE_LEVEL=2 -DDEBUG_PRINT_FILENAME_AND_LINE=0 -DDISABLE_SPIFFS=1 -DBOOT_RTC_ENABLED=1")
set(CPP_FLAGS "${CPP_FLAGS} -DRBOOT_SPIFFS_0=0x100000 -DRBOOT_SPIFFS_1=0x300000 -DRBOOT_INTEGRATION -DBOOT_BIG_FLASH -DDISABLE_SPIFFS=1 -DSPIFF_SIZE=196608")
# disable exceptions and Run-Time Type Information
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -felide-constructors")
# remove unused objects
set(CPP_FLAGS "${CPP_FLAGS} -ffunction-sections -fdata-sections")
# CPP FLAGS
set(CMAKE_C_FLAGS "${CPP_FLAGS} ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CPP_FLAGS} ${CMAKE_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L.")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Trboot.rom0.ld -nostdlib -u Cache_Read_Enable_New -u spiffs_get_storage_config -u call_user_start -Wl,--gc-sections -Wl,-wrap,system_restart_local")
get_filename_component(EXT_PATH "../../ext/" ABSOLUTE)
get_filename_component(PLATFORM_PATH "platform/" ABSOLUTE)
link_directories(${PLATFORM_PATH})
# esp-open-sdk
get_filename_component(SDK_PATH "${EXT_PATH}/esp/esp-open-sdk" ABSOLUTE)
include_directories("${SDK_PATH}/include/")
include_directories("${SDK_PATH}/sdk/include/")
link_directories("${SDK_PATH}/lib/")
link_directories("${SDK_PATH}/sdk/ld")
set(BLANK_BIN "${SDK_PATH}/sdk/bin/blank.bin")
set(ESPTOOL "${SDK_PATH}/esptool/esptool.py")
set(TLIBS ${TLIBS} wpa pp phy smartconfig net80211 crypto hal)
# rboot
get_filename_component(RBOOT_PATH "${EXT_PATH}/esp/rboot" ABSOLUTE)
include_directories("${RBOOT_PATH}/")
include_directories("${RBOOT_PATH}/appcode/")
link_directories("${RBOOT_PATH}/main/lib")
set(RBOOT_BIN "${RBOOT_PATH}/firmware/rboot.bin")
set(TLIBS ${TLIBS} main2 rboot)
# Sming
get_filename_component(SMING_PATH "${EXT_PATH}/esp/Sming/Sming" ABSOLUTE)
include_directories("${SMING_PATH}/include/")
include_directories("${SMING_PATH}/")
include_directories("${SMING_PATH}/third-party/esp-open-lwip/include")
include_directories("${SMING_PATH}/system/include")
include_directories("${SMING_PATH}/Wiring")
include_directories("${SMING_PATH}/Libraries")
include_directories("${SMING_PATH}/Libraries/Adafruit_GFX")
include_directories("${SMING_PATH}/SmingCore")
include_directories("${SMING_PATH}/Services/SpifFS")
include_directories("${SMING_PATH}/third-party/http-parser")
include_directories("${SMING_PATH}/third-party/spiffs/src")
link_directories("${SMING_PATH}/compiler/lib/") # Sming libraries
set(TLIBS ${TLIBS} sming microc microgcc lwip_open pwm_open)
add_library (rboot STATIC
${RBOOT_PATH}/appcode/rboot-api.c
${RBOOT_PATH}/appcode/rboot-bigflash.c
${SMING_PATH}/appspecific/rboot/overrides.c
)
include_directories("src")
include_directories("src/spejsiot")
include_directories("src/spejsiot/include")
include_directories("src/common")
add_library (app STATIC
src/application.cpp
src/sonoff_pow.cpp
src/impuls_counter.c
src/spejsiot/Endpoint.cpp
src/spejsiot/endpoints/OutputEndpoint.cpp
src/spejsiot/endpoints/ImplementationEndpoint.cpp
src/spejsiot/SpejsNode.cpp
src/TcpPublish.cpp
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ver.c
)
add_executable(main.elf
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/empty.c)
target_link_libraries(main.elf -Wl,--start-group app ${TLIBS} -Wl,--end-group)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ver.c
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}
COMMAND echo \"char* BUILD_ID = \\\"$$\(git rev-parse --short HEAD\)-$$\(TZ=UTC date +%Y%m%d-%H%M%S\)\\\"\;\" > ver.c
)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/empty.c
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}
COMMAND touch empty.c
)
add_custom_command(OUTPUT firmware/rom0.bin
COMMAND mkdir -p firmware/
COMMAND esptool2 -quiet -bin -boot2 main.elf firmware/rom0.bin .text .data .rodata
DEPENDS main.elf)
add_custom_target(flash
DEPENDS firmware/rom0.bin
DEPENDS ${RBOOT_BIN}
COMMAND python2 "${ESPTOOL}" -p /dev/ttyUSB0 -b 460800 write_flash -ff 40m -fm qio -fs 4MB 0x00000 ${RBOOT_BIN} 0x01000 ${BLANK_BIN} 0x02000 firmware/rom0.bin)