forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 17.08.2016, 13:58
Serguei E. Leontiev
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 17.08.2016, 13:58
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 17.08.2016, 13:58
Serguei E. Leontiev
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 17.08.2016, 13:58
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию 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
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:24. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot