#1
|
|||
|
|||
LTO, clang и FreeBSD
Serguei E. Leontiev написал(а) к All в Mar 15 00:24:47 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Всем, привет, Ключ включения оптимизатора времени сборки `-flto' (Link Time Optimization) на FreeBSD 10.1 не работает. И стандартный компилятор и компилятор из ports, ругаются однотипно: $ cc -flto НelloWorld.c /usr/bin/ld: unrecognized option '-plugin' /usr/bin/ld: use the --help option for usage information cc: error: linker command failed with exit code 1 (use -v to see invocation) $ clang36 -flto НelloWorld.c /usr/bin/ld: unrecognized option '-plugin' /usr/bin/ld: use the --help option for usage information clang: error: linker command failed with exit code 1 (use -v to see invocation) В тоже время, gcc находит общий язык с ld: $ gcc48 -flto НelloWorld.c $ ./a.out Нello world [C] Вероятно, это плоды борьбы GPL, за чистоту BSD, т.к. на Mac OSX у clang/llvm проблем нет. Есть ли связанное описания способа включения LTO plug-in? Быть может, есть альтернативный "серый" репозиторий пакетов для FreeBSD? -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |
#2
|
|||
|
|||
Re: LTO, clang и FreeBSD
Alex Korchmar написал(а) к \"Serguei E. Leontiev\" в Mar 15 11:07:12 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Serguei E. Leontiev <leo@sai.msu.ru> wrote: SEL> Есть ли связанное описания способа включения LTO plug-in? Быть может, ну дык - -v как оно предлагает, и увидишь, как правильно, и как неправильно вызывать ld. И дальше - LD=ld, и никаких линковок кривыми скриптам. > Alex --- ifmail v.2.15dev5.4 |
#3
|
|||
|
|||
Re: LTO, clang и FreeBSD
Serguei E. Leontiev написал(а) к Alex Korchmar в Mar 15 01:10:40 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Привет Алексей, От 8 марта 2015 г., 11:07:12 в fido7.ru.unix.bsd ты писал: SEL>> Есть ли связанное описания способа включения LTO plug-in? SEL>> Быть может, AK> ну дык - -v как оно предлагает, и увидишь, как правильно, и как Как я понял и, соответственно предварительно выполнил. 1. Пересобрал и переустановил /usr/ports/devel/binutils; 2. В конфигурации /usr/ports/devel/llvm36 включил пункт "LTOPLUGIN Build LTO plugin (requires gold)", пересобрал и переустановил; 3. Пересобрал и переустановил /usr/ports/lang/clang36; Явного результата это не принесло, команда `clang36 -flto НelloWorld.c' продолжила ругаться "/usr/bin/ld: unrecognized option '-plugin'". AK> неправильно вызывать ld. AK> И дальше - LD=ld, и никаких линковок кривыми скриптам. С переменной окружения LD не очень получается. $ LD=/usr/local/bin/ld.gold clang36 -flto НelloWorld.c /usr/bin/ld: unrecognized option '-plugin' /usr/bin/ld: use the --help option for usage information clang: error: linker command failed with exit code 1 (use -v to see invocation) Однако, если грязным образом подменить системный ld, то что-то начинает работать: # mv /usr/bin/ld{,.orig} # ln -s /usr/local/bin/ld.gold /usr/bin/ld $ clang36 -flto НelloWorld.c $ ./a.out Нello world [C] Однако счастье неполно: 1. Замена /usr/bin/ld на /usr/local/bin/ld.gold может где-то аукнуться; 2. cmake при проверке ключа `-flto' находит какую-то лажу: Run Build Command:"/usr/local/bin/gmake" "cmTryCompileExec143489584/fast" /usr/local/bin/gmake -f CMakeFiles/cmTryCompileExec143489584.dir/build.make CMakeFiles/cmTryCompileExec143489584.dir/build gmake[1]: Entering directory '/Users/leo/YandexDisk/tmp/boost/150304/perf-mutexes/build-bsd-x64/CMakeFiles/CMakeTmp' /usr/local/bin/cmake -E cmakeprogressreport /home/leo/YandexDisk/tmp/boost/150304/perf-mutexes/build-bsd-x64/CMakeFiles/CMakeTmp/CMakeFiles 1 Building CXX object CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o /usr/local/bin/clang++36 -DCOMPILERSUPPORTSLTO -flto -o CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o -c /home/leo/YandexDisk/tmp/boost/150304/perf-mutexes/build-bsd-x64/CMakeFiles/CMakeTmp/src.cxx Linking CXX executable cmTryCompileExec143489584 /usr/local/bin/cmake -E cmakelinkscript CMakeFiles/cmTryCompileExec143489584.dir/link.txt --verbose=1 /usr/local/bin/clang++36 -DCOMPILERSUPPORTSLTO CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o -o cmTryCompileExec143489584 /usr/bin/ld: error: CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o:1:3: invalid character /usr/bin/ld: error: CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o:1:3: syntax error, unexpected $end /usr/bin/ld: error: CMakeFiles/cmTryCompileExec143489584.dir/src.cxx.o: not an object or archive /usr/lib/crt1.o:/usr/src/lib/csu/amd64/crt1.c:function _start: error: undefined reference to 'main' clang: error: linker command failed with exit code 1 (use -v to see invocation) CMakeFiles/cmTryCompileExec143489584.dir/build.make:88: recipe for target 'cmTryCompileExec143489584' failed gmake[1]: Leaving directory '/Users/leo/YandexDisk/tmp/boost/150304/perf-mutexes/build-bsd-x64/CMakeFiles/CMakeTmp' gmake[1]: * [cmTryCompileExec143489584] Error 1 Makefile:118: recipe for target 'cmTryCompileExec143489584/fast' failed gmake: * [cmTryCompileExec143489584/fast] Error 2 Source file was: int main() { return 0; } -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |
#4
|
|||
|
|||
Re: LTO, clang и FreeBSD
Alex Korchmar написал(а) к \"Serguei E. Leontiev\" в Mar 15 11:27:33 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Serguei E. Leontiev <leo@sai.msu.ru> wrote: AK>> ну дык - -v как оно предлагает, и увидишь, как правильно, и как SEL> Как я понял и, соответственно предварительно выполнил. э... еще раз: я предлагал запустить gcc с ключом -v чтобы увидеть ВСЕ параметры которые передаются collect2 (это такой кривой враппер вокруг ld) и попробовать (не знаю умеет ли эта поделка) то же самое с clang, чтобы увидеть чем набор ключей отличается и в каком месте фиксить. После чего отказаться вообще от линковки этим методом и вызывать ld вручную - со всеми его crt.S и прочей гадостью. И быть уверенным что вызывается именно нужный ld. Я довольно часто использую этот метод, чтобы избавиться от зависимости от конкретной libstdc++.стописятничегонезначащихцифирек.so > Alex --- ifmail v.2.15dev5.4 |