diff --git a/CMakeLists.txt b/CMakeLists.txt index 362c68984..2c6ef7621 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,13 @@ execute_process(COMMAND "${CMAKE_COMMAND}" -D "IDF_PATH=${IDF_PATH}" -D "DEBUG=${DEBUG}" -P "${IDF_PATH}/tools/cmake/scripts/expand_requirements.cmake" - WORKING_DIRECTORY "${PROJECT_PATH}") + 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") # diff --git a/docs/en/api-guides/build-system-cmake.rst b/docs/en/api-guides/build-system-cmake.rst index ac27d8e3d..31130a860 100644 --- a/docs/en/api-guides/build-system-cmake.rst +++ b/docs/en/api-guides/build-system-cmake.rst @@ -342,12 +342,14 @@ The following variables are set at the project level, but available for use in c - ``CONFIG_*``: Each value in the project configuration has a corresponding variable available in make. All names begin with ``CONFIG_``. :doc:`More information here `. - ``IDF_VER``: Git version of ESP-IDF (produced by ``git describe``) - ``IDF_TARGET``: Name of the target for which the project is being built. -- ``PROJECT_VER``: Project version. +- ``PROJECT_VER``: Project version. -* If ``PROJECT_VER`` variable set in project CMakeLists.txt file, its value will be used. -* Else, if the ``$PROJECT_PATH/version.txt`` exists, its contents will be used as ``PROJECT_VER``. -* Else, if the project is located inside a Git repository, the output of git describe will be used. -* Otherwise, ``PROJECT_VER`` will be "1". + * If ``PROJECT_VER`` variable set in project CMakeLists.txt file, its value will be used. + * Else, if the ``$PROJECT_PATH/version.txt`` exists, its contents will be used as ``PROJECT_VER``. + * Else, if the project is located inside a Git repository, the output of git describe will be used. + * Otherwise, ``PROJECT_VER`` will be "1". + +- ``ESP_PLATFORM``: Set to 1 whenever the ESP-IDF build system is being used. If you modify any of these variables inside ``CMakeLists.txt`` then this will not prevent other components from building but it may make your component hard to build and/or debug. @@ -903,6 +905,9 @@ import it from other projects. Studying the library's CMakeLists.txt and build s It is also possible to wrap a third-party library to be used as a component in this manner. For example, the :component:`mbedtls` component is a wrapper for Espressif's fork of `mbedtls `_. See its :component_file:`component CMakeLists.txt `. +The CMake variable ``ESP_PLATFORM`` is set to 1 whenever the ESP-IDF build system is being used. Tests such as ``if (ESP_PLATFORM)`` can be used in generic CMake code if special IDF-specific logic is required. + + Using ESP-IDF in Custom CMake Projects ====================================== diff --git a/tools/cmake/idf_functions.cmake b/tools/cmake/idf_functions.cmake index 7b389d342..3ea818ec8 100644 --- a/tools/cmake/idf_functions.cmake +++ b/tools/cmake/idf_functions.cmake @@ -62,6 +62,8 @@ macro(idf_set_variables) set(IDF_PROJECT_PATH "${CMAKE_SOURCE_DIR}") + set(ESP_PLATFORM 1 CACHE BOOL INTERNAL) + spaces2list(IDF_COMPONENT_DIRS) spaces2list(IDF_COMPONENTS) spaces2list(IDF_COMPONENT_REQUIRES_COMMON) diff --git a/tools/cmake/scripts/expand_requirements.cmake b/tools/cmake/scripts/expand_requirements.cmake index bcfa76aa4..5886e6320 100644 --- a/tools/cmake/scripts/expand_requirements.cmake +++ b/tools/cmake/scripts/expand_requirements.cmake @@ -33,6 +33,8 @@ cmake_minimum_required(VERSION 3.5) include("${IDF_PATH}/tools/cmake/utilities.cmake") include("${IDF_PATH}/tools/cmake/component_utils.cmake") +set(ESP_PLATFORM 1) + if(NOT DEPENDENCIES_FILE) message(FATAL_ERROR "DEPENDENCIES_FILE must be set.") endif() diff --git a/tools/idf.py b/tools/idf.py index 16086b4ec..5550fc430 100755 --- a/tools/idf.py +++ b/tools/idf.py @@ -165,7 +165,7 @@ def _ensure_build_directory(args, always_run_cmake=False): if args.generator is None: args.generator = detect_cmake_generator() try: - cmake_args = ["cmake", "-G", args.generator, "-DPYTHON_DEPS_CHECKED=1"] + cmake_args = ["cmake", "-G", args.generator, "-DPYTHON_DEPS_CHECKED=1", "-DESP_PLATFORM=1"] if not args.no_warnings: cmake_args += ["--warn-uninitialized"] if args.no_ccache: