2021-10-31 20:28:04 +08:00
{{ include('../packages/gcc/README.md') }}
2021-04-25 23:04:51 +08:00
2021-07-03 14:53:31 +08:00
## Подготовка
2021-05-05 18:58:00 +08:00
### Дополнительные необходимые файлы
2021-04-25 23:04:51 +08:00
2021-11-01 01:53:57 +08:00
```bash
2021-10-31 20:28:04 +08:00
{{ include('../packages/mpc/.url') }}
2021-11-01 01:53:57 +08:00
```
2021-04-25 23:04:51 +08:00
2021-11-01 01:53:57 +08:00
```bash
2021-10-31 20:28:04 +08:00
{{ include('../packages/gmp/.url') }}
2021-11-01 01:53:57 +08:00
```
2021-04-25 23:04:51 +08:00
2021-11-01 01:53:57 +08:00
```bash
2021-10-31 20:28:04 +08:00
{{ include('../packages/mpfr/.url') }}
2021-11-01 01:53:57 +08:00
```
2021-04-25 23:04:51 +08:00
2021-11-01 01:53:57 +08:00
```bash
2021-10-31 20:28:04 +08:00
{{ include('../packages/isl/.url') }}
2021-11-01 01:53:57 +08:00
```
2021-04-25 23:04:51 +08:00
2021-06-10 21:28:16 +08:00
Распакуйте дополнительные пакеты:
2021-04-25 23:04:51 +08:00
2021-05-03 15:25:41 +08:00
< pre >
2021-11-01 01:53:57 +08:00
tar -xf ../```bash
{{ include('../packages/mpfr/.filename') }}
```
mv -v ```bash
{{ include('../packages/mpfr/.filename') }}
``` ```bash
{{ include('../packages/mpfr/.name') }}
```
2021-10-31 20:28:04 +08:00
2021-11-01 01:53:57 +08:00
tar -xf ../```bash
{{ include('../packages/gmp/.filename') }}
```
mv -v ```bash
{{ include('../packages/gmp/.filename') }}
``` ```bash
{{ include('../packages/gmp/.name') }}
```
2021-10-31 20:28:04 +08:00
2021-11-01 01:53:57 +08:00
tar -xf ../```bash
{{ include('../packages/mpc/.filename') }}
```
mv -v ```bash
{{ include('../packages/mpc/.filename') }}
``` ```bash
{{ include('../packages/mpc/.name') }}
```
2021-10-31 20:28:04 +08:00
2021-11-01 01:53:57 +08:00
tar -xf ../```bash
{{ include('../packages/isl/.filename') }}
```
mv -v ```bash
{{ include('../packages/isl/.filename') }}
``` ```bash
{{ include('../packages/isl/.name') }}
```
2021-10-31 20:28:04 +08:00
2021-05-03 15:25:41 +08:00
< / pre >
2021-04-25 23:04:51 +08:00
2021-10-31 22:52:16 +08:00
???+ warning "Предупреждение"
2021-10-30 02:12:51 +08:00
Обратите внимание, что распаковка указанных пакетов должна производиться из каталога пакета GCC.
2021-06-28 07:13:28 +08:00
2021-04-25 23:04:51 +08:00
Смените пути установки библиотек:
```bash
sed -e '/m64=/s/lib64/lib/' \
-e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \
-i.orig gcc/config/i386/t-linux64
```
2021-10-01 20:12:25 +08:00
Пакет GCC требует использовать отдельную директорию для сборки. Создайте её:
2021-04-25 23:04:51 +08:00
```bash
2021-06-29 20:48:34 +08:00
mkdir -v build
cd build
2021-04-25 23:04:51 +08:00
```
2021-07-03 14:53:31 +08:00
## Настройка
2021-06-10 21:28:16 +08:00
2021-04-25 23:04:51 +08:00
```bash
2021-06-27 15:52:41 +08:00
../configure \
--target=$LIN_TGT \
--prefix=$LIN/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LIN \
--with-newlib \
--without-headers \
--enable-initfini-array \
--disable-nls \
--disable-shared \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++ \
2021-06-27 15:58:09 +08:00
--disable-multilib
2021-04-25 23:04:51 +08:00
```
2021-06-26 20:02:42 +08:00
### Для multilib
2021-10-30 02:12:51 +08:00
Замените параметр `--disable-multilib` на `--enable-multilib --with-multilib-list=m64,m32`
2021-04-25 23:04:51 +08:00
2021-06-26 20:02:42 +08:00
### Значения параметров
2021-04-25 23:04:51 +08:00
2021-06-16 21:15:56 +08:00
`--with-glibc-version = 2.11` Эта опция гарантирует, что пакет будет совместим с версией glibc на хосте. Для него установлено минимальное требование glibc, указанное в Требованиях к хост-системе.
2021-04-25 23:04:51 +08:00
2021-06-28 07:13:28 +08:00
`--with-newlib` Поскольку рабочая библиотека C еще недоступна, это гарантирует, что константа `ignit_libc` определена при сборке libgcc. Это предотвращает компиляцию любого кода, требующего поддержки libc.
2021-04-25 23:04:51 +08:00
2021-06-16 21:15:56 +08:00
`--without-headers` При создании полного кросс-компилятора GCC требует стандартных заголовков, совместимых с целевой системой. Для наших целей эти заголовки не понадобятся. Этот переключатель предотвращает их поиск GCC.
2021-04-25 23:04:51 +08:00
2021-06-16 21:15:56 +08:00
`--enable-initfini-array` Этот переключатель заставляет использовать некоторые внутренние структуры данных, которые необходимы, но не могут быть обнаружены при построении кросс-компилятора.
2021-04-25 23:04:51 +08:00
2021-06-27 15:52:41 +08:00
`--disable-shared` Этот переключатель заставляет GCC связывать свои внутренние библиотеки статически. Нам это нужно, потому что общие библиотеки требуют glibc, которая ещё не установлена в целевой системе.
2021-04-25 23:04:51 +08:00
2021-06-27 15:52:41 +08:00
`--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx` Эти переключатели отключают поддержку десятичных расширений с плавающей запятой, потоковой передачи, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции не будут скомпилированы при сборке кросс-компилятора и не являются необходимыми для кросс-компиляции временной libc.
2021-04-25 23:04:51 +08:00
2021-06-27 15:52:41 +08:00
`--enable-languages =c,c++` Эта опция гарантирует, что будут построены только компиляторы C и C++. Это единственные языки, которые нужны сейчас.
2021-04-25 23:04:51 +08:00
2021-06-26 20:02:42 +08:00
## Сборка
2021-04-25 23:04:51 +08:00
```bash
make
```
## Установка
2021-06-26 20:02:42 +08:00
2021-04-25 23:04:51 +08:00
```bash
2021-06-26 20:02:42 +08:00
make install
2021-04-25 23:04:51 +08:00
```
2021-06-27 15:52:41 +08:00
Создадим полную версию `limits.h` - заголовочного файла, в котором записаны лимиты:
2021-04-25 23:04:51 +08:00
```bash
cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LIN_TGT-gcc -print-libgcc-file-name)` /install-tools/include/limits.h
```