Ув. знатоки, подскажите пожалуйста, как этому зверю сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет.
Чтение мана пользы не принесло, там про это ничего не написано, только как передать опции компиляции для пакета, но как выполнить конкретную задачу - нифига они не говорят (или не умеют маны писать шепелявые). *SCRATCH*
SBOpkg - переменные
Кратко: переопределить в локальном слакбилде путем правки его текста.сообщить флаги компиляции какие я хочу, а не те что он автоматом в слакбилде определяет
Подробнее: обычно слакбилды переменные параметров компиляции извне не берут, поэтому требуется их правка в самом сценарии. Обычно там что-то вроде:
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]
переопределить в локальном слакбилде путем правки его текста.
Ну это понятно, как семечки, хочется чтобы на автомате флаги подхватывались.
Из интерфейса sbopkg делается это в Custom - Edit SlackBuild из меню управления пакетом.
Что-то я не понял как это редактировать, редактор какой-то инопланетный *SCRATCH* Хоть убей, непонятна мне эта программа *NO*
включение/выключение разных возможностей переменными окружения
А флаги компиляции к ним не относятся? Вот и хочется флаги указывать из командной строки хотя-бы.
Wehrmacht_Rover, Можно у рута в ~/.bashrc или ~/.bash_login заранее определить некоторые из наиболее употребительных переменных, в том числе и опции компилятора с линкером. А вот опции сборочные (--with-option, --without-option, --sysconfdir, etc) изменяются в подавляющем большинстве случаев правкой слакбилда.
Создать на 100% универсальный инструмент невозможно в принципе, потому что сколько существует сборочных систем, столько и способов их конфигурирования. Вот если бы все пользовались только GNU Autotools, к примеру, тогда было бы другое дело.
А вот опции сборочные
Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.
[quote="yars"]А вот опции сборочные
Интересуют CFLAGS, CXXFLAGS, так как хочу собирать программы под свой проц, а не под i686.[/quote]
В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например:
CFLAGS=${CFLAGS:-$SLKCFLAGS}тогда бы эти переменные можно было переопределять извне.
Натравить на базу слакбилдов sed
редактор какой-то инопланетный
Поскольку в sbopkg видим
EDITOR=${EDITOR:-vi}то тот, что в $EDITOR прописан. Ничего не прописано? Тогда vi.
Натравить на базу слакбилдов sed
... и не забывать повторять сие действо после каждой синхронизации ("sbopkg -r"). Забывчивым можно даже в сам sbopkg дописать, благо он сценарий на bash.
Натравить на базу слакбилдов sed
Такой скрипт подойдёт?
#!/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. Где находится база слакбилдов?
2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.
2. Можно хоть в /var/cache/slackbuilds, но точно не скажу, так как sbopkg не пользуюсь, это надо man sbopkg читать.
Нашёл базу, теперь другой вопрос - есть ли разница какой ставить переменную $ARCH? i486, i686 или свою athlon64?
Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.
Athlon64 - это x86_64, если не ошибаюсь. Т.е., Slackware64 у вас должна работать, по идее.
Процессор - да, но система x86, в данном случае означает оптимизацию под мой проц.
Вот и хочу узнать что определяет $ARCH, я думаю что это просто набор букв, которые говорят слакбилду под какой проц собирать программу.
Что скажет uname -m, под то и собирайте. Даже i686 - это, если не ошибаюсь, Pentium II.
Wehrmacht_Rover,
жесть как она есть, извините. По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.
Опции компилятора и производимые ими эффекты смотрите в документации к gcc -- в части того, что им собирается, в том числе про march и mtune. В прочей, к счастью малозначительной, части -- смотрите опции тех прочих средств сборки.
По поводу размещения слакбилдов -- см. /etc/sbopkg/sbopkg.conf в части переменных REPO_ROOT/REPO_NAME/REPO_BRANCH (именно в этом порядке).
По поводу скрипта, в помощь:
# find /var/lib/sbopkg/SBo/14.1/ | xargs sed -i -e '...'По поводу замены: менял бы $SLKCFLAGS на ${MY_CFLAGS:-$SLKCFLAGS}, и куда-то в автостарте дописал бы export MY_CFLAGS="чего душе угодно".
По началу мне показалось, что вы понимаете, что делаете. Теперь точно знаю, что показалось.
Интересно мне понять что я не понимаю.
Вот мой итоговый скрипт, который решает мой вопрос
#!/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
Как уже говорил выше, вместо
sed ... $name > $name.tmp
mv $name.tmp $name
chmod +x $nameдостаточно
sed -i ... $nameВариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали? Ведь этот вариант намного гибче -- не установлена переменная окружения -- используются опции слакбилда, установлена -- используется ее значение. Нужно пересобрать с другими опциями -- поменяли параметры сборки в переменной и можно пересобирать.
По поводу -march=i486 vs. -march=athlon64 и -mtune=i686 vs. -mtune=athlon64 -- это лишь плацебо, вы будете смеяться но вся разница только в них самих. Не верите? Спросите у gcc чем отличаются эти наборы:
$ diff <(gcc -march=i486 -mtune=i686 -Q --help=target) <(gcc -march=athlon64 -mtune=athlon64 -Q --help=target)Будет ли толк от остального, и стоит ли свеч геморрой с пересборкой, нужно мерить и сравнивать...
вы будете смеяться но вся разница только в них самих.
Туда можно ввести что угодно, хоть "сливной_бачок", оно и покажет чем бачок отличается от athlon64
достаточноsed -i ... $name
Теперь так и сделал.
Вариант с установкой опций сборки вне слакбилда чем-то не понравился или просто его не рассматривали?
Пока не рассматривал.
Ранее поступила информация что так не получится:
В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.
[/quote] А в каком месте мои слова противоречат словам bormant'а?
Ранее поступила информация что так не получится:
[quote="yars"]В таком случае остается только править слакбилды. Если задать их в ~/.bashrc, слакбилд все равно эти переменные переопределит. Вот если бы во всех слакбилдах было, например: CFLAGS=${CFLAGS:-$SLKCFLAGS} тогда бы эти переменные можно было переопределять извне.