]> granicus.if.org Git - esp-idf/commitdiff
cmake: fix variable scope issues
authorRenz Christian Bagaporo <renz@espressif.com>
Thu, 9 May 2019 09:39:11 +0000 (17:39 +0800)
committerbot <bot@espressif.com>
Fri, 13 Sep 2019 01:32:50 +0000 (01:32 +0000)
CMakeLists.txt
tools/cmake/idf_functions.cmake

index 2c6ef7621fd2986fe94b8956252e2c0743cc4809..cb7956db4d47abbf02a8662dff42e244e43d22bf 100644 (file)
@@ -1,108 +1,6 @@
 cmake_minimum_required(VERSION 3.5)
 project(esp-idf C CXX ASM)
 
-if(NOT IDF_PATH)
-    set(IDF_PATH ${CMAKE_CURRENT_LIST_DIR})
-endif()
-
-include(tools/cmake/idf_functions.cmake)
-
-#
-# Set variables that control the build configuration and the build itself
-#
-idf_set_variables()
-
-kconfig_set_variables()
-
-#
-# Generate a component dependencies file, enumerating components to be included in the build
-# as well as their dependencies.
-#
-execute_process(COMMAND "${CMAKE_COMMAND}"
-    -D "COMPONENTS=${IDF_COMPONENTS}"
-    -D "COMPONENT_REQUIRES_COMMON=${IDF_COMPONENT_REQUIRES_COMMON}"
-    -D "EXCLUDE_COMPONENTS=${IDF_EXCLUDE_COMPONENTS}"
-    -D "TEST_COMPONENTS=${IDF_TEST_COMPONENTS}"
-    -D "TEST_EXCLUDE_COMPONENTS=${IDF_TEST_EXCLUDE_COMPONENTS}"
-    -D "BUILD_TESTS=${IDF_BUILD_TESTS}"
-    -D "DEPENDENCIES_FILE=${CMAKE_BINARY_DIR}/component_depends.cmake"
-    -D "COMPONENT_DIRS=${IDF_COMPONENT_DIRS}"
-    -D "BOOTLOADER_BUILD=${BOOTLOADER_BUILD}"
-    -D "IDF_TARGET=${IDF_TARGET}"
-    -D "IDF_PATH=${IDF_PATH}"
-    -D "DEBUG=${DEBUG}"
-    -P "${IDF_PATH}/tools/cmake/scripts/expand_requirements.cmake"
-    WORKING_DIRECTORY "${PROJECT_PATH}"
-    RESULT_VARIABLE expand_requirements_result)
-
-if(expand_requirements_result)
-    message(FATAL_ERROR "Failed to expand component requirements")
-endif()
-
-include("${CMAKE_BINARY_DIR}/component_depends.cmake")
-
-#
-# We now have the following component-related variables:
-#
-# IDF_COMPONENTS is the list of initial components set by the user
-# (or empty to include all components in the build).
-# BUILD_COMPONENTS is the list of components to include in the build.
-# BUILD_COMPONENT_PATHS is the paths to all of these components, obtained from the component dependencies file.
-#
-# Print the list of found components and test components
-#
-string(REPLACE ";" " " BUILD_COMPONENTS_SPACES "${BUILD_COMPONENTS}")
-message(STATUS "Component names: ${BUILD_COMPONENTS_SPACES}")
-unset(BUILD_COMPONENTS_SPACES)
-message(STATUS "Component paths: ${BUILD_COMPONENT_PATHS}")
-
-# Print list of test components
-if(TESTS_ALL EQUAL 1 OR TEST_COMPONENTS)
-    string(REPLACE ";" " " BUILD_TEST_COMPONENTS_SPACES "${BUILD_TEST_COMPONENTS}")
-    message(STATUS "Test component names: ${BUILD_TEST_COMPONENTS_SPACES}")
-    unset(BUILD_TEST_COMPONENTS_SPACES)
-    message(STATUS "Test component paths: ${BUILD_TEST_COMPONENT_PATHS}")
-endif()
-
-# Generate project configuration
-kconfig_process_config()
-
-# Include sdkconfig.cmake so rest of the build knows the configuration
-include(${SDKCONFIG_CMAKE})
-
-# Verify the environment is configured correctly
-idf_verify_environment()
-
-# Check git revision (may trigger reruns of cmake)
-##  sets IDF_VER to IDF git revision
-idf_get_git_revision()
-
-# Check that the targets set in cache, sdkconfig, and in environment all match
-idf_check_config_target()
-
-## get PROJECT_VER
-if(NOT BOOTLOADER_BUILD)
-    app_get_revision("${CMAKE_SOURCE_DIR}")
-endif()
-
-# Add some idf-wide definitions
-idf_set_global_compile_options()
-
-# generate compile_commands.json (needs to come after project)
-set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
-
-#
-# Setup variables for linker script generation
-#
-ldgen_set_variables()
-
-# Include any top-level project_include.cmake files from components
-foreach(component ${BUILD_COMPONENT_PATHS})
-    set(COMPONENT_PATH "${component}")
-    include_if_exists("${component}/project_include.cmake")
-    unset(COMPONENT_PATH)
-endforeach()
-
 #
 # Add each component to the build as a library
 #
@@ -144,18 +42,4 @@ foreach(component ${BUILD_COMPONENTS})
             add_component_dependencies(${component_target} ${dep_target} PRIVATE)
         endforeach()
     endif()
-endforeach()
-
-if(IDF_BUILD_ARTIFACTS)
-    # Write project description JSON file
-    make_json_list("${BUILD_COMPONENTS}" build_components_json)
-    make_json_list("${BUILD_COMPONENT_PATHS}" build_component_paths_json)
-    configure_file("${IDF_PATH}/tools/cmake/project_description.json.in"
-        "${IDF_BUILD_ARTIFACTS_DIR}/project_description.json")
-    unset(build_components_json)
-    unset(build_component_paths_json)
-endif()
-
-set(BUILD_COMPONENTS ${BUILD_COMPONENTS} PARENT_SCOPE)
-
-ldgen_add_dependencies()
+endforeach()
\ No newline at end of file
index 01035a0b17f9c4cfce37095a26c8b9c70f6470ec..bc32ac2173d8ce3ad887a05a9759adf26be7dc12 100644 (file)
@@ -305,7 +305,116 @@ endfunction()
 # idf_import_components
 #
 # Adds ESP-IDF as a subdirectory to the current project and imports the components
-function(idf_import_components var idf_path build_path)
+macro(idf_import_components var idf_path build_path)
+    #
+    # Set variables that control the build configuration and the build itself
+    #
+    idf_set_variables()
+
+    kconfig_set_variables()
+
+    #
+    # Generate a component dependencies file, enumerating components to be included in the build
+    # as well as their dependencies.
+    #
+    execute_process(COMMAND "${CMAKE_COMMAND}"
+        -D "COMPONENTS=${IDF_COMPONENTS}"
+        -D "COMPONENT_REQUIRES_COMMON=${IDF_COMPONENT_REQUIRES_COMMON}"
+        -D "EXCLUDE_COMPONENTS=${IDF_EXCLUDE_COMPONENTS}"
+        -D "TEST_COMPONENTS=${IDF_TEST_COMPONENTS}"
+        -D "TEST_EXCLUDE_COMPONENTS=${IDF_TEST_EXCLUDE_COMPONENTS}"
+        -D "BUILD_TESTS=${IDF_BUILD_TESTS}"
+        -D "DEPENDENCIES_FILE=${CMAKE_BINARY_DIR}/component_depends.cmake"
+        -D "COMPONENT_DIRS=${IDF_COMPONENT_DIRS}"
+        -D "BOOTLOADER_BUILD=${BOOTLOADER_BUILD}"
+        -D "IDF_TARGET=${IDF_TARGET}"
+        -D "IDF_PATH=${IDF_PATH}"
+        -D "DEBUG=${DEBUG}"
+        -P "${IDF_PATH}/tools/cmake/scripts/expand_requirements.cmake"
+        WORKING_DIRECTORY "${PROJECT_PATH}"
+        RESULT_VARIABLE expand_requirements_result)
+
+    if(expand_requirements_result)
+        message(FATAL_ERROR "Failed to expand component requirements")
+    endif()
+
+    include("${CMAKE_BINARY_DIR}/component_depends.cmake")
+
+    #
+    # We now have the following component-related variables:
+    #
+    # IDF_COMPONENTS is the list of initial components set by the user
+    # (or empty to include all components in the build).
+    # BUILD_COMPONENTS is the list of components to include in the build.
+    # BUILD_COMPONENT_PATHS is the paths to all of these components, obtained from the component dependencies file.
+    #
+    # Print the list of found components and test components
+    #
+    string(REPLACE ";" " " BUILD_COMPONENTS_SPACES "${BUILD_COMPONENTS}")
+    message(STATUS "Component names: ${BUILD_COMPONENTS_SPACES}")
+    unset(BUILD_COMPONENTS_SPACES)
+    message(STATUS "Component paths: ${BUILD_COMPONENT_PATHS}")
+
+    # Print list of test components
+    if(TESTS_ALL EQUAL 1 OR TEST_COMPONENTS)
+        string(REPLACE ";" " " BUILD_TEST_COMPONENTS_SPACES "${BUILD_TEST_COMPONENTS}")
+        message(STATUS "Test component names: ${BUILD_TEST_COMPONENTS_SPACES}")
+        unset(BUILD_TEST_COMPONENTS_SPACES)
+        message(STATUS "Test component paths: ${BUILD_TEST_COMPONENT_PATHS}")
+    endif()
+
+    # Generate project configuration
+    kconfig_process_config()
+
+    # Include sdkconfig.cmake so rest of the build knows the configuration
+    include(${SDKCONFIG_CMAKE})
+
+    # Verify the environment is configured correctly
+    idf_verify_environment()
+
+    # Check git revision (may trigger reruns of cmake)
+    ##  sets IDF_VER to IDF git revision
+    idf_get_git_revision()
+
+    # Check that the targets set in cache, sdkconfig, and in environment all match
+    idf_check_config_target()
+
+    ## get PROJECT_VER
+    if(NOT BOOTLOADER_BUILD)
+        app_get_revision("${CMAKE_SOURCE_DIR}")
+    endif()
+
+    # Add some idf-wide definitions
+    idf_set_global_compile_options()
+
+    # generate compile_commands.json (needs to come after project)
+    set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+
+    #
+    # Setup variables for linker script generation
+    #
+    ldgen_set_variables()
+
+    # Include any top-level project_include.cmake files from components
+    foreach(component ${BUILD_COMPONENT_PATHS})
+        set(COMPONENT_PATH "${component}")
+        include_if_exists("${component}/project_include.cmake")
+        unset(COMPONENT_PATH)
+    endforeach()
+
     add_subdirectory(${idf_path} ${build_path})
-    set(${var} ${BUILD_COMPONENTS} PARENT_SCOPE)
-endfunction()
+
+    if(IDF_BUILD_ARTIFACTS)
+        # Write project description JSON file
+        make_json_list("${BUILD_COMPONENTS}" build_components_json)
+        make_json_list("${BUILD_COMPONENT_PATHS}" build_component_paths_json)
+        configure_file("${IDF_PATH}/tools/cmake/project_description.json.in"
+            "${IDF_BUILD_ARTIFACTS_DIR}/project_description.json")
+        unset(build_components_json)
+        unset(build_component_paths_json)
+    endif()
+
+    ldgen_add_dependencies()
+
+    set(${var} ${BUILD_COMPONENTS})
+endmacro()