]> granicus.if.org Git - esp-idf/commitdiff
ulp: use cmake function to embed ulp binaries
authorRenz Christian Bagaporo <renz@espressif.com>
Mon, 4 Feb 2019 07:07:02 +0000 (15:07 +0800)
committerRenz Christian Bagaporo <renz@espressif.com>
Tue, 21 May 2019 12:00:06 +0000 (20:00 +0800)
components/ulp/component_ulp_common.cmake
components/ulp/project_include.cmake [new file with mode: 0644]
components/ulp/test/CMakeLists.txt

index 0d2ec262abcfa532187f32db314c13f5cc6b1b44..ce207f802f141e7a6d6486f32e7df96af395efa7 100644 (file)
@@ -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()
\ No newline at end of file
+ulp_embed_binary(${ULP_APP_NAME} ${ulp_srcs} ${ulp_dep_srcs})
diff --git a/components/ulp/project_include.cmake b/components/ulp/project_include.cmake
new file mode 100644 (file)
index 0000000..b5ac4c5
--- /dev/null
@@ -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()
\ No newline at end of file
index 20a82c897f0b64a896a067570fdfcc2c15141b93..296fda01483fb234e79bdbbfb672ceedbd9ca4fc 100644 (file)
@@ -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)
\ No newline at end of file
+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})