LinuxForum.Fans
Тема

SBOpkg - переменные

Автор: Wehrmacht_Rover 35 сообщений 9930 просмотров
#373713

Ув. знатоки, подскажите пожалуйста, как этому зверю сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет.
Чтение мана пользы не принесло, там про это ничего не написано, только как передать опции компиляции для пакета, но как выполнить конкретную задачу - нифига они не говорят (или не умеют маны писать шепелявые). *SCRATCH*

#373718

"Wehrmacht_Rover" написал:
сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет
Кратко: переопределить в локальном слакбилде путем правки его текста.

Подробнее: обычно слакбилды переменные параметров компиляции извне не берут, поэтому требуется их правка в самом сценарии. Обычно там что-то вроде:
text
if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi
...
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
...

Из интерфейса sbopkg делается это в Custom - Edit SlackBuild из меню управления пакетом.
Исключение составляет включение/выключение разных возможностей переменными окружения, описанные в README слакбилда, вроде http://slackbuilds.org/repository/14.1/multimedia/ffmpeg/
с теми проще -- указать при вызове:[console]# ASS=yes ... sbopkg -Rki ffmpeg[/console]

#373723
"bormant" написал:
переопределить в локальном слакбилде путем правки его текста.

Ну это понятно, как семечки, хочется чтобы на автомате флаги подхватывались.

"bormant" написал:
Из интерфейса sbopkg делается это в Custom - Edit SlackBuild из меню управления пакетом.

Что-то я не понял как это редактировать, редактор какой-то инопланетный *SCRATCH* Хоть убей, непонятна мне эта программа *NO*

"bormant" написал:
включение/выключение разных возможностей переменными окружения

А флаги компиляции к ним не относятся? Вот и хочется флаги указывать из командной строки хотя-бы.

#373736

Wehrmacht_Rover, Можно у рута в ~/.bashrc или ~/.bash_login заранее определить некоторые из наиболее употребительных переменных, в том числе и опции компилятора с линкером. А вот опции сборочные (--with-option, --without-option, --sysconfdir, etc) изменяются в подавляющем большинстве случаев правкой слакбилда.
Создать на 100% универсальный инструмент невозможно в принципе, потому что сколько существует сборочных систем, столько и способов их конфигурирования. Вот если бы все пользовались только GNU Autotools, к примеру, тогда было бы другое дело.

#373737
"yars" написал:
А вот опции сборочные

Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.

#373740
Wehrmacht_Rover написал:
[quote="yars"]А вот опции сборочные

Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.[/quote]
В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например:

text
CFLAGS=${CFLAGS:-$SLKCFLAGS}

тогда бы эти переменные можно было переопределять извне.

#373747

Натравить на базу слакбилдов sed

#373751
"Wehrmacht_Rover" написал:
редактор какой-то инопланетный

Поскольку в sbopkg видим

text
EDITOR=${EDITOR:-vi}

то тот, что в $EDITOR прописан. Ничего не прописано? Тогда vi.

#373752
SergMarkov написал:
Натравить на базу слакбилдов sed

... и не забывать повторять сие действо после каждой синхронизации ("sbopkg -r"). Забывчивым можно даже в сам sbopkg дописать, благо он сценарий на bash.

#373895
"SergMarkov" написал:
Натравить на базу слакбилдов sed

Такой скрипт подойдёт?

text
#!/bin/bash
for name in *.Slackbuild
  do
    sed 's/i486 -mtune=i686/athlon64 -mtune=athlon64 -pipe -fomit-frame-pointer/' $name.SlackBuild > $name.SlackBuild.tmp
    mv $name.SlackBuild.tmp $name.SlackBuild
    chmod +x $name.SlackBuild
  done

1. Может быть, где-то ошибся? Исправьте.
2. Где находится база слакбилдов?

#373908

2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.

#373911
"yars" написал:
2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.

Нашёл базу, теперь другой вопрос - есть ли разница какой ставить переменную $ARCH? i486, i686 или свою athlon64?

#373914

Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.

#373915
"yars" написал:
Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.

Процессор - да, но система x86, в данном случае означает оптимизацию под мой проц.
Вот и хочу узнать что определяет $ARCH, я думаю что это просто набор букв, которые говорят слакбилду под какой проц собирать программу.

#373918

Что скажет uname -m, под то и собирайте. Даже i686 - это, если не ошибаюсь, Pentium II.

#373945

Wehrmacht_Rover,
жесть как она есть, извините. По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.

Опции компилятора и производимые ими эффекты смотрите в документации к gcc -- в части того, что им собирается, в том числе про march и mtune. В прочей, к счастью малозначительной, части -- смотрите опции тех прочих средств сборки.

По поводу размещения слакбилдов -- см. /etc/sbopkg/sbopkg.conf в части переменных REPO_ROOT/REPO_NAME/REPO_BRANCH (именно в этом порядке).

По поводу скрипта, в помощь:

text
# find /var/lib/sbopkg/SBo/14.1/ | xargs sed -i -e '...'

По поводу замены: менял бы $SLKCFLAGS на ${MY_CFLAGS:-$SLKCFLAGS}, и куда-то в автостарте дописал бы export MY_CFLAGS="чего душе угодно".

#373960
"bormant" написал:
По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.

Интересно мне понять что я не понимаю.
Вот мой итоговый скрипт, который решает мой вопрос

text
#!/bin/sh
for name in $( ls -R /var/lib/sbopkg/SBo/14.1/*/*/*SlackBuild )
  do
    sed 's/ARCH=i486/ARCH=i686/;s/i686 -mtune=i686/athlon64 \
    -mtune=athlon64 \
    -pipe \
    -fomit-frame-pointer \
    -ffast-math \
    -fwhole-program \
    -msse2 -mmmx -mmmxext -m3dnow -m3dnowext\
    -mfpmath=both/' $name > $name.tmp
    mv $name.tmp $name
    chmod +x $name
  done
#374000

Как уже говорил выше, вместо

text
sed ... $name > $name.tmp
mv $name.tmp $name
chmod +x $name

достаточно

text
sed -i ... $name

Вариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали? Ведь этот вариант намного гибче -- не установлена переменная окружения -- используются опции слакбилда, установлена -- используется ее значение. Нужно пересобрать с другими опциями -- поменяли параметры сборки в переменной и можно пересобирать.

По поводу -march=i486 vs. -march=athlon64 и -mtune=i686 vs. -mtune=athlon64 -- это лишь плацебо, вы будете смеяться но вся разница только в них самих. Не верите? Спросите у gcc чем отличаются эти наборы:

text
$ diff <(gcc -march=i486 -mtune=i686 -Q --help=target) <(gcc -march=athlon64 -mtune=athlon64 -Q --help=target)

Будет ли толк от остального, и стоит ли свеч геморрой с пересборкой, нужно мерить и сравнивать...

#374008
"bormant" написал:
вы будете смеяться но вся разница только в них самих.

Туда можно ввести что угодно, хоть "сливной_бачок", оно и покажет чем бачок отличается от athlon64

"bormant" написал:
достаточноsed -i ... $name

Теперь так и сделал.

"bormant" написал:
Вариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали?

Пока не рассматривал.
Ранее поступила информация что так не получится:

"yars" написал:
В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.
#374020

Wehrmacht_Rover написал:

Ранее поступила информация что так не получится:
[quote="yars"]В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.
[/quote] А в каком месте мои слова противоречат словам bormant'а?
Войдите или зарегистрируйтесь, чтобы ответить.