mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 19:54:32 +02:00
Merge branch 'fix/linux_std_flags_v5.4' into 'release/v5.4'
fix(build): don't call enable_language() before project() (v5.4) See merge request espressif/esp-idf!37880
This commit is contained in:
@@ -148,6 +148,16 @@ function(__build_set_default_build_specifications)
|
|||||||
# always generate debug symbols (even in release mode, these don't
|
# always generate debug symbols (even in release mode, these don't
|
||||||
# go into the final binary so have no impact on size
|
# go into the final binary so have no impact on size
|
||||||
"-ggdb")
|
"-ggdb")
|
||||||
|
if(NOT IDF_TARGET STREQUAL "linux")
|
||||||
|
# Building for chip targets: we use a known version of the toolchain.
|
||||||
|
# Use latest supported versions.
|
||||||
|
# For Linux target -std settings, refer to the __linux_build_set_lang_version
|
||||||
|
# function, which must be called after project().
|
||||||
|
# Please update docs/en/api-guides/c.rst, docs/en/api-guides/cplusplus.rst and
|
||||||
|
# tools/test_apps/system/cxx_build_test/main/test_cxx_standard.cpp when changing this.
|
||||||
|
list(APPEND c_compile_options "-std=gnu17")
|
||||||
|
list(APPEND cxx_compile_options "-std=gnu++2b")
|
||||||
|
endif()
|
||||||
|
|
||||||
idf_build_set_property(COMPILE_DEFINITIONS "${compile_definitions}" APPEND)
|
idf_build_set_property(COMPILE_DEFINITIONS "${compile_definitions}" APPEND)
|
||||||
idf_build_set_property(COMPILE_OPTIONS "${compile_options}" APPEND)
|
idf_build_set_property(COMPILE_OPTIONS "${compile_options}" APPEND)
|
||||||
@@ -155,47 +165,48 @@ function(__build_set_default_build_specifications)
|
|||||||
idf_build_set_property(CXX_COMPILE_OPTIONS "${cxx_compile_options}" APPEND)
|
idf_build_set_property(CXX_COMPILE_OPTIONS "${cxx_compile_options}" APPEND)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(__build_set_lang_version)
|
function(__linux_build_set_lang_version)
|
||||||
|
# This must be called after the project() function when languages are
|
||||||
|
# enabled in CMake. Refer to
|
||||||
|
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#languages
|
||||||
|
# for more information. We use language-specific functions such as
|
||||||
|
# check_c_compiler_flag here. Remember, we cannot use enable_language()
|
||||||
|
# because it must not be invoked before the first call to project().
|
||||||
|
# Refer to policy CMP0165 for more details.
|
||||||
if(NOT IDF_TARGET STREQUAL "linux")
|
if(NOT IDF_TARGET STREQUAL "linux")
|
||||||
# Building for chip targets: we use a known version of the toolchain.
|
return()
|
||||||
# Use latest supported versions.
|
endif()
|
||||||
# Please update docs/en/api-guides/c.rst, docs/en/api-guides/cplusplus.rst and
|
|
||||||
# tools/test_apps/system/cxx_build_test/main/test_cxx_standard.cpp when changing this.
|
|
||||||
set(c_std gnu17)
|
|
||||||
set(cxx_std gnu++2b)
|
|
||||||
else()
|
|
||||||
enable_language(C CXX)
|
|
||||||
# Building for Linux target, fall back to an older version of the standard
|
|
||||||
# if the preferred one is not supported by the compiler.
|
|
||||||
set(preferred_c_versions gnu17 gnu11 gnu99)
|
|
||||||
set(ver_found FALSE)
|
|
||||||
foreach(c_version ${preferred_c_versions})
|
|
||||||
check_c_compiler_flag("-std=${c_version}" ver_${c_version}_supported)
|
|
||||||
if(ver_${c_version}_supported)
|
|
||||||
set(c_std ${c_version})
|
|
||||||
set(ver_found TRUE)
|
|
||||||
break()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
if(NOT ver_found)
|
|
||||||
message(FATAL_ERROR "Failed to set C language standard to one of the supported versions: "
|
|
||||||
"${preferred_c_versions}. Please upgrade the host compiler.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(preferred_cxx_versions gnu++2b gnu++20 gnu++2a gnu++17 gnu++14)
|
# Building for Linux target, fall back to an older version of the standard
|
||||||
set(ver_found FALSE)
|
# if the preferred one is not supported by the compiler.
|
||||||
foreach(cxx_version ${preferred_cxx_versions})
|
set(preferred_c_versions gnu17 gnu11 gnu99)
|
||||||
check_cxx_compiler_flag("-std=${cxx_version}" ver_${cxx_version}_supported)
|
set(ver_found FALSE)
|
||||||
if(ver_${cxx_version}_supported)
|
foreach(c_version ${preferred_c_versions})
|
||||||
set(cxx_std ${cxx_version})
|
check_c_compiler_flag("-std=${c_version}" ver_${c_version}_supported)
|
||||||
set(ver_found TRUE)
|
if(ver_${c_version}_supported)
|
||||||
break()
|
set(c_std ${c_version})
|
||||||
endif()
|
set(ver_found TRUE)
|
||||||
endforeach()
|
break()
|
||||||
if(NOT ver_found)
|
|
||||||
message(FATAL_ERROR "Failed to set C++ language standard to one of the supported versions: "
|
|
||||||
"${preferred_cxx_versions}. Please upgrade the host compiler.")
|
|
||||||
endif()
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(NOT ver_found)
|
||||||
|
message(FATAL_ERROR "Failed to set C language standard to one of the supported versions: "
|
||||||
|
"${preferred_c_versions}. Please upgrade the host compiler.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(preferred_cxx_versions gnu++2b gnu++20 gnu++2a gnu++17 gnu++14)
|
||||||
|
set(ver_found FALSE)
|
||||||
|
foreach(cxx_version ${preferred_cxx_versions})
|
||||||
|
check_cxx_compiler_flag("-std=${cxx_version}" ver_${cxx_version}_supported)
|
||||||
|
if(ver_${cxx_version}_supported)
|
||||||
|
set(cxx_std ${cxx_version})
|
||||||
|
set(ver_found TRUE)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(NOT ver_found)
|
||||||
|
message(FATAL_ERROR "Failed to set C++ language standard to one of the supported versions: "
|
||||||
|
"${preferred_cxx_versions}. Please upgrade the host compiler.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
idf_build_set_property(C_COMPILE_OPTIONS "-std=${c_std}" APPEND)
|
idf_build_set_property(C_COMPILE_OPTIONS "-std=${c_std}" APPEND)
|
||||||
@@ -241,7 +252,6 @@ function(__build_init idf_path)
|
|||||||
idf_build_set_property(IDF_COMPONENT_MANAGER 0)
|
idf_build_set_property(IDF_COMPONENT_MANAGER 0)
|
||||||
|
|
||||||
__build_set_default_build_specifications()
|
__build_set_default_build_specifications()
|
||||||
__build_set_lang_version()
|
|
||||||
|
|
||||||
# Add internal components to the build
|
# Add internal components to the build
|
||||||
idf_build_get_property(idf_path IDF_PATH)
|
idf_build_get_property(idf_path IDF_PATH)
|
||||||
|
@@ -569,6 +569,7 @@ macro(project project_name)
|
|||||||
|
|
||||||
# The actual call to project()
|
# The actual call to project()
|
||||||
__project(${project_name} C CXX ASM)
|
__project(${project_name} C CXX ASM)
|
||||||
|
__linux_build_set_lang_version()
|
||||||
|
|
||||||
# Generate compile_commands.json (needs to come after project call).
|
# Generate compile_commands.json (needs to come after project call).
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
Reference in New Issue
Block a user