Browse Source

fixing the binary app_name for squeezelite

Sebastien 5 years ago
parent
commit
8a81fe821f

+ 8 - 1
CMakeLists.txt

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

+ 4 - 1
components/platform_console/CMakeLists.txt

@@ -7,6 +7,9 @@ idf_component_register( SRCS
 							platform_console.c
 						INCLUDE_DIRS .   
 						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 	)
 
+
+
+

+ 6 - 10
components/platform_console/app_recovery/CMakeLists.txt

@@ -1,13 +1,9 @@
 idf_component_register( SRC_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}>)
-#add_library(libcmd_squeezelite STATIC cmd_squeezelite.c )
-#__component_add_include_dirs(libcmd_squeezelite "${__INCLUDE_DIRS}" INTERFACE)
-#set_property(TARGET libcmd_squeezelite APPEND PROPERTY LINK_LIBRARIES console)
-#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>)						 
+ 
+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(recovery.c PROPERTIES COMPILE_DEFINITIONS "PROJECT_VER=\"${PROJECT_VER_CUT}\"; PROJECT_NAME=\"recovery\"")

+ 2 - 0
components/platform_console/app_recovery/application_name.h

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

+ 27 - 0
components/platform_console/app_recovery/recovery.c

@@ -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){
 	return 1;
 }

+ 12 - 3
components/platform_console/app_squeezelite/CMakeLists.txt

@@ -1,6 +1,15 @@
-idf_component_register( SRC_DIRS .
-						INCLUDE_DIRS .   
-						PRIV_REQUIRES console codecs squeezelite newlib pthread tools platform_config)
+ idf_build_get_property(idf_path IDF_PATH)
+idf_component_register( SRCS cmd_squeezelite.c 
+						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=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\"")
+
 

+ 2 - 0
components/platform_console/app_squeezelite/application_name.h

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

+ 26 - 1
components/platform_console/app_squeezelite/cmd_squeezelite.c

@@ -10,9 +10,34 @@
 #include "pthread.h"
 #include "platform_esp32.h"
 #include "platform_config.h"
-
+#include "esp_app_format.h"
 static const char * TAG = "squeezelite_cmd";
 #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);
 static int launchsqueezelite(int argc, char **argv);
 pthread_t thread_squeezelite;

+ 6 - 9
generate_debug_scripts.cmake

@@ -3,7 +3,7 @@ function(___output_debug_target bin_name )
 
     file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" cm_build_dir)
     if( "${bin_name}" STREQUAL "_" )
-    	set(debug_file "dbg_project_args" )
+    	set(debug_file "dbg_project" )
     else()
         set(debug_file "dbg_${bin_name}" )
     endif()
@@ -15,7 +15,7 @@ function(___output_debug_target bin_name )
     
 	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 "flushregs")
 	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}")
 	  		endif()	  		
 	  		
-			if( ( "${found_bin}" MATCHES "${bin_name}" ) )
-			   list(APPEND dbg_cmds "mon esp32 appoffset ${found_offset}") 	  
+			if( ( "${found_bin}" MATCHES "${bin_name}" ) AND NOT ( "${bin_name}" STREQUAL "_" ) )
+			   list(APPEND dbg_cmds "mon esp32 appimage_offset  ${found_offset}") 	  
 			endif()
 	  endif()
 	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_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_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}")
-	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}")
   
 

+ 63 - 21
squeezelite.cmake

@@ -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)
 	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_custom_target(${target_name}-flash ${target_name} "${target_name}")
 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)
 	idf_build_get_property(build_dir BUILD_DIR)
+	file(TO_CMAKE_PATH "${IDF_PATH}" idf_path)
+
 	set(target_elf ${target_name}.elf)
+
 	
 	# Create a dummy file to work around CMake requirement of having a source
 	# file while adding an executable
+	
 	set(target_elf_src ${CMAKE_BINARY_DIR}/${target_name}_src.c)
 	add_custom_command(OUTPUT ${target_elf_src}
+		BUILD
 		COMMAND ${CMAKE_COMMAND} -E touch ${target_elf_src}
 	    VERBATIM)
 	
@@ -28,20 +47,30 @@ function(___create_new_target target_name)
 	add_executable(${target_elf} "${target_elf_src}")
 	add_dependencies(${target_elf} _${target_name}_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})
-	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} idf::app_squeezelite)
 	set(target_name_mapfile "${target_name}.map")
 	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(
 			TARGET ${target_elf}
+			
 			POST_BUILD 
-	        COMMAND ${CMAKE_COMMAND} -E echo "Generated ${build_dir}/${target_name}.bin"
-		    #COMMAND echo ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${esptool_elf2image_args}
-		    #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"
+			COMMAND ${CMAKE_COMMAND} -E echo "Generating ${build_dir}/${target_name}.bin" 
+			COMMAND ${ESPTOOLPY} elf2image ${ESPTOOLPY_FLASH_OPTIONS} ${ESPTOOLPY_ELF2IMAGE_OPTIONS} -o "${build_dir}/${target_name}.bin" "${target_name}.elf"
 	        DEPENDS "${target_name}.elf" 
 	        WORKING_DIRECTORY ${build_dir}
 	        COMMENT "Generating binary image from built executable"
@@ -54,17 +83,30 @@ function(___create_new_target target_name)
 
 endfunction()
 
-
 ___create_new_target(squeezelite )
 ___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
 					BYPRODUCTS "flash_dbg_project_args"  
 					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)
 
+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
+)