Lx4U-book/docs/cross-toolchain/gcc.md

158 lines
6.6 KiB
Markdown
Raw Normal View History

2021-04-25 23:04:51 +08:00
# {{ package.name }} v.{{ package.version }}
Описание: {{ package.description }}
2021-04-26 03:38:03 +08:00
Ссылка для загрузки: <a :href="package.url">{{ package.url}}</a>
2021-04-25 23:04:51 +08:00
Размер архива: {{ package.size }}
Имя файла: {{ package.fileName }}
md5-сумма файла: {{ package.md5 }}
2021-04-26 03:38:03 +08:00
Страница релизов: <a :href="package.releasesUrl">{{ package.releasesUrl}}</a>
2021-04-25 23:04:51 +08:00
2021-04-26 03:38:03 +08:00
Домашняя страница: <a :href="package.homeUrl">{{ package.homeUrl}}</a>
2021-04-25 23:04:51 +08:00
Приоритет: {{ package.priority }}
SBU: {{ package.sbu }}
<script>
new Vue({
el: '#main',
2021-04-26 03:38:03 +08:00
data: { package: {}, mpc: {}, mpfgr: {}, gmp : {}, isl: {} },
2021-04-25 23:04:51 +08:00
mounted: function () {
this.getPackage('gcc');
2021-04-26 03:38:03 +08:00
this.getMpc();
this.getMpfr();
this.getGmp();
this.getIsl();
2021-04-25 23:04:51 +08:00
},
methods: {
getPackage: function(name) {
getPackage(name)
.then(response => this.package = response);
2021-04-26 03:38:03 +08:00
},
getMpc: function() {
getPackage('mpc')
.then(response => this.mpc = response);
},
getMpfr: function() {
getPackage('mpfr')
.then(response => this.mpfgr = response);
},
getGmp: function() {
getPackage('gmp')
.then(response => this.gmp = response);
},
getIsl: function() {
getPackage('isl')
.then(response => this.isl = response);
},
2021-04-25 23:04:51 +08:00
}
})
</script>
## Дополнительные необходимые файлы
2021-04-26 03:38:03 +08:00
<a :href="mpc.url">{{ mpc.url}}</a>
2021-04-25 23:04:51 +08:00
2021-04-26 03:38:03 +08:00
<a :href="gmp.url">{{ gmp.url}}</a>
2021-04-25 23:04:51 +08:00
2021-04-26 03:38:03 +08:00
<a :href="mpfgr.url">{{ mpfgr.url}}</a>
2021-04-25 23:04:51 +08:00
2021-04-26 03:38:03 +08:00
<a :href="isl.url">{{ isl.url}}</a>
2021-04-25 23:04:51 +08:00
## Сборка
Сначала распакуйте дополнительные пакеты:
```bash
tar -xf ../mpfr-4.1.0.tar.xz
mv -v mpfr-4.1.0 mpfr
tar -xf ../gmp-6.2.1.tar.xz
mv -v gmp-6.2.1 gmp
tar -xf ../mpc-1.2.1.tar.gz
mv -v mpc-1.2.1 mpc
tar -xf ../isl-0.23.tar.xz
mv -v isl-0.23 isl
```
Смените пути установки библиотек:
```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
```
Документация gcc рекомендует использовать отдельную директорию для сборки:
```bash
mkdir bld
cd bld
```
Сначала запустим скрипт `configure`:
```bash
../configure \
--target=$LIN_TGT \
--prefix=$LIN/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LIN \
2021-04-25 23:04:51 +08:00
--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++ --disable-multilib
```
Для MultiLib замените параметр `--disable-multilib` на ` --enable-multilib --with-multilib-list=m64,m32`
### Объяснение
`--with-glibc-version = 2.11` Эта опция гарантирует, что пакет будет совместим с версией glibc на хосте. Для него установлено минимальное требование glibc, указанное в Требованиях к хост-системе.
`--with-newlib` Поскольку рабочая библиотеки C еще недоступна, это гарантирует, что константа ignit_libc определена при сборке libgcc. Это предотвращает компиляцию любого кода, требующего поддержки libc.
`--without-headers` При создании полного кросс-компилятора GCC требует стандартных заголовков, совместимых с целевой системой. Для наших целей эти заголовки не понадобятся. Этот переключатель предотвращает их поиск GCC.
`--enable-initfini-array` Этот переключатель заставляет использовать некоторые внутренние структуры данных, которые необходимы, но не могут быть обнаружены при построении кросс-компилятора.
`--disable-shared` Этот переключатель заставляет GCC связывать свои внутренние библиотеки статически. Нам это нужно, потому что общие библиотеки требуют glibc, которая еще не установлена ​​в целевой системе.
`--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx` Эти переключатели отключают поддержку десятичных расширений с плавающей запятой, потоковой передачи, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C ++ соответственно. Эти функции не будут скомпилированы при сборке кросс-компилятора и не являются необходимыми для кросс-компиляции временной libc.
`--enable-languages = c, c ++` Эта опция гарантирует, что будут построены только компиляторы C и C ++. Это единственные языки, которые нужны сейчас.
Далее скомпилируем пакет:
```bash
make
```
## Установка
Чтобы установить данный пакет, выполните:
```bash
make install
```
2021-04-26 14:51:48 +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
```