В общем, отчитываюсь о решении проблемы с компиляцией OpenJDK.
Сборка этой штуки всегда идёт через задницу я уже не говорю о том, что нужно ставить переменную среду MAKE_JOBS_UNSAFE=yes, выкидывается большое количество предупреждений о неявных преобразованиях, неиспользуемых переменных и прочем. Всё это никак не зависит от используемого компилятора.
Так вот, чтобы поставить нужные флаги компиляции, во избежание ошибок, их стоит закомментировать в /etc/make.conf
и прописать в виде переменных сред и собирать порт от рута (причём, не через su
, а именно зайдя под рутом). То есть, если я пропишу в /etc/make.conf
CFLAGS=-march=core2 -mtune=core2 -O2 -pipe
, то будет ошибка компиляции (уже не помню, какая, снёс систему и ставлю начисто), а вот если выполнить setenv CFLAGS '-march=core2 -mtune=core2 -O2 -pipe'
, то сборка пойдёт нормально с этими флагами (собирал как Clang 3.8, так и GCC 5.3.0). Логику не особо понимаю и искать её у меня сейчас особого желания нет. Вот такой костыль.
Касательно CXX
- конкретно для OpenJDK его указывать не обязательно - судя по выхлопу мейка, в качестве него подхватывается CC
. А вот для многих других портов (в том числе, для зависимостей) будет использоваться дефолтный компилятор.
Ещё интересное наблюдение - в некоторых моментах при сборке OpenJDK (но не везде - в большинстве случаев, будет использоваться то, что указано пользователем и ничего, если ничего им явно не указано) явно указан параметр -O2
(видимо, на случай сборки с -O3
или -Ofast
, так как с такими параметрами собрать этот код невозможно) или даже -Os
(вот это я не особо понимаю - у меня много места на диске и я не хочу жертвовать производительностью в угоду размеру, а тот, у кого этого места мало, сам при компиляции явно укажет -Os
).
Проблема с иксами снова пока не появлялась.