LINUX.ORG.RU

Странность при сборке

 , ,


0

3

Собираю ядро для неких нужд. Есть маленький мейкфайл в tools/power/x86/x86_energy_perf_policy/

DESTDIR ?=

x86_energy_perf_policy : x86_energy_perf_policy.c

clean :
        rm -f x86_energy_perf_policy

install :
        install x86_energy_perf_policy ${DESTDIR}/usr/bin/
        install x86_energy_perf_policy.8 ${DESTDIR}/usr/share/man/man8/

При заходе в него make падает с

gcc    x86_64 x86_energy_perf_policy.c   -o x86_energy_perf_policy
gcc: error: x86_64: No such file or directory

Откуда вылез x86_64? Потерялся (где?) ключ -arch?
gcc 4.8.3

Deleted
Ответ на: комментарий от i_gnatenko_brain

Гм... У него есть дефолтные конечно, но я ожидал, что файл кем-то включается. Видимо, я был неправ. Тогда make -pn в TOPDIR ядра.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Насколько я понимаю логику make, правила нужны только при отдельной компиляции, для файла .o

Здесь же, судя по строчке

gcc x86_energy_perf_policy.c -o x86_energy_perf_policy

идёт сборка сразу с линковкой. То есть, и зависеть оно будет только от x86_energy_perf_policy.c.

Или я что-то перепутал? :)

Deleted
()
Последнее исправление: ecko (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Эээ... А где правила сборки x86_energy_perf_policy.c?

Если б я знал. Я вообще не настоящий сварщик.
Но подсказывают, что это наверное префикс зачем-то пролезший в один из вышеуровневых мейкфайлов. Попробую руками make из TOPDIR.

Deleted
()
Ответ на: комментарий от Deleted

Предоставлю когда найду тот вызов, который ведет к ошибке. Эта хрень собирается лапшой билд-скрипта. Дергаю руками все make из лога дженкинса по очереди - проходят.

Deleted
()
Ответ на: комментарий от Deleted

Если б ты прочёл man make, ты бы уже давно понял, что от тебя хотят:

-p, --print-data-base
Print the data base (rules and variable values) that results from reading the makefiles; then  execute
            as  usual  or as otherwise specified.  This also prints the version information given by the -v switch
            (see below).  To print the data base without trying to remake any files, use make -p -f/dev/null.
-n, --just-print, --dry-run, --recon
            Print the commands that would be executed, but do not execute them (except in certain circumstances).

Deleted
()
Ответ на: комментарий от Deleted

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

Deleted
()
Ответ на: комментарий от Deleted

Это все запускается из rpmbuild

/bin/rpmbuild -ba --with firmware --target x86_64 --with baseonly --define '_topdir /home/jenkins/fsroot/workspace/workdir' --define 'buildid _unlabeled' --define '_tmppath /var/tmp' SPECS/kernel.spec

А вот место в kernel.spec

%ifarch x86_64
   pushd tools/power/x86/x86_energy_perf_policy/
   make
   popd
   pushd tools/power/x86/turbostat
   make
   popd
%endif #turbostat/x86_energy_perf_policy
Но понимания происходящего мне это не добавляет.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Опытным путем установил, что rpmbuild сбывает с толку TARGET_ARCH=$(uname -m), выставляемый билд-скриптом. Если перед rpmbuild сделать TARGET_ARCH=, то сборка проходит.
Осталось понять, зачем оно так делает.

Deleted
()
Ответ на: комментарий от Deleted

А вот нечто похожее на ответ
http://www.juce.com/forum/topic/passing-targetarchxyz-make-gives-no-such-file...
http://www.mothur.org/wiki/Makefile_options
make, похоже, использует переменную окружения TARGET_ARCH для каких-то кросскомпиляционных нужд. А автор билд-скрипта этого не зная использовал для своих. ман, к слову, об этом героически молчит.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.