forked from sle118/squeezelite-esp32
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsqueezelite.cmake
More file actions
157 lines (127 loc) · 6.43 KB
/
Copy pathsqueezelite.cmake
File metadata and controls
157 lines (127 loc) · 6.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
function(___register_flash partition_name sub_type)
message(STATUS "Adding new build target (from build folder): ninja ${partition_name}-flash")
partition_table_get_partition_info(otaapp_offset "--partition-type app --partition-subtype ${sub_type}" "offset")
esptool_py_flash_project_args(${partition_name} ${otaapp_offset} ${build_dir}/${partition_name}.bin FLASH_IN_PROJECT )
esptool_py_custom_target(${partition_name}-flash ${partition_name} "${build_dir}/${partition_name}.bin")
## IDF-V4.2+ idf_component_get_property(main_args esptool_py FLASH_ARGS)
## IDF-V4.2+ idf_component_get_property(sub_args esptool_py FLASH_SUB_ARGS)
## IDF-V4.2+ esptool_py_flash_target(${target_name}-flash "${main_args}" "${sub_args}")
## IDF-V4.2+ esptool_py_flash_target_image(${target_name}-flash ${target_name} "${otaapp_offset}" "${build_dir}/${target_name}.bin")
## IDF-V4.2+ esptool_py_flash_target_image(flash ${target_name} "${otaapp_offset}" "${build_dir}/${target_name}.bin")
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)
idf_build_get_property(python PYTHON)
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)
add_custom_target(_${target_name}_elf DEPENDS "${target_elf_src}" )
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_PREFIX app_${target_name})
set(ESPTOOLPY_ELF2IMAGE_OPTIONS --elf-sha256-offset 0xb0)
# 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 "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"
VERBATIM
)
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY
ADDITIONAL_MAKE_CLEAN_FILES
"${build_dir}/${target_name_mapfile}" "${build_dir}/${target_elf_src}" )
set(idf_size ${python} ${IDF_PATH}/tools/idf_size.py)
if(DEFINED OUTPUT_JSON AND OUTPUT_JSON)
list(APPEND idf_size "--json")
endif()
# Add size targets, depend on map file, run idf_size.py
message(STATUS "Adding new build target (from build folder): ninja size-${target_name}")
add_custom_target(size-${target_name}
DEPENDS ${target_elf}
COMMAND ${idf_size} ${target_name_mapfile}
)
message(STATUS "Adding new build target (from build folder): ninja size-files-${target_name}")
add_custom_target(size-files-${target_name}
DEPENDS ${target_elf}
COMMAND ${idf_size} --files ${target_name_mapfile}
)
message(STATUS "Adding new build target (from build folder): ninja size-components-${target_name}")
add_custom_target(size-components-${target_name}
DEPENDS ${target_elf}
COMMAND ${idf_size} --archives ${target_name_mapfile}
)
unset(idf_size)
endfunction()
___create_new_target(squeezelite )
___register_flash(squeezelite ota_0)
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} --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
# COMMAND xtensa-esp32-elf-objcopy --strip-symbol start_ota ${build_dir}/esp-idf/app_squeezelite/libapp_squeezelite.a
## IDF-V4.2+ COMMAND xtensa-esp32-elf-objcopy --weaken-symbol main ${build_dir}/esp-idf/squeezelite/libsqueezelite.a
COMMAND xtensa-esp32-elf-objcopy --globalize-symbol find_command_by_name ${build_dir}/esp-idf/console/libconsole.a
VERBATIM
)
add_custom_command(
TARGET squeezelite.elf
PRE_LINK
# COMMAND xtensa-esp32-elf-objcopy --strip-symbol start_ota ${build_dir}/esp-idf/app_recovery/libapp_recovery.a
COMMAND xtensa-esp32-elf-objcopy --weaken-symbol esp_app_desc ${build_dir}/esp-idf/app_update/libapp_update.a
COMMAND xtensa-esp32-elf-objcopy --globalize-symbol find_command_by_name ${build_dir}/esp-idf/console/libconsole.a
## IDF-V4.2+ COMMAND xtensa-esp32-elf-objcopy --weaken-symbol main ${build_dir}/esp-idf/app_recovery/libapp_recovery.a
VERBATIM
)