Skip to content

Commit

Permalink
build system: explicitly disable LTO plugin
Browse files Browse the repository at this point in the history
... 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 #3989
  • Loading branch information
igrr committed Nov 26, 2019
1 parent 9e49a5d commit f49a78d
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)

Expand Down
5 changes: 5 additions & 0 deletions tools/cmake/build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand Down

0 comments on commit f49a78d

Please sign in to comment.