fixing the binary app_name for squeezelite

This commit is contained in:
Sebastien
2020-03-21 12:38:10 -04:00
parent 3870b86a31
commit 8a81fe821f
10 changed files with 157 additions and 47 deletions

View File

@@ -4,8 +4,15 @@ include($ENV{IDF_PATH}/tools/cmake/project.cmake)
message(STATUS "Building RECOVERY") message(STATUS "Building RECOVERY")
project(recovery) project(recovery)
set_property(TARGET recovery.elf PROPERTY RECOVERY_BUILD 0 )
set_property(TARGET recovery.elf PROPERTY RECOVERY_PREFIX app_recovery )
set_property(TARGET recovery.elf PROPERTY RECOVERY_PREFIX app_recovery )
include(squeezelite.cmake) include(squeezelite.cmake)

View File

@@ -7,6 +7,9 @@ idf_component_register( SRCS
platform_console.c platform_console.c
INCLUDE_DIRS . INCLUDE_DIRS .
REQUIRES nvs_flash REQUIRES nvs_flash
PRIV_REQUIRES console tools services spi_flash app_update platform_config vfs pthread wifi-manager platform_config newlib telnet ) PRIV_REQUIRES console app_update tools services spi_flash platform_config vfs pthread wifi-manager platform_config newlib telnet )
target_link_libraries(${COMPONENT_LIB} ${build_dir}/esp-idf/$<TARGET_PROPERTY:RECOVERY_PREFIX>/lib$<TARGET_PROPERTY:RECOVERY_PREFIX>.a ) target_link_libraries(${COMPONENT_LIB} ${build_dir}/esp-idf/$<TARGET_PROPERTY:RECOVERY_PREFIX>/lib$<TARGET_PROPERTY:RECOVERY_PREFIX>.a )

View File

@@ -1,13 +1,9 @@
idf_component_register( SRC_DIRS . idf_component_register( SRC_DIRS .
INCLUDE_DIRS . INCLUDE_DIRS .
PRIV_REQUIRES bootloader_support
) )
#idf_build_get_property(IS_RECOVERY 0 )
#target_link_options(__idf_platform_console PUBLIC $<$<EQUAL:${IS_RECOVERY},1>:${COMPONENT_LIB}>) target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=esp_app_desc")
#add_library(libcmd_squeezelite STATIC cmd_squeezelite.c ) idf_build_get_property(project_ver PROJECT_VER)
#__component_add_include_dirs(libcmd_squeezelite "${__INCLUDE_DIRS}" INTERFACE) string(SUBSTRING "${project_ver}" 0 31 PROJECT_VER_CUT)
#set_property(TARGET libcmd_squeezelite APPEND PROPERTY LINK_LIBRARIES console) set_source_files_properties(recovery.c PROPERTIES COMPILE_DEFINITIONS "PROJECT_VER=\"${PROJECT_VER_CUT}\"; PROJECT_NAME=\"recovery\"")
#set_property(TARGET libcmd_squeezelite APPEND PROPERTY INTERFACE_LINK_LIBRARIES $<LINK_ONLY:console>)
#
#
#add_library(librecovery STATIC recovery.c )
#target_link_options(${COMPONENT_LIB} PUBLIC $<IF:${IS_RECOVERY},librecovery.a,libcmd_squeezelite.a>)

View File

@@ -0,0 +1,2 @@
#pragma once
#define PROJECT_NAME "recovery"

View File

@@ -1,3 +1,30 @@
#include <stdio.h>
#include <string.h>
#include "esp_app_format.h"
const __attribute__((section(".rodata_desc"))) esp_app_desc_t esp_app_desc = {
.magic_word = ESP_APP_DESC_MAGIC_WORD,
.version = PROJECT_VER,
.project_name = PROJECT_NAME,
.idf_ver = IDF_VER,
#ifdef CONFIG_BOOTLOADER_APP_SECURE_VERSION
.secure_version = CONFIG_BOOTLOADER_APP_SECURE_VERSION,
#else
.secure_version = 0,
#endif
#ifdef CONFIG_APP_COMPILE_TIME_DATE
.time = __TIME__,
.date = __DATE__,
#else
.time = "",
.date = "",
#endif
};
int main(int argc, char **argv){ int main(int argc, char **argv){
return 1; return 1;
} }

View File

@@ -1,6 +1,15 @@
idf_component_register( SRC_DIRS . idf_build_get_property(idf_path IDF_PATH)
INCLUDE_DIRS . idf_component_register( SRCS cmd_squeezelite.c
PRIV_REQUIRES console codecs squeezelite newlib pthread tools platform_config) INCLUDE_DIRS .
PRIV_REQUIRES spi_flash bootloader_support partition_table bootloader_support console codecs squeezelite newlib pthread tools platform_config )
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=feof") target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=feof")
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=fdopen") target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=fdopen")
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=esp_app_desc")
idf_build_get_property(project_ver PROJECT_VER)
string(SUBSTRING "${project_ver}" 0 31 PROJECT_VER_CUT)
set_source_files_properties(cmd_squeezelite.c PROPERTIES COMPILE_DEFINITIONS "PROJECT_VER=\"${PROJECT_VER_CUT}\"; PROJECT_NAME=\"squeezelite\"")

View File

@@ -0,0 +1,2 @@
#pragma once
#define PROJECT_NAME "squeezelite"

View File

@@ -10,9 +10,34 @@
#include "pthread.h" #include "pthread.h"
#include "platform_esp32.h" #include "platform_esp32.h"
#include "platform_config.h" #include "platform_config.h"
#include "esp_app_format.h"
static const char * TAG = "squeezelite_cmd"; static const char * TAG = "squeezelite_cmd";
#define SQUEEZELITE_THREAD_STACK_SIZE (6*1024) #define SQUEEZELITE_THREAD_STACK_SIZE (6*1024)
const __attribute__((section(".rodata_desc"))) esp_app_desc_t esp_app_desc = {
.magic_word = ESP_APP_DESC_MAGIC_WORD,
.version = PROJECT_VER,
.project_name = PROJECT_NAME,
.idf_ver = IDF_VER,
#ifdef CONFIG_BOOTLOADER_APP_SECURE_VERSION
.secure_version = CONFIG_BOOTLOADER_APP_SECURE_VERSION,
#else
.secure_version = 0,
#endif
#ifdef CONFIG_APP_COMPILE_TIME_DATE
.time = __TIME__,
.date = __DATE__,
#else
.time = "",
.date = "",
#endif
};
extern int main(int argc, char **argv); extern int main(int argc, char **argv);
static int launchsqueezelite(int argc, char **argv); static int launchsqueezelite(int argc, char **argv);
pthread_t thread_squeezelite; pthread_t thread_squeezelite;

View File

@@ -3,7 +3,7 @@ function(___output_debug_target bin_name )
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" cm_build_dir) file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" cm_build_dir)
if( "${bin_name}" STREQUAL "_" ) if( "${bin_name}" STREQUAL "_" )
set(debug_file "dbg_project_args" ) set(debug_file "dbg_project" )
else() else()
set(debug_file "dbg_${bin_name}" ) set(debug_file "dbg_${bin_name}" )
endif() endif()
@@ -15,7 +15,7 @@ function(___output_debug_target bin_name )
file(READ ${flash_args_file} flash_args) file(READ ${flash_args_file} flash_args)
list(APPEND dbg_cmds "target remote :3333")
list(APPEND dbg_cmds "mon reset halt") list(APPEND dbg_cmds "mon reset halt")
list(APPEND dbg_cmds "flushregs") list(APPEND dbg_cmds "flushregs")
list(APPEND dbg_cmds "set remote hardware-watchpoint-limit 2") list(APPEND dbg_cmds "set remote hardware-watchpoint-limit 2")
@@ -38,15 +38,12 @@ function(___output_debug_target bin_name )
list(APPEND flash_dbg_cmds "${line_prefix}${found_bin} ${found_offset}") list(APPEND flash_dbg_cmds "${line_prefix}${found_bin} ${found_offset}")
endif() endif()
if( ( "${found_bin}" MATCHES "${bin_name}" ) ) if( ( "${found_bin}" MATCHES "${bin_name}" ) AND NOT ( "${bin_name}" STREQUAL "_" ) )
list(APPEND dbg_cmds "mon esp32 appoffset ${found_offset}") list(APPEND dbg_cmds "mon esp32 appimage_offset ${found_offset}")
endif() endif()
endif() endif()
endforeach() endforeach()
list(APPEND dbg_cmds_end "mon reset halt")
list(APPEND dbg_cmds_end "flushregs")
list(APPEND full_dbg_cmds "${dbg_cmds}") list(APPEND full_dbg_cmds "${dbg_cmds}")
list(APPEND full_dbg_cmds "${dbg_cmds_end}") list(APPEND full_dbg_cmds "${dbg_cmds_end}")
@@ -57,9 +54,9 @@ function(___output_debug_target bin_name )
STRING(REGEX REPLACE ";" "\n" full_dbg_cmds "${full_dbg_cmds}") STRING(REGEX REPLACE ";" "\n" full_dbg_cmds "${full_dbg_cmds}")
STRING(REGEX REPLACE ";" "\n" full_flash_dbg_cmds "${full_flash_dbg_cmds}") STRING(REGEX REPLACE ";" "\n" full_flash_dbg_cmds "${full_flash_dbg_cmds}")
message("Writing: ${debug_file} with ${full_dbg_cmds}") # message("Writing: ${debug_file} with ${full_dbg_cmds}")
file(WRITE "${debug_file}" "${full_dbg_cmds}") file(WRITE "${debug_file}" "${full_dbg_cmds}")
message("Writing: ${flash_debug_file} with : ${full_flash_dbg_cmds}") # message("Writing: ${flash_debug_file} with : ${full_flash_dbg_cmds}")
file(WRITE "${flash_debug_file}" "${full_flash_dbg_cmds}") file(WRITE "${flash_debug_file}" "${full_flash_dbg_cmds}")

View File

@@ -1,26 +1,45 @@
#include($ENV{IDF_PATH}/components/esptool_py/project_include.cmake)
if(NOT SDKCONFIG OR NOT IDF_PATH OR NOT IDF_TARGET )
message(FATAL_ERROR "squeezelite should not be made outside of the main project !")
endif()
function(___register_flash target_name sub_type) function(___register_flash target_name sub_type)
partition_table_get_partition_info(otaapp_offset "--partition-type app --partition-subtype ${sub_type}" "offset") partition_table_get_partition_info(otaapp_offset "--partition-type app --partition-subtype ${sub_type}" "offset")
esptool_py_flash_project_args(${target_name} ${otaapp_offset} ${build_dir}/${target_name}.bin FLASH_IN_PROJECT) esptool_py_flash_project_args(${target_name} ${otaapp_offset} ${build_dir}/${target_name}.bin FLASH_IN_PROJECT)
esptool_py_custom_target(${target_name}-flash ${target_name} "${target_name}") esptool_py_custom_target(${target_name}-flash ${target_name} "${target_name}")
endfunction() endfunction()
#
# Removes the specified compile flag from the specified target.
# _target - The target to remove the compile flag from
# _flag - The compile flag to remove
#
# Pre: apply_global_cxx_flags_to_all_targets() must be invoked.
#
macro(remove_flag_from_target _target _flag)
get_target_property(_target_cxx_flags ${_target} COMPILE_OPTIONS)
if(_target_cxx_flags)
list(REMOVE_ITEM _target_cxx_flags ${_flag})
set_target_properties(${_target} PROPERTIES COMPILE_OPTIONS "${_target_cxx_flags}")
endif()
endmacro()
function(___print_list pref listcontent)
message("")
message("${pref}")
foreach(e ${listcontent})
message("${pref} ${e}")
endforeach()
message("")
endfunction()
function(___create_new_target target_name) function(___create_new_target target_name)
idf_build_get_property(build_dir BUILD_DIR) idf_build_get_property(build_dir BUILD_DIR)
file(TO_CMAKE_PATH "${IDF_PATH}" idf_path)
set(target_elf ${target_name}.elf) set(target_elf ${target_name}.elf)
# Create a dummy file to work around CMake requirement of having a source # Create a dummy file to work around CMake requirement of having a source
# file while adding an executable # file while adding an executable
set(target_elf_src ${CMAKE_BINARY_DIR}/${target_name}_src.c) set(target_elf_src ${CMAKE_BINARY_DIR}/${target_name}_src.c)
add_custom_command(OUTPUT ${target_elf_src} add_custom_command(OUTPUT ${target_elf_src}
BUILD
COMMAND ${CMAKE_COMMAND} -E touch ${target_elf_src} COMMAND ${CMAKE_COMMAND} -E touch ${target_elf_src}
VERBATIM) VERBATIM)
@@ -28,20 +47,30 @@ function(___create_new_target target_name)
add_executable(${target_elf} "${target_elf_src}") add_executable(${target_elf} "${target_elf_src}")
add_dependencies(${target_elf} _${target_name}_elf) add_dependencies(${target_elf} _${target_name}_elf)
add_dependencies(${target_elf} "recovery.elf") add_dependencies(${target_elf} "recovery.elf")
set_property(TARGET ${target_elf} PROPERTY RECOVERY_BUILD 0 )
set_property(TARGET ${target_elf} PROPERTY RECOVERY_PREFIX app_${target_name}) set_property(TARGET ${target_elf} PROPERTY RECOVERY_PREFIX app_${target_name})
idf_build_get_property(bca BUILD_COMPONENT_ALIASES)
# Remove app_recovery so that app_squeezelite and dependencies are properly resolved
idf_build_get_property(bca BUILD_COMPONENT_ALIASES)
list(REMOVE_ITEM bca "idf::app_recovery")
list(REMOVE_ITEM bca "idf::app_squeezelite")
target_link_libraries(${target_elf} ${bca}) target_link_libraries(${target_elf} ${bca})
target_link_libraries(${target_elf} idf::app_squeezelite)
set(target_name_mapfile "${target_name}.map") set(target_name_mapfile "${target_name}.map")
target_link_libraries(${target_elf} "-Wl,--cref -Wl,--Map=${CMAKE_BINARY_DIR}/${target_name_mapfile}") target_link_libraries(${target_elf} "-Wl,--cref -Wl,--Map=${CMAKE_BINARY_DIR}/${target_name_mapfile}")
# idf_build_get_property(link_depends __LINK_DEPENDS)
# idf_build_get_property(link_options LINK_OPTIONS)
# idf_build_get_property(ldgen_libraries __LDGEN_LIBRARIES GENERATOR_EXPRESSION)
add_custom_command( add_custom_command(
TARGET ${target_elf} TARGET ${target_elf}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Generated ${build_dir}/${target_name}.bin" COMMAND ${CMAKE_COMMAND} -E echo "Generating ${build_dir}/${target_name}.bin"
#COMMAND echo ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${esptool_elf2image_args} COMMAND ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${ESPTOOLPY_ELF2IMAGE_OPTIONS} -o "${build_dir}/${target_name}.bin" "${target_name}.elf"
#COMMAND echo ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${ESPTOOLPY_ELF2IMAGE_OPTIONS}
COMMAND ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${ESPTOOLPY_ELF2IMAGE_OPTIONS}
-o "${build_dir}/${target_name}.bin" "${target_name}.elf"
DEPENDS "${target_name}.elf" DEPENDS "${target_name}.elf"
WORKING_DIRECTORY ${build_dir} WORKING_DIRECTORY ${build_dir}
COMMENT "Generating binary image from built executable" COMMENT "Generating binary image from built executable"
@@ -54,17 +83,30 @@ function(___create_new_target target_name)
endfunction() endfunction()
___create_new_target(squeezelite ) ___create_new_target(squeezelite )
___register_flash(squeezelite ota_0) ___register_flash(squeezelite ota_0)
#add_custom_target(_jtag_scripts ALL
# BYPRODUCTS flash_dbg_project_args
# COMMAND ${CMAKE_COMMAND}
# DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build/partition_table/partition-table.bin" )
add_custom_target(_jtag_scripts ALL add_custom_target(_jtag_scripts ALL
BYPRODUCTS "flash_dbg_project_args" BYPRODUCTS "flash_dbg_project_args"
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/generate_debug_scripts.cmake") COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/generate_debug_scripts.cmake"
# COMMAND ${CMAKE_COMMAND} --graphviz=graph.dot .
# $ sed -n 's/.*label="\(.*\)"\s.*/\1/p' graph.dot.foo > foo_dependencies.txt
)
add_dependencies(partition_table _jtag_scripts) add_dependencies(partition_table _jtag_scripts)
idf_build_get_property(build_dir BUILD_DIR)
add_custom_command(
TARGET recovery.elf
PRE_LINK
COMMAND xtensa-esp32-elf-objcopy --weaken-symbol esp_app_desc ${build_dir}/esp-idf/app_update/libapp_update.a
VERBATIM
)
add_custom_command(
TARGET squeezelite.elf
PRE_LINK
COMMAND xtensa-esp32-elf-objcopy --weaken-symbol esp_app_desc ${build_dir}/esp-idf/app_update/libapp_update.a
VERBATIM
)