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)