Tag / linker

  • December 1, 2016 - Tom Hacohen

    Improving Debug Code Performance in EFL

    I work on EFL, a cross-platform graphical toolkit written in C. I recently decided to improve one aspect of the experience for developers using the API (otherwise known as users) by making EFL provide more information and stricter sanity checks when developing and debugging applications. A key requirement was ease of use. With these requirements, the solution was obvious, unfortunately obvious solutions don’t always work as well as you expect. The Obvious Solution: an Environment Variable Using an environment variable sounds like a good idea, but it comes with one major, unacceptable flaw: a significant performance impact. Unfortunately, one of the places we wanted to collect debug information was Eo, a hot-path in EFL. Believe it or not, adding a simple check to see if debug-mode is enabled was enough to degrade performance. To illustrate, consider the following code: Note: thanks to Krister Walfridsson for pointing out a mistake in […]

    Read More
  • June 17, 2015 - Tilmann Scheller

    A Conclusion to Accelerating Your Build with Clang

    This is the second part of a series that explores improving the build process using Clang. This post will take a look at the remaining methods for speeding up the build and will conclude with an overall summary of the improved speeds. To read an introduction to this experiment as well as the build system we are using, take a look at part one of this series. Here is our list of ideas again: Generic: Build with Clang rather than GCC Use a faster linker, such as GNU gold Optimize our host compiler binary aggressively (LTO, PGO, LTO+PGO) Move parts of the debug info into separate files: split DWARF Use Ninja rather than GNU make in CMake-based projects Cache object files with ccache Use a shared library build instead of a static build for incremental debug builds Clang/LLVM-specific: Optimize TableGen for debug builds Build less: e.g. build only the backends we […]

    Read More
  • Building software is a time-consuming task, especially if you are working on large codebases such as Clang and LLVM (2.5M C++ lines combined). As an LLVM developer, a significant portion of my time is spent building the software because a clean build take several minutes to complete. The work outlined in this series started out as an experiment to see by how much we could speed up the build process by using different tools or build settings rather than simply upgrading our hardware, and the goal is to squeeze as much performance out of the toolchain as possible. The focus is on building Clang/LLVM, however most of the results and corresponding suggestions will apply to other large C++ projects as well, and this post expands on a lightning talk I recently gave at the EuroLLVM 2015 conference. Taking a Look at the Options So what can we actually do to speed up […]

    Read More