Эх сурвалжийг харах

cmake: Set uninitialized variable warnings in ULP & bootloader subprojects

Fixes issue where PYTHON was not being expanded when running ulp_mapgen.py,
causing Windows launch setting to be used - reported here:
https://esp32.com/viewtopic.php?f=13&t=12640&p=50283#p50283
Angus Gratton 6 жил өмнө
parent
commit
f4ea7c5a46

+ 2 - 0
components/bootloader/project_include.cmake

@@ -97,6 +97,7 @@ idf_build_get_property(idf_path IDF_PATH)
 idf_build_get_property(idf_target IDF_TARGET)
 idf_build_get_property(sdkconfig SDKCONFIG)
 idf_build_get_property(python PYTHON)
+idf_build_get_property(extra_cmake_args EXTRA_CMAKE_ARGS)
 
 externalproject_add(bootloader
     SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/subproject"
@@ -109,6 +110,7 @@ externalproject_add(bootloader
                 # the bootloader common component requirements depends on this and
                 # config variables are not available before project() call.
                 -DLEGACY_INCLUDE_COMMON_HEADERS=${CONFIG_LEGACY_INCLUDE_COMMON_HEADERS}
+                ${EXTRA_CMAKE_ARGS}
     INSTALL_COMMAND ""
     BUILD_ALWAYS 1  # no easy way around this...
     BUILD_BYPRODUCTS ${bootloader_binary_files}

+ 5 - 1
components/ulp/cmake/toolchain-ulp.cmake

@@ -8,8 +8,12 @@ set(CMAKE_C_COMPILER "xtensa-esp32-elf-gcc")
 set(CMAKE_ASM_COMPILER "esp32ulp-elf-as")
 set(CMAKE_LINKER "esp32ulp-elf-ld")
 
+if(NOT ASM_DIALECT)
+    set(ASM_DIALECT "")
+endif()
+
 set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "${CMAKE_ASM${ASM_DIALECT}_COMPILER} \
                                     <DEFINES> <INCLUDES> -o <OBJECT> -c <SOURCE>")
 set(CMAKE_EXE_LINKER_FLAGS "-A elf32-esp32ulp -nostdlib" CACHE STRING "ULP Linker Base Flags")
 set(CMAKE_ASM_LINK_EXECUTABLE "${CMAKE_LINKER} <FLAGS> <CMAKE_ASM_LINK_FLAGS> \
-                                <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+                                <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")

+ 4 - 0
components/ulp/project_include.cmake

@@ -32,6 +32,8 @@ function(ulp_embed_binary app_name s_sources exp_dep_srcs)
         idf_build_get_property(sdkconfig_header SDKCONFIG_HEADER)
         idf_build_get_property(idf_path IDF_PATH)
         idf_build_get_property(python PYTHON)
+        idf_build_get_property(extra_cmake_args EXTRA_CMAKE_ARGS)
+
         externalproject_add(${app_name}
             SOURCE_DIR ${idf_path}/components/ulp/cmake
             BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${app_name}
@@ -45,6 +47,8 @@ function(ulp_embed_binary app_name s_sources exp_dep_srcs)
                         -DCOMPONENT_INCLUDES=$<TARGET_PROPERTY:${COMPONENT_TARGET},INTERFACE_INCLUDE_DIRECTORIES>
                         -DIDF_PATH=${idf_path}
                         -DSDKCONFIG=${SDKCONFIG_HEADER}
+                        -DPYTHON=${python}
+                        ${EXTRA_CMAKE_ARGS}
             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}

+ 11 - 0
tools/cmake/project.cmake

@@ -18,6 +18,17 @@ if(PYTHON_DEPS_CHECKED)
     idf_build_set_property(__CHECK_PYTHON 0)
 endif()
 
+# Store CMake arguments that need to be passed into all CMake sub-projects as well
+# (bootloader, ULP, etc)
+#
+# It's not possible to tell if CMake was called with --warn-uninitialized, so to also
+# have these warnings in sub-projects we set a cache variable as well and then check that.
+if(WARN_UNINITIALIZED)
+    idf_build_set_property(EXTRA_CMAKE_ARGS --warn-uninitialized)
+else()
+    idf_build_set_property(EXTRA_CMAKE_ARGS "")
+endif()
+
 # Initialize build target for this build using the environment variable or
 # value passed externally.
 __target_init()

+ 1 - 0
tools/idf.py

@@ -253,6 +253,7 @@ def _ensure_build_directory(args, always_run_cmake=False):
             ]
             if not args.no_warnings:
                 cmake_args += ["--warn-uninitialized"]
+                cmake_args += ["-DWARN_UNINITIALIZED=1"]
 
             if args.define_cache_entry:
                 cmake_args += ["-D" + d for d in args.define_cache_entry]