mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-06 11:36:59 +03:00
fixing the binary app_name for squeezelite
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>)
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#pragma once
|
||||||
|
#define PROJECT_NAME "recovery"
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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\"")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#pragma once
|
||||||
|
#define PROJECT_NAME "squeezelite"
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user