This repository has been archived by the owner on Jul 10, 2021. It is now read-only.
Enable experimental Link-Time Optimization support #44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This lets the SDK access GCC's Link Time optimization support. It uses the same patterns that Dolphin uses to enable the same support.
Link Time Optimization allows GCC to look over multiple source files to create optimizations, where in most cases it's only able to optimize on a per-function basis, without exactly knowing what impact this will have on the overall code.
When compiled with this, my libovr.so drops from 950+KB to 861KB and has a noticeable reduction in judder in certain apps. Some binaries are able to get up to 34% speed increases with it enabled.
The only other build option I've considered adding would be -ftree-vectorize. That would allow GCC to take non-interdependent loops and generate SSE SIMD equivalents. (Considering the OculusSDK generally operates on a per-eye basis independently in loops, this would most likely give a considerable boost)
It's left as an option so that it can be left up to the discretion of the developer who imports it.