fix(build): fix passing CMAKE_<LANG>_FLAGS from ExternalProject_Add

This commit is contained in:
Alexey Lapshin
2026-03-13 17:23:11 +08:00
committed by BOT
parent 4bb6ab870c
commit 338cc50125
13 changed files with 115 additions and 4 deletions
@@ -0,0 +1,10 @@
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.22)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
# Trim the build. Include the minimal set of components, main, and anything it depends on.
set(COMPONENTS main)
project(external_project)
@@ -0,0 +1,2 @@
| Supported Targets | ESP32 | ESP32-C3 |
| ----------------- | ----- | -------- |
@@ -0,0 +1,19 @@
idf_component_register()
include(ExternalProject)
externalproject_add(ext_subproject
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/subproject
CMAKE_ARGS
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_C_FLAGS=-DEXTERNAL_PROJECT_FLAG=1
-DCMAKE_CXX_FLAGS=-DEXTERNAL_PROJECT_CXX_FLAG=1
-DCMAKE_ASM_FLAGS=-DEXTERNAL_PROJECT_ASM_FLAG=1
-DCMAKE_EXE_LINKER_FLAGS=-Wl,--defsym=EXTERNAL_PROJECT_LINKER_CHECK=1
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/subproject"
INSTALL_COMMAND ""
BUILD_BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/subproject/libext_lib.a"
)
add_prebuilt_library(ext_lib "${CMAKE_CURRENT_BINARY_DIR}/subproject/libext_lib.a")
target_link_libraries(${COMPONENT_LIB} INTERFACE ext_lib)
@@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.22)
project(ext_subproject LANGUAGES C CXX ASM)
add_library(ext_lib STATIC check_flag.c check_flag.cpp check_flag.S)
add_executable(ext_link_test link_check.c)
target_link_libraries(ext_link_test PRIVATE ext_lib)
@@ -0,0 +1,9 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#ifndef EXTERNAL_PROJECT_ASM_FLAG
#error "EXTERNAL_PROJECT_ASM_FLAG not defined - toolchain did not preserve CMAKE_ASM_FLAGS from ExternalProject_Add"
#endif
@@ -0,0 +1,9 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#ifndef EXTERNAL_PROJECT_FLAG
#error "EXTERNAL_PROJECT_FLAG not defined - toolchain did not preserve CMAKE_C_FLAGS from ExternalProject_Add"
#endif
@@ -0,0 +1,9 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#ifndef EXTERNAL_PROJECT_CXX_FLAG
#error "EXTERNAL_PROJECT_CXX_FLAG not defined - toolchain did not preserve CMAKE_CXX_FLAGS from ExternalProject_Add"
#endif
@@ -0,0 +1,11 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
extern char EXTERNAL_PROJECT_LINKER_CHECK;
int _start(void)
{
return (int)&EXTERNAL_PROJECT_LINKER_CHECK;
}
@@ -0,0 +1,2 @@
idf_component_register(SRCS "test_main.c"
REQUIRES ext_component)
@@ -0,0 +1,12 @@
/*
* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#include <stdio.h>
void app_main(void)
{
printf("external_project test OK\n");
}