CMake-Unterstützung für die Linktime-Optimierung (LTO) von GCC

8

Ich habe die neueste CMake Build und versuche alle Build-Konfigurationen (Debug, MinSizeRel, RelWithDebugInfo, Release, General) Ich sehe nirgends (Textsuche) in generierten Makefiles die Zeichenfolge -lto , also oder die Funktionalität ist immer noch nicht vorhanden , oder es erfordert manuelle Interversion (in diesem Fall eine Textsuche für LTO oder Link Zeitoptimierung) über die Dokumentation gibt kein Ergebnis, so sehe ich nirgends in der offiziellen Dokumentation eine Möglichkeit, LTO zu aktivieren.

Gibt es eine Möglichkeit, LTO "global" (für alle Compiler) zu aktivieren, ohne manuell Flags festzulegen, die schlimmstenfalls nur von GCC unterstützt werden könnten?

    
GameDeveloper 11.07.2015, 09:37
quelle

3 Antworten

7

Bearbeiten: ab 28. Oktober 2015 auf CMake IRC

%Vor%

Verwandtes CMake-Problem: Ссылка

CMake hat die Eigenschaft INTERPROCEDURAL_OPTIMIZATION auf Zielen, was so klingt, als könnte es LTO auf einigen Plattformen aktivieren.

Link: Ссылка

Um es auf einem Ziel MyLib zu aktivieren:

%Vor%     
Jean-Michaël Celerier 20.07.2015, 17:23
quelle
14

Gute Nachrichten! CMake v3.9 unterstützt schließlich LTO .

Beispiel

Hier ist ein Beispielcode, um zu zeigen, wie es funktioniert:

%Vor%

Für GCC fügt dies -flto -fno-fat-lto-objects zu den Zielkompilierbefehlen hinzu.

Überprüfung der Compiler-Unterstützung

Das Modul CheckIPOSupported bietet eine Überprüfung, ob interprozedurale Optimierung (IPO / LTO) vom Compiler unterstützt wird oder nicht:

%Vor%

Wenn keine Argumente übergeben werden (= check_ipo_supported() ), wird ein Fehler angezeigt, der anzeigt, dass er nicht unterstützt wird. Andernfalls wird die Variable result auf YES oder NO gesetzt. Weitere Details sind in der Dokumentation des Moduls beschrieben.

LTO aktivieren

LTO ist entweder für ein einzelnes Ziel oder als Standard für alle Ziele aktiviert.

LTO für ein einzelnes Ziel

So aktivieren Sie LTO für einen Zielsatz INTERPROCEDURAL_OPTIMIZATION bis TRUE . Dies geschieht durch den Befehl set_property() :

%Vor%

LTO als Standard

Es ist möglich, LTO standardmäßig zu aktivieren, indem Sie CMAKE_INTERPROCEDURAL_OPTIMIZATION festlegen bis TRUE :

%Vor%

Dies aktiviert INTERPROCEDURAL_OPTIMIZATION für alle Ziele, die nach dieser Zeile erstellt wurden. Die zuvor erstellten sind nicht betroffen.

Siehe auch

ollo 18.11.2017 20:30
quelle
2

Ja, laut Quellcode gibt es keine Unterstützung für LTO für gcc / clang Compiler. Sie haben nur eine Unterstützung für den Intel-Compiler.

Ich habe eine grep-Ausgabe für cmake 3.4.3:

%Vor%

Wie Sie sehen können, haben wir nur ein Intel Plattformmodul.

Also habe ich eine Feature-Anfrage für diese äußerst nützliche Funktion erstellt: Ссылка

    
Pavel Odintsov 28.01.2016 12:42
quelle

Tags und Links