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
#
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
# 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()