nodemcu-firmware/components/modules/CMakeLists.txt

277 lines
6.1 KiB
CMake

# Modules common to all chips
set(extra_requires
)
set(wifi_modules
"espnow.c"
"wifi.c"
"wifi_ap.c"
"wifi_common.c"
"wifi_sta.c"
)
set(module_srcs
"adc.c"
"bit.c"
"bthci.c"
"common.c"
"console.c"
"crypto.c"
"dht.c"
"encoder.c"
"eromfs.c"
"file.c"
"gpio.c"
"heaptrace.c"
"http.c"
"httpd.c"
"i2c.c"
"i2c_hw_master.c"
"i2c_hw_slave.c"
"ledc.c"
"mqtt.c"
"net.c"
"node.c"
"otaupgrade.c"
"ow.c"
"pipe.c"
"rotary_driver.c"
"rotary.c"
"rmt.c"
"rtcmem.c"
"qrcodegen.c"
"serial_common.c"
"sigma_delta.c"
"sjson.c"
"sodium.c"
"spi.c"
"spi_master.c"
"struct.c"
"time.c"
"tmr.c"
"u8g2.c"
"uart.c"
"ucg.c"
"ws2812.c"
)
# Chip specific modules, per module.
# List source files for each applicable chip.
if(IDF_TARGET STREQUAL "esp32")
list(APPEND module_srcs
"can.c"
"dac.c"
"eth.c"
"i2s.c"
"pulsecnt.c"
"sdmmc.c"
"touch.c"
${wifi_modules}
)
list(APPEND extra_requires
"driver_can"
)
elseif(IDF_TARGET STREQUAL "esp32s2")
list(APPEND module_srcs
"dac.c"
"pulsecnt.c"
${wifi_modules}
)
elseif(IDF_TARGET STREQUAL "esp32s3")
list(APPEND module_srcs
"dac.c"
"pulsecnt.c"
"sdmmc.c"
${wifi_modules}
)
elseif(IDF_TARGET STREQUAL "esp32c3")
list(APPEND module_srcs
${wifi_modules}
)
elseif(IDF_TARGET STREQUAL "esp32c5")
list(APPEND module_srcs
"i2s.c"
"pulsecnt.c"
${wifi_modules}
)
elseif(IDF_TARGET STREQUAL "esp32c6")
list(APPEND module_srcs
"dac.c"
"pulsecnt.c"
${wifi_modules}
)
elseif(IDF_TARGET STREQUAL "esp32h2")
list(APPEND module_srcs
)
endif()
idf_component_register(
SRCS ${module_srcs}
INCLUDE_DIRS "." "${CMAKE_CURRENT_BINARY_DIR}"
PRIV_REQUIRES
"app_update"
"base_nodemcu"
"bt"
"esp_eth"
"esp_http_client"
"esp_http_server"
"esp_hw_support"
"esp_vfs_console"
"fatfs"
"libsodium"
"lua"
"mbedtls"
"mqtt"
"platform"
"qrcodegen"
"sdmmc"
"spi_flash"
"sjson"
"soc"
"u8g2"
"ucg"
"vfs"
${extra_requires}
)
# Match up all the module source files with their corresponding Kconfig
# option in the form NODEMCU_CMODULE_<modname> and if enabled, add a
# "-u <modname>_module_selected1" option to force the linker to include
# the module. See components/core/include/module.h for further details on
# how this works.
set(buildinfo_modules)
set(modules_enabled)
foreach(module_src ${module_srcs})
string(REPLACE ".c" "" module_name ${module_src})
string(TOUPPER ${module_name} module_ucase)
set(mod_opt "CONFIG_NODEMCU_CMODULE_${module_ucase}")
if (${${mod_opt}})
list(APPEND modules_enabled ${module_ucase})
list(APPEND buildinfo_modules ${module_name})
endif()
endforeach()
message("Including the following modules: ${modules_enabled}")
string(REPLACE ";" "," buildinfo_modules "${buildinfo_modules}")
foreach(mod ${modules_enabled})
target_link_libraries(${COMPONENT_LIB} "-u ${mod}_module_selected1")
endforeach()
# Auto-generation of ucg/u8g2 header files, per
# https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html#source-code-generation
add_custom_command(
OUTPUT ucg_config.h
COMMAND perl -w ${PROJECT_DIR}/tools/ucg_config.pl < ${SDKCONFIG_HEADER} > ucg_config.h
DEPENDS ${SDKCONFIG_HEADER}
VERBATIM
)
add_custom_target(ucg_config DEPENDS ucg_config.h)
add_custom_command(
OUTPUT u8g2_fonts.h
COMMAND perl -w ${PROJECT_DIR}/tools/u8g2_config_fonts.pl < ${SDKCONFIG_HEADER} > u8g2_fonts.h
DEPENDS ${SDKCONFIG_HEADER}
VERBATIM
)
add_custom_target(u8g2_fonts DEPENDS u8g2_fonts.h)
add_custom_command(
OUTPUT u8g2_displays.h
COMMAND perl -w ${PROJECT_DIR}/tools/u8g2_config_displays.pl < ${SDKCONFIG_HEADER} > u8g2_displays.h
)
add_custom_target(u8g2_displays DEPENDS u8g2_displays.h)
add_dependencies(${COMPONENT_LIB} ucg_config u8g2_fonts u8g2_displays)
set_property(
DIRECTORY "${COMPONENT_DIR}" APPEND
PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ucg_config.h u8g2_fonts.h u8g2_displays.h
)
# eromfs generation
add_custom_command(
OUTPUT eromfs.bin
COMMAND ${COMPONENT_DIR}/eromfs.py ${CONFIG_NODEMCU_CMODULE_EROMFS_VOLUMES}
DEPENDS ${SDKCONFIG_HEADER}
)
add_custom_target(eromfs_bin DEPENDS eromfs.bin)
target_add_binary_data(${COMPONENT_LIB} "${CMAKE_CURRENT_BINARY_DIR}/eromfs.bin" BINARY DEPENDS eromfs_bin)
set_property(
DIRECTORY "${COMPONENT_DIR}" APPEND
PROPERTY ADDITIONAL_MAKE_CLEAN_FILES eromfs.bin
)
set(buildinfo_h
"#ifndef __BUILDINFO_H__
#define __BUILDINFO_H__
#ifdef CONFIG_LUA_NUMBER_INT64
#define BUILDINFO_BUILD_TYPE \"integer\"
#else
#ifdef CONFIG_LUA_NUMBER_DOUBLE
#define BUILDINFO_BUILD_TYPE \"double\"
#else
#define BUILDINFO_BUILD_TYPE \"float\"
#endif
#endif
#define USER_PROLOG \"@user_prolog@\"
#define BUILDINFO_BRANCH \"@branch@\"
#define BUILDINFO_COMMIT_ID \"@commit_id@\"
#define BUILDINFO_RELEASE \"@release@\"
#define BUILDINFO_RELEASE_DTS \"@release_dts@\"
#define BUILDINFO_BUILD_DATE \"@build_date@\"
#define BUILDINFO_MODULES \"@buildinfo_modules@\"
#define BUILDINFO_LFS_SIZE \@buildinfo_lfs_size@\
#endif /* __BUILDINFO_H__ */
"
)
execute_process(
COMMAND date "+%Y-%m-%d %H:%M"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE build_date
)
execute_process(
COMMAND git rev-parse HEAD
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE commit_id
)
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
COMMAND sed -E "s/[\/\\]+/_/g"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE branch
)
execute_process(
COMMAND git describe --tags --long
COMMAND sed -E "s/(.*)-(.*)-.*/\\1 +\\2/g"
COMMAND sed "s/ +0$//"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE release
)
execute_process(
COMMAND ${CMAKE_COMMAND} -E env TZ=UTC0 -- git show --quiet --date=format-local:%Y%m%d%H%M --format=%cd HEAD
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE release_dts
)
execute_process(
COMMAND grep "^lfs,.*" ${PROJECT_DIR}/components/platform/partitions.csv
COMMAND cut -d, -f5
COMMAND tr -d " "
COMMAND awk "{print strtonum( $1 )}"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE buildinfo_lfs_size
)
file(CONFIGURE OUTPUT ${PROJECT_DIR}/components/platform/include/buildinfo.h
CONTENT "${buildinfo_h}"
@ONLY
)