From f49a78d54312bad611d22a67ecdd302f377ddd4b Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 20 Nov 2019 14:18:28 +0100 Subject: [PATCH] build system: explicitly disable LTO plugin ... to reduce the number of simultaneously open files at link time. When plugin support is enabled in the linker, BFD's (and the corresponding file handles) are cached for the plugin to use. This results in quite a large number of simultaneously open files, which hits the default limit on macOS (256 files). Since we aren't using LTO now, disable it explicitly when invoking the linker. Closes IDF-923 Closes IDFGH-1764 Closes https://github.com/espressif/esp-idf/issues/3989 --- CMakeLists.txt | 3 +++ tools/cmake/build.cmake | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b01b4ec10..fc16b82c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ unset(compile_options) unset(c_compile_options) unset(cxx_compile_options) unset(compile_definitions) +unset(link_options) # Add the following build specifications here, since these seem to be dependent # on config values on the root Kconfig. @@ -62,11 +63,13 @@ elseif(CONFIG_COMPILER_STACK_CHECK_MODE_ALL) list(APPEND compile_options "-fstack-protector-all") endif() +list(APPEND link_options "-fno-lto") idf_build_set_property(COMPILE_OPTIONS "${compile_options}" APPEND) idf_build_set_property(C_COMPILE_OPTIONS "${c_compile_options}" APPEND) idf_build_set_property(CXX_COMPILE_OPTIONS "${cxx_compile_options}" APPEND) idf_build_set_property(COMPILE_DEFINITIONS "${compile_definitions}" APPEND) +idf_build_set_property(LINK_OPTIONS "${link_options}" APPEND) idf_build_get_property(build_component_targets __BUILD_COMPONENT_TARGETS) diff --git a/tools/cmake/build.cmake b/tools/cmake/build.cmake index 2edde052c..517fdf8aa 100644 --- a/tools/cmake/build.cmake +++ b/tools/cmake/build.cmake @@ -460,6 +460,11 @@ endmacro() # files used for linking, targets which should execute before creating the specified executable, # generating additional binary files, generating files related to flashing, etc.) function(idf_build_executable elf) + # Set additional link flags for the executable + idf_build_get_property(link_options LINK_OPTIONS) + # Using LINK_LIBRARIES here instead of LINK_OPTIONS, as the latter is not in CMake 3.5. + set_property(TARGET ${elf} APPEND PROPERTY LINK_LIBRARIES "${link_options}") + # Propagate link dependencies from component library targets to the executable idf_build_get_property(link_depends __LINK_DEPENDS) set_property(TARGET ${elf} APPEND PROPERTY LINK_DEPENDS "${link_depends}")