Próbuję zastosować Link Time Optimization z LLVM w projekcie CMake, który tworzy wspólną bibliotekę. Moje pytanie jest prawie takie samo jak to:LTO z LLVM i CMake
Switching between GCC and Clang/LLVM using CMake.
Jednak odpowiedzi wydają się już nie mieć zastosowania, ponieważ llvm-ld
nie występuje w nowych wersjach. W wierszu polecenia uruchomić następujące polecenia, aby uzyskać LTO (Zakładając, że istnieją tylko 2 .cpp
pliki):
kompilacji do kodu bajtowego:
clang++ -c FirstClass.cpp -O3 -flto -o FirstClass.bc
clang++ -c SecondClass.cpp -O3 -flto -o SecondClass.bc
link kod bajtowy:
llvm-link FirstClass.bc SecondClass.bc -o unoptimized.bc
Zoptymalizuj kod bajtu:
opt -O3 unoptimized.bc -o optimized.bc
Konwertuj kod bajtowy na obiekt współdzielony:
clang++ -shared optimized.bc -o libTest.so
Czy ktoś mógłby mi powiedzieć, w jaki sposób CMake powinien wykonać dodatkowe czynności?
To może być zadanie dla [ 'add_custom_command'] (https://cmake.org/cmake/help/v3 .0/command/add_custom_command.html) cmake ... Coś jak 'add_custom_command (OUTPUT libTest.so COMMAND clang ++ -shared optimized.bc -o libTest.so MAIN_DEPENDENCY optimized.bc)' Zobacz http://stackoverflow.com/ pytania/13470499/cmake-add-custom-command-with-dependencies-from-a-different-directory – francis