Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs on enabling LTO (-flto) with clang++ #22

Open
springmeyer opened this issue May 4, 2017 · 4 comments
Open

Docs on enabling LTO (-flto) with clang++ #22

springmeyer opened this issue May 4, 2017 · 4 comments

Comments

@springmeyer
Copy link
Contributor

springmeyer commented May 4, 2017

Getting Link Time optimization working takes certain combinations of modern tools and build settings. It would be great to have some general docs on this so that LTO is demystified and more commonly used.

Doc should cover:

Linux details

  • upgraded binutils gold (can be installed via mason)
  • at least clang++ 3.9.1 via mason
  • llvm-ar and llvm-ranlib on path (and set in environment AR=/path/to/llvm-ar RANLIB=/path/to/llvm-ranlib)
  • -flto in the CXXFLAGS

OS X details

  • Apple built in compiler or clang++ via mason
  • -flto in the CXXFLAGS and LDFLAGS

Troubleshooting:

This error indicates that the linker does not understand the LTO format. This will happen on linux if you've not installed binutils from mason.

file.o: file not recognized: File format not recognized
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)

Refs mapbox/spatial-algorithms#10

@daniel-j-h
Copy link
Contributor

Flagging: CMake's interprocedural optimization property does not enable lto on gcc and clang - it only does so for the Intel compiler. I ran into this some time ago since it looks fitting. Something to look out for.

Related: maybe a note or two about how to check cxxflags and ldflags in CMake's generated files would be great for debugging - I think the files are called CMakeFiles/TARGET.dir/{flags.make,link.txt}.

@springmeyer
Copy link
Contributor Author

springmeyer commented Feb 27, 2018

per mapbox/carmen-cache#117 (comment) also we need to ensure the same clang++ major version is used to compile all binaries and libraries" otherwise you'll see an error like:

LLVM gold plugin has failed to create LTO module:
  Invalid value (Producer: 'LLVM5.0.0git-30c4647' Reader: 'LLVM 3.9.1')

@springmeyer
Copy link
Contributor Author

node-cpp-skel now enables LTO by default: mapbox/node-cpp-skel#110

@jfirebaugh
Copy link
Contributor

It seems that -flto and -Os cannot currently be used simultaneously when using the Android NDK: android/ndk#721.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants