LINUX.ORG.RU

Вопрос по отмизациям gcc


0

1

Собрал свой кросскомпилятор. Тестирую его и обычный gcc на этом коде

#include <stdio.h> // Или вообще любой хидер из libc

#if defined __OPTIMIZE__
    #error optimization 
#endif

#if defined __OPTIMIZE_SIZE__
    #error optimization for size
#endif

int main ()
{
  return 0;
}
$ arm-unknow-linux-uclibcgnueabi-gcc main.c
main.c:8:6: error: #error optimization for size

$ arm-unknow-linux-uclibcgnueabi-gcc main.c -O0
main.c:8:6: error: #error optimization for size

$ arm-unknow-linux-uclibcgnueabi-gcc main.c -O1
main.c:4:6: error: #error optimization
main.c:8:6: error: #error optimization for size

$ gcc main.c
Ничего

$ gcc main.c -O1
main.c:4:6: error: #error optimization

arm-unknow-linux-uclibcgnueabi-gcc - версии 4.4.5 gcc - версии 4.4.4

Что мне не нравится? Какого-то хрена для кросскомпилятора включена по-умолчанию оптимизация по размеру. Собственно и вопрос, как этого не допустить?


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

>А где сборка с O2/O3/Os

Os - мне кажется что он по-дефолту. Поэтому добавка ещё одного Os ничего не меняет. Проверял.

O2/O3 - аналогично O1.

И что gcc такой старый?)

Зато сейчас пожалуй самый забагфиксеный.

gogi
() автор топика
/* For uClibc, always optimize for size -- this should disable
* a lot of expensive inlining... */
#define __OPTIMIZE_SIZE__ 1

Нашёл в инклуде features.h Теперь узнать как бы это отключить...

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

Посмотрел в configure.tgt в binutils,

может попробовать target

arm-*-linux-gnueabi- ?

Должно нормально работать с uclibc, и оптимизация по размеру не включится.

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

>Посмотрел в configure.tgt в binutils,
Какой именно? ld, gas, gold, сам binutils?

arm-*-linux-gnueabi-?

Что-то я не понял что там я смогу поменять?

gogi
() автор топика

Какого-то хрена для кросскомпилятора включена по-умолчанию оптимизация по размеру

моё имхо дефайны __OPTIMIZE__ итп к gcc отношения не имеют. Я не вижу ни в мане ни инете ссылки на них. Это libc и оптимизация на уровне сырцов а не всякие -Os, -O2 итп

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

>моё имхо дефайны __OPTIMIZE__ итп к gcc отношения не имеют. Я не вижу ни в мане ни инете ссылки на них. Это libc и оптимизация на уровне сырцов а не всякие -Os, -O2 итп

Здесь посмотри
http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predef...

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

Ок, но, мне кажется, дефайном оптимизацию не включить. Я щас проверил, у меня #define __OPTIMIZE__ 1 никак не влияет на бинарь. gcc -E показывает что от __OPTIMIZE__ ничего не остаётся после препроцессора.

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

>дефайном оптимизацию не включить.

Так одно дело, когда ты сам определяешь, а другое дело когда в потрахах компилятора это забито. То что я нашёл в файле featurs.h - это ведь возможно не всё, только видимая часть так сказать.

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

В спеках забито, я думаю. features.h, как я понимаю, автогенерируемый хедер.

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