ulp: use cmake function to embed ulp binaries
This commit is contained in:
parent
e1a3dc50de
commit
4483724df8
|
@ -1,63 +1,18 @@
|
|||
if(NOT CMAKE_BUILD_EARLY_EXPANSION)
|
||||
spaces2list(ULP_S_SOURCES)
|
||||
foreach(ulp_s_source ${ULP_S_SOURCES})
|
||||
get_filename_component(ulp_s_source ${ulp_s_source} ABSOLUTE)
|
||||
list(APPEND ulp_s_sources ${ulp_s_source})
|
||||
endforeach()
|
||||
message(WARNING "Embedding ULP binary by including \
|
||||
${IDF_PATH}/components/ulp/component_ulp_common.cmake is deprecated. Use `ulp_embed_binary` instead. \
|
||||
See API Guide for more details.")
|
||||
|
||||
foreach(ulp_s_source ${ulp_s_sources})
|
||||
get_filename_component(ulp_ps_source ${ulp_s_source} NAME_WE)
|
||||
set(ulp_ps_output ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/${ulp_ps_source}.ulp.S)
|
||||
list(APPEND ulp_ps_sources ${ulp_ps_output})
|
||||
endforeach()
|
||||
spaces2list(ULP_S_SOURCES)
|
||||
spaces2list(ULP_EXP_DEP_SRCS)
|
||||
|
||||
set(ulp_artifacts_prefix ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/${ULP_APP_NAME})
|
||||
foreach(ulp_s_source ${ULP_S_SOURCES})
|
||||
get_filename_component(ulp_src ${ulp_s_source} ABSOLUTE BASE_DIR ${COMPONENT_DIR})
|
||||
list(APPEND ulp_srcs ${ulp_src})
|
||||
endforeach()
|
||||
|
||||
set(ulp_artifacts ${ulp_artifacts_prefix}.bin
|
||||
${ulp_artifacts_prefix}.ld
|
||||
${ulp_artifacts_prefix}.h)
|
||||
foreach(ulp_exp_dep_src ${ULP_EXP_DEP_SRCS})
|
||||
get_filename_component(ulp_dep_src ${ulp_exp_dep_src} ABSOLUTE BASE_DIR ${COMPONENT_DIR})
|
||||
list(APPEND ulp_dep_srcs ${ulp_dep_src})
|
||||
endforeach()
|
||||
|
||||
set(ulp_artifacts_extras ${ulp_artifacts_prefix}.map
|
||||
${ulp_artifacts_prefix}.sym
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/esp32.ulp.ld)
|
||||
|
||||
# Replace the separator for the list of ULP source files that will be passed to
|
||||
# the external ULP project. This is a workaround to the bug https://public.kitware.com/Bug/view.php?id=16137.
|
||||
string(REPLACE ";" "|" ulp_s_sources "${ulp_s_sources}")
|
||||
|
||||
idf_build_get_property(sdkconfig_header SDKCONFIG_HEADER)
|
||||
idf_build_get_property(idf_path IDF_PATH)
|
||||
idf_build_get_property(python PYTHON)
|
||||
externalproject_add(${ULP_APP_NAME}
|
||||
SOURCE_DIR ${idf_path}/components/ulp/cmake
|
||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}
|
||||
INSTALL_COMMAND ""
|
||||
CMAKE_ARGS -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
|
||||
-DCMAKE_TOOLCHAIN_FILE=${idf_path}/components/ulp/cmake/toolchain-ulp.cmake
|
||||
-DULP_S_SOURCES=${ulp_s_sources} -DULP_APP_NAME=${ULP_APP_NAME}
|
||||
-DCOMPONENT_DIR=${COMPONENT_DIR}
|
||||
# Even though this resolves to a ';' separated list, this is fine. This must be special behavior
|
||||
# for generator expressions.
|
||||
-DCOMPONENT_INCLUDES=$<TARGET_PROPERTY:${COMPONENT_LIB},INTERFACE_INCLUDE_DIRECTORIES>
|
||||
-DIDF_PATH=${idf_path}
|
||||
-DSDKCONFIG=${sdkconfig_header}
|
||||
-DPYTHON=${python}
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME} --target build
|
||||
BUILD_BYPRODUCTS ${ulp_artifacts} ${ulp_artifacts_extras} ${ulp_ps_sources}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/${ULP_APP_NAME}
|
||||
BUILD_ALWAYS 1
|
||||
LIST_SEPARATOR |
|
||||
)
|
||||
|
||||
spaces2list(ULP_EXP_DEP_SRCS)
|
||||
set_source_files_properties(${ULP_EXP_DEP_SRCS} PROPERTIES OBJECT_DEPENDS ${ulp_artifacts})
|
||||
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME})
|
||||
|
||||
add_custom_target(${ULP_APP_NAME}_artifacts DEPENDS ${ULP_APP_NAME})
|
||||
|
||||
add_dependencies(${COMPONENT_LIB} ${ULP_APP_NAME}_artifacts)
|
||||
|
||||
target_linker_script(${COMPONENT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/${ULP_APP_NAME}.ld)
|
||||
target_add_binary_data(${COMPONENT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${ULP_APP_NAME}/${ULP_APP_NAME}.bin BINARY)
|
||||
endif()
|
||||
ulp_embed_binary(${ULP_APP_NAME} ${ulp_srcs} ${ulp_dep_srcs})
|
||||
|
|
67
components/ulp/project_include.cmake
Normal file
67
components/ulp/project_include.cmake
Normal file
|
@ -0,0 +1,67 @@
|
|||
# ulp_embed_binary
|
||||
#
|
||||
# Create ULP binary and embed into the application.
|
||||
function(ulp_embed_binary app_name s_sources exp_dep_srcs)
|
||||
if(NOT CMAKE_BUILD_EARLY_EXPANSION)
|
||||
spaces2list(s_sources)
|
||||
foreach(source ${s_sources})
|
||||
get_filename_component(source ${source} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||
list(APPEND sources ${source})
|
||||
endforeach()
|
||||
|
||||
foreach(source ${sources})
|
||||
get_filename_component(ps_source ${source} NAME_WE)
|
||||
set(ps_output ${CMAKE_CURRENT_BINARY_DIR}/${app_name}/${ps_source}.ulp.S)
|
||||
list(APPEND ps_sources ${ps_output})
|
||||
endforeach()
|
||||
|
||||
set(ulp_artifacts_prefix ${CMAKE_CURRENT_BINARY_DIR}/${app_name}/${app_name})
|
||||
|
||||
set(ulp_artifacts ${ulp_artifacts_prefix}.bin
|
||||
${ulp_artifacts_prefix}.ld
|
||||
${ulp_artifacts_prefix}.h)
|
||||
|
||||
set(ulp_artifacts_extras ${ulp_artifacts_prefix}.map
|
||||
${ulp_artifacts_prefix}.sym
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${app_name}/esp32.ulp.ld)
|
||||
|
||||
# Replace the separator for the list of ULP source files that will be passed to
|
||||
# the external ULP project. This is a workaround to the bug https://public.kitware.com/Bug/view.php?id=16137.
|
||||
string(REPLACE ";" "|" ulp_s_sources "${ulp_s_sources}")
|
||||
|
||||
idf_build_get_property(sdkconfig_header SDKCONFIG_HEADER)
|
||||
idf_build_get_property(idf_path IDF_PATH)
|
||||
idf_build_get_property(python PYTHON)
|
||||
externalproject_add(${app_name}
|
||||
SOURCE_DIR ${idf_path}/components/ulp/cmake
|
||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${app_name}
|
||||
INSTALL_COMMAND ""
|
||||
CMAKE_ARGS -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
|
||||
-DCMAKE_TOOLCHAIN_FILE=${idf_path}/components/ulp/cmake/toolchain-ulp.cmake
|
||||
-DULP_S_SOURCES=${sources} -DULP_APP_NAME=${app_name}
|
||||
-DCOMPONENT_DIR=${COMPONENT_DIR}
|
||||
# Even though this resolves to a ';' separated list, this is fine. This must be special behavior
|
||||
# for generator expressions.
|
||||
-DCOMPONENT_INCLUDES=$<TARGET_PROPERTY:${COMPONENT_TARGET},INTERFACE_INCLUDE_DIRECTORIES>
|
||||
-DIDF_PATH=${idf_path}
|
||||
-DSDKCONFIG=${SDKCONFIG_HEADER}
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/${app_name} --target build
|
||||
BUILD_BYPRODUCTS ${ulp_artifacts} ${ulp_artifacts_extras} ${ulp_ps_sources}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${app_name}/${app_name}
|
||||
BUILD_ALWAYS 1
|
||||
LIST_SEPARATOR |
|
||||
)
|
||||
|
||||
spaces2list(exp_dep_srcs)
|
||||
set_source_files_properties(${exp_dep_srcs} PROPERTIES OBJECT_DEPENDS ${ulp_artifacts})
|
||||
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/${app_name})
|
||||
|
||||
add_custom_target(${app_name}_artifacts DEPENDS ${app_name})
|
||||
|
||||
add_dependencies(${COMPONENT_LIB} ${app_name}_artifacts)
|
||||
|
||||
target_linker_script(${COMPONENT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${app_name}/${app_name}.ld)
|
||||
target_add_binary_data(${COMPONENT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/${app_name}/${app_name}.bin BINARY)
|
||||
endif()
|
||||
endfunction()
|
|
@ -5,8 +5,7 @@ set(COMPONENT_REQUIRES unity ulp soc esp_common)
|
|||
|
||||
register_component()
|
||||
|
||||
set(ULP_APP_NAME ulp_test_app)
|
||||
set(ULP_S_SOURCES "ulp/test_jumps.S")
|
||||
set(ULP_EXP_DEP_SRCS "test_ulp_as.c")
|
||||
idf_build_get_property(idf_path IDF_PATH)
|
||||
include(${idf_path}/components/ulp/component_ulp_common.cmake)
|
||||
set(ulp_app_name ulp_test_app)
|
||||
set(ulp_s_sources "ulp/test_jumps.S")
|
||||
set(ulp_exp_dep_srcs "test_ulp_as.c")
|
||||
ulp_embed_binary(${ulp_app_name} ${ulp_s_sources} ${ulp_exp_dep_srcs})
|
||||
|
|
Loading…
Reference in a new issue