From 7f29593a7dd95db0005203c347b46234d7ed1ec7 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Tue, 16 Jan 2018 16:50:15 +1100 Subject: [PATCH] cmake: Bootloader subproject & "clean" cleanup --- idf.cmake | 3 ++- tools/cmake/bootloader_subproject.cmake | 22 ++++++++++++++++++---- tools/cmake/idf_functions.cmake | 2 ++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/idf.cmake b/idf.cmake index c6cb99d7ae..efb4631d2c 100644 --- a/idf.cmake +++ b/idf.cmake @@ -12,11 +12,12 @@ if(NOT ( ${CMAKE_SYSTEM_NAME} STREQUAL "Generic" AND ${CMAKE_C_COMPILER} MATCHES "re-running cmake.") endif() -set(IDF_PATH $ENV{IDF_PATH}) +set(IDF_PATH "$ENV{IDF_PATH}") if(NOT IDF_PATH) # Documentation says you should set IDF_PATH in your environment, but we # can infer it here if it's not set. set(IDF_PATH ${CMAKE_CURRENT_LIST_DIR}) + set($ENV{IDF_PATH} "${IDF_PATH}") endif() # PROJECT_PATH has the path to the IDF project (top-level cmake directory) diff --git a/tools/cmake/bootloader_subproject.cmake b/tools/cmake/bootloader_subproject.cmake index 924a7ea77a..c141fadd34 100644 --- a/tools/cmake/bootloader_subproject.cmake +++ b/tools/cmake/bootloader_subproject.cmake @@ -2,12 +2,26 @@ # cmake project under this one # # +set(bootloader_subproject_build_dir "${CMAKE_BINARY_DIR}/bootloader_subproject") +set(bootloader_binary_files + "${bootloader_subproject_build_dir}/bootloader.elf" + "${bootloader_subproject_build_dir}/bootloader.bin" + "${bootloader_subproject_build_dir}/bootloader.map" + ) + ExternalProject_Add(bootloader_subproject # TODO: support overriding the bootloader in COMPONENT_PATHS - SOURCE_DIR ${IDF_PATH}/components/bootloader/subproject - BINARY_DIR ${CMAKE_BINARY_DIR}/bootloader_subproject - CMAKE_ARGS -DSDKCONFIG=${SDKCONFIG} -DIDF_PATH=${IDF_PATH} + SOURCE_DIR "${IDF_PATH}/components/bootloader/subproject" + BINARY_DIR "${bootloader_subproject_build_dir}" + CMAKE_ARGS -DSDKCONFIG=${SDKCONFIG} -DIDF_PATH="${IDF_PATH}" INSTALL_COMMAND "" + BUILD_ALWAYS 1 # no easy way around this... + BUILD_BYPRODUCTS ${bootloader_binary_files} ) - +# this is a hack due to an (annoying) shortcoming in cmake, it can't +# extend the 'clean' target to the external project +# see thread: https://cmake.org/pipermail/cmake/2016-December/064660.html +# +# So for now we just have the top-level build remove the final build products... +set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${bootloader_binary_files}) diff --git a/tools/cmake/idf_functions.cmake b/tools/cmake/idf_functions.cmake index 72216dfbfd..6da9780381 100644 --- a/tools/cmake/idf_functions.cmake +++ b/tools/cmake/idf_functions.cmake @@ -64,4 +64,6 @@ function(add_executable target) _add_executable(${ARGV}) target_link_libraries(${target} "-Wl,--gc-sections -Wl,--cref -Wl,--Map=${mapfile} -Wl,--start-group") + + set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${mapfile}") endfunction() -- 2.40.0