The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Стабильный выпуск HardenedBSD 12, opennews (ok), 19-Дек-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


28. "Стабильный выпуск HardenedBSD 12"  +/
Сообщение от Аноним (28), 19-Дек-18, 16:15 
Попробуй в /etc/make.conf:

---
LLVM_VERSION?=70
LLVM_LTO?=true

.if !empty(LLVM_VERSION)
  CC=/usr/local/llvm${LLVM_VERSION}/bin/clang
  CXX=/usr/local/llvm${LLVM_VERSION}/bin/clang++
  CPP=/usr/local/llvm${LLVM_VERSION}/bin/clang-cpp
  LDFLAGS+=-Wl,-rpath=/usr/local/llvm${LLVM_VERSION}/lib
  CONFIGURE_ENV+=LLVM_CONFIG=/usr/local/llvm${LLVM_VERSION}/bin/llvm-config
. if !empty(LLVM_LTO)
    CFLAGS.clang+=-flto=full
    LD=/usr/local/llvm${LLVM_VERSION}/bin/ld.lld
    LDFLAGS+=-fuse-ld=gold -Wl,--plugin /usr/local/llvm${LLVM_VERSION}/lib/LLVMgold.so
. endif
.endif
---

ну, до ума доведёшь напильником, т.к. мир я этим не собирал - только net/svnup...

$ uname -srm
FreeBSD 12.0-RELEASE amd64

Ответить | Правка | Наверх | Cообщить модератору

34. "Стабильный выпуск HardenedBSD 12"  +/
Сообщение от Аноним (5), 19-Дек-18, 19:59 
>ну, до ума доведёшь напильником

Да я бы с радостью. Только сборка почти каждого пакета вываливается с ошибкой:

Assertion failed: (PassInf && "Expected all immutable passes to be initialized"), function addImmutablePass, file /usr/ports/devel/llvm70/work/llvm-7.0.1.src/lib/IR/LegacyPassManager.cpp, line 812.
clang-7: error: unable to execute command: Abort trap (core dumped)
clang-7: error: linker command failed due to signal (use -v to see invocation)

Если юзать gcc+lto то собирается почти все. Так что можно утверждать, что clang+lto поломан и никто не собирается его чинить.

Ответить | Правка | Наверх | Cообщить модератору

40. "Стабильный выпуск HardenedBSD 12"  +/
Сообщение от Аноним (28), 20-Дек-18, 17:10 
> Да я бы с радостью. Только сборка почти каждого пакета вываливается с ошибкой:

не каждого.
я кое-что уже проверил.
net/svnup, databases/sqlite3, ports-mgmt/pkg, editors/libreoffice, mail/thunderbird, www/firefox
собираются и есть выигрыш в размере результирующего бинаря.

ты фигачишь -flto=full в CFLAGS, а в мурзилках - в CFLAGS.clang

p.s. и, да - правильно
LDFLAGS+=-fuse-ld=gold -Wl--plugin=/usr/local/llvm${LLVM_VERSION}/lib/LLVMgold.so

Ответить | Правка | Наверх | Cообщить модератору

43. "Стабильный выпуск HardenedBSD 12"  +/
Сообщение от Аноним (5), 21-Дек-18, 06:05 
>ты фигачишь -flto=full в CFLAGS, а в мурзилках - в CFLAGS.clang

Так если зафигачить в CFLAGS.clang то оно не будет юзаться. Посмотри листинг выполняемых команд при компляции.

>вот и devel/cmake подтянулся

А теперь возьми и вместо:
CFLAGS.clang+=-flto=full
поставь:
CFLAGS.clang+=-O2
...и увидишь, что размер бинарника не изменится ни на байт.

Вот пример:
с CFLAGS.clang+=-O2:

# ls -l `pkg info -l cmake | grep \/bin\/ccmake`
-rwxr-xr-x  1 root  wheel  4265752 Dec 21 04:35 /usr/local/bin/ccmake
# md5 /usr/local/bin/ccmake
MD5 (/usr/local/bin/ccmake) = 41eeae1983e4cd6fb3827d8598651727

с CFLAGS.clang+=-flto=full:

# ls -l `pkg info -l cmake | grep \/bin\/ccmake`
-rwxr-xr-x  1 root  wheel  4265752 Dec 21 04:41 /usr/local/bin/ccmake
kp ports/devel/llvm70 # md5 /usr/local/bin/ccmake
MD5 (/usr/local/bin/ccmake) = 41eeae1983e4cd6fb3827d8598651727

А разницу в размере ты скорее всего получил за счет того, что компилял не штатным компилятором и линковал другим линкером.

А если забирать -flto в CFLAGS, то видно как LTO колбасит при линковке дольше обычного, md5 и размер результирующего бинарника меняется.

----------------------------------------------------------

Вот тебе пример компиляции uWSGI:

Штатный компилятор:
-r-xr-xr-x  1 root  wheel  871688 Dec 21 04:50 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = 1f9ebc989affbded937d26720aff9b5f

clang70 из портов. В /etc/make.conf добавленно все что ты писал выше, только закомментированны CFLAGS.clang и LDFLAGS:

-r-xr-xr-x  1 root  wheel  879928 Dec 21 04:51 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = a3fa26c2ad12591aa99d19ac93c8a16e

Раскомментированы CFLAGS.clang и LDFLAGS:

-r-xr-xr-x  1 root  wheel  874928 Dec 21 04:51 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = cfe5af237673e679341dcbbed04224ef

А теперь добавляем в CFLAGS -flto=full:

-r-xr-xr-x  1 root  wheel  952768 Dec 21 04:52 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = b9d6776db2c70695bc7267c46689b4d4

А вот если собрать с -flto=thin:

-r-xr-xr-x  1 root  wheel  965040 Dec 21 05:00 /usr/local/bin/uwsgi
MD5 (/usr/local/bin/uwsgi) = ba91b7c8470fd87c7a048518fe5110ee

...и если еще добавить в LDFLAGS: ,-plugin-opt,jobs=24 то линкует значительно быстрее чем -flto=full

Ответить | Правка | Наверх | Cообщить модератору

41. "Стабильный выпуск HardenedBSD 12"  +/
Сообщение от Аноним (28), 20-Дек-18, 17:17 
вот и devel/cmake подтянулся:

штатным:
$ ls -l `pkg info -l cmake | fgrep local/bin`
-rwxr-xr-x  1 root  wheel  4399952 12 дек.  20:17 /usr/local/bin/ccmake
-rwxr-xr-x  1 root  wheel  4760408 12 дек.  20:17 /usr/local/bin/cmake
-rwxr-xr-x  1 root  wheel  4912056 12 дек.  20:17 /usr/local/bin/cpack
-rwxr-xr-x  1 root  wheel  5735560 12 дек.  20:17 /usr/local/bin/ctest

llvm70+lto:
$ ls -l `pkg info -l cmake | fgrep local/bin`
-rwxr-xr-x  1 root  wheel  4184272 20 дек.  16:11 /usr/local/bin/ccmake
-rwxr-xr-x  1 root  wheel  4527688 20 дек.  16:11 /usr/local/bin/cmake
-rwxr-xr-x  1 root  wheel  4660184 20 дек.  16:11 /usr/local/bin/cpack
-rwxr-xr-x  1 root  wheel  5446984 20 дек.  16:11 /usr/local/bin/ctest

$ make -V CFLAGS
-O2 -fno-strict-aliasing -fmerge-all-constants -pipe  -fstack-protector -isystem /usr/local/include

$ make -V CFLAGS.clang
-flto=full

$ make -V LDFLAGS
-Wl,-rpath=/usr/local/llvm70/lib -fuse-ld=gold -Wl,--plugin=/usr/local/llvm70/lib/LLVMgold.so -fstack-protector

Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру