История изменений
Исправление yars068, (текущая версия) :
Кажется, скросс-скомпилировал :) Итак:
- Устанавливаем необходимые пакеты:
sudo pacman -Syu aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
-
Забираем нужный исходник:
pkgctl repo clone --protocol=https lzlib -
Делаем
makepkg -so; -
Насыпаем сверху патчик (имя файла патча должно быть как в изменённом PKGBUILD’е):
--- a/lzlib-1.15/configure 2025-01-09 02:22:51.000000000 +0300
+++ b/lzlib-1.15/configure 2025-07-07 21:18:04.210642166 +0300
@@ -30,8 +30,8 @@
infodir='$(datarootdir)/info'
libdir='$(exec_prefix)/lib'
mandir='$(datarootdir)/man'
-CC=gcc
-AR=ar
+CC=${CC:-gcc}
+AR=${AR:-ar}
CPPFLAGS=
CFLAGS='-Wall -W -O2'
LDFLAGS=
- Модифицируем PKGBUILD:
--- lzlib/PKGBUILD 2025-07-07 22:15:58.451086247 +0300
+++ lzlib-arm/PKGBUILD 2025-07-07 22:08:41.084673025 +0300
@@ -6,23 +6,43 @@
pkgver=1.15
pkgrel=1
pkgdesc="A library providing in-memory LZMA compression and decompression functions"
-arch=('x86_64')
+arch=('x86_64' 'aarch64')
url="http://www.nongnu.org/lzip/lzlib.html"
license=('BSD-2-Clause')
depends=('glibc')
-source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}
+ allow_redefine_CC_AR.patch)
+
sha256sums=('4afab907a46d5a7d14e927a1080c3f4d7e3ca5a0f9aea81747d8fed0292377ff'
- 'SKIP')
+ 'SKIP'
+ '6d907d121374d7d5e08280de70818c4b4cb60febe051868a2365edf4fe52fd43')
+
validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz
+prepare() {
+ if [ "x$arch" == "xaarch64" ] ; then
+ echo "Setting up the environment to cross-compile"
+ export CC=aarch64-linux-gnu-gcc
+ export CXX=aarch64-linux-gnu-g++
+ export AR=aarch64-linux-gnu-ar
+ export RANLIB=aarch64-linux-gnu-ranlib
+ fi
+ tar xf $pkgname-$pkgver.tar.gz
+ cd $pkgname-$pkgver
+ patch -p2 --verbose -i $srcdir/allow_redefine_CC_AR.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
+ --disable-ldconfig \
--enable-shared \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
+
make
+ make minilzip
}
check() {
-
Делаем
updpkgsums && makepkg --printsrcinfo > .SRCINFO -
Делаем
cat /etc/makepkg.conf > makepkg.conf. В файл надо внести следующие изменения:
@@ -35,14 +35,14 @@
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
-CARCH="x86_64"
+CARCH="aarch64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
-CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
+CFLAGS="-march=armv9-a -mtune=cortex-a76 -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
- -fstack-clash-protection -fcf-protection \
+ -fstack-clash-protection \
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
Обрати внимание на ключи -march, -mtune. Я не знаю, какой именно проц/SoC у тебя, так что поправь при необходимости. Известные gcc архитектуры и флаги компилятора можно подсмотреть в этом документике.
- И, наконец, пробуем собрать:
makepkg arch=aarch64 --nocheck --config makepkg.conf -fC.
Мне пришлось собирать с --nocheck, потому что пакет
pacman -Ql aarch64-linux-gnu-glibc | grep ld-linux
aarch64-linux-gnu-glibc /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
– почему-то у меня протухший, а QEMU слинкован уже со свежим, хотя я перед процессом обхода нецелованных граблей обновился. И вот тут, вероятно, будут следующие грабли. Я предупредил :)
Естественно, если собирать прямо на целевой тачке, телодвижений должно быть куда поменьше :) Вот что у меня получилось:
pacman -Qlp /tmp/lzlib-1.15-1-aarch64.pkg.tar.zst
lzlib /usr/
lzlib /usr/bin/
lzlib /usr/bin/minilzip
lzlib /usr/include/
lzlib /usr/include/lzlib.h
lzlib /usr/lib/
lzlib /usr/lib/liblz.a
lzlib /usr/lib/liblz.so
lzlib /usr/lib/liblz.so.1
lzlib /usr/lib/liblz.so.1.15
lzlib /usr/share/
lzlib /usr/share/info/
lzlib /usr/share/info/dir
lzlib /usr/share/info/lzlib.info
lzlib /usr/share/licenses/
lzlib /usr/share/licenses/lzlib/
lzlib /usr/share/licenses/lzlib/COPYING
lzlib /usr/share/man/
lzlib /usr/share/man/man1/
lzlib /usr/share/man/man1/minilzip.1
Пакет какое-то время должен лежат тута.
UPD. Если кто-нибудь ещё подскажет, почему это make на x86_64 отрабатывает как положено, собирает пакет полностью, а при кросс-компиляции не собирается minilzip, но при этом он собирается отдельным вызвом make, будет супер.
Исправление yars068, :
Кажется, скросс-скомпилировал :) Итак:
- Устанавливаем необходимые пакеты:
sudo pacman -Syu aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
-
Забираем нужный исходник:
pkgctl repo clone --protocol=https lzlib -
Делаем
makepkg -so; -
Насыпаем сверху патчик (имя файла патча должно быть как в изменённом PKGBUILD’е):
--- a/lzlib-1.15/configure 2025-01-09 02:22:51.000000000 +0300
+++ b/lzlib-1.15/configure 2025-07-07 21:18:04.210642166 +0300
@@ -30,8 +30,8 @@
infodir='$(datarootdir)/info'
libdir='$(exec_prefix)/lib'
mandir='$(datarootdir)/man'
-CC=gcc
-AR=ar
+CC=${CC:-gcc}
+AR=${AR:-ar}
CPPFLAGS=
CFLAGS='-Wall -W -O2'
LDFLAGS=
- Модифицируем PKGBUILD:
--- lzlib/PKGBUILD 2025-07-07 22:15:58.451086247 +0300
+++ lzlib-arm/PKGBUILD 2025-07-07 22:08:41.084673025 +0300
@@ -6,23 +6,43 @@
pkgver=1.15
pkgrel=1
pkgdesc="A library providing in-memory LZMA compression and decompression functions"
-arch=('x86_64')
+arch=('x86_64' 'aarch64')
url="http://www.nongnu.org/lzip/lzlib.html"
license=('BSD-2-Clause')
depends=('glibc')
-source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}
+ allow_redefine_CC_AR.patch)
+
sha256sums=('4afab907a46d5a7d14e927a1080c3f4d7e3ca5a0f9aea81747d8fed0292377ff'
- 'SKIP')
+ 'SKIP'
+ '6d907d121374d7d5e08280de70818c4b4cb60febe051868a2365edf4fe52fd43')
+
validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz
+prepare() {
+ if [ "x$arch" == "xaarch64" ] ; then
+ echo "Setting up the environment to cross-compile"
+ export CC=aarch64-linux-gnu-gcc
+ export CXX=aarch64-linux-gnu-g++
+ export AR=aarch64-linux-gnu-ar
+ export RANLIB=aarch64-linux-gnu-ranlib
+ fi
+ tar xf $pkgname-$pkgver.tar.gz
+ cd $pkgname-$pkgver
+ patch -p2 --verbose -i $srcdir/allow_redefine_CC_AR.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
+ --disable-ldconfig \
--enable-shared \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
+
make
+ make minilzip
}
check() {
-
Делаем
updpkgsums && makepkg --printsrcinfo > .SRCINFO -
Делаем
cat /etc/makepkg.conf > makepkg.conf. В файл надо внести следующие изменения:
@@ -35,14 +35,14 @@
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
-CARCH="x86_64"
+CARCH="aarch64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
-CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
+CFLAGS="-march=armv9-a -mtune=cortex-a76 -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
- -fstack-clash-protection -fcf-protection \
+ -fstack-clash-protection \
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
Обрати внимание на ключи -march, -mtune. Я не знаю, какой именно проц/SoC у тебя, так что поправь при необходимости. Известные gcc архитектуры и флаги компилятора можно подсмотреть в этом документике.
- И, наконец, пробуем собрать:
makepkg arch=aarch64 --nocheck --config makepkg.conf -fC.
Мне пришлось собирать с --nocheck, потому что пакет
pacman -Ql aarch64-linux-gnu-glibc | grep ld-linux
aarch64-linux-gnu-glibc /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
– почему-то у меня протухший, а QEMU слинкован уже со свежим, хотя я перед процессом обхода нецелованных граблей обновился. И вот тут, вероятно, будут следующие грабли. Я предупредил :)
Естественно, если собирать прямо на целевой тачке, телодвижений должно быть куда поменьше :) Вот что у меня получилось:
pacman -Qlp /tmp/lzlib-1.15-1-aarch64.pkg.tar.zst
lzlib /usr/
lzlib /usr/bin/
lzlib /usr/bin/minilzip
lzlib /usr/include/
lzlib /usr/include/lzlib.h
lzlib /usr/lib/
lzlib /usr/lib/liblz.a
lzlib /usr/lib/liblz.so
lzlib /usr/lib/liblz.so.1
lzlib /usr/lib/liblz.so.1.15
lzlib /usr/share/
lzlib /usr/share/info/
lzlib /usr/share/info/dir
lzlib /usr/share/info/lzlib.info
lzlib /usr/share/licenses/
lzlib /usr/share/licenses/lzlib/
lzlib /usr/share/licenses/lzlib/COPYING
lzlib /usr/share/man/
lzlib /usr/share/man/man1/
lzlib /usr/share/man/man1/minilzip.1
Пакет какое-то время должен лежат тута.
Исправление yars068, :
Кажется, скросс-скомпилировал :) Итак:
- Устанавливаем необходимые пакеты:
sudo pacman -Syu aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
-
Забираем нужный исходник:
pkgctl repo clone --protocol=https lzlib -
Делаем
makepkg -so; -
Насыпаем сверху патчик (имя файла патча должно быть как в изменённом PKGBUILD’е):
--- a/lzlib-1.15/configure 2025-01-09 02:22:51.000000000 +0300
+++ b/lzlib-1.15/configure 2025-07-07 21:18:04.210642166 +0300
@@ -30,8 +30,8 @@
infodir='$(datarootdir)/info'
libdir='$(exec_prefix)/lib'
mandir='$(datarootdir)/man'
-CC=gcc
-AR=ar
+CC=${CC:-gcc}
+AR=${AR:-ar}
CPPFLAGS=
CFLAGS='-Wall -W -O2'
LDFLAGS=
- Модифицируем PKGBUILD:
--- lzlib/PKGBUILD 2025-07-07 22:15:58.451086247 +0300
+++ lzlib-arm/PKGBUILD 2025-07-07 22:08:41.084673025 +0300
@@ -6,23 +6,43 @@
pkgver=1.15
pkgrel=1
pkgdesc="A library providing in-memory LZMA compression and decompression functions"
-arch=('x86_64')
+arch=('x86_64' 'aarch64')
url="http://www.nongnu.org/lzip/lzlib.html"
license=('BSD-2-Clause')
depends=('glibc')
-source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}
+ allow_redefine_CC_AR.patch)
+
sha256sums=('4afab907a46d5a7d14e927a1080c3f4d7e3ca5a0f9aea81747d8fed0292377ff'
- 'SKIP')
+ 'SKIP'
+ '6d907d121374d7d5e08280de70818c4b4cb60febe051868a2365edf4fe52fd43')
+
validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz
+prepare() {
+ if [ "x$arch" == "xaarch64" ] ; then
+ echo "Setting up the environment to cross-compile"
+ export CC=aarch64-linux-gnu-gcc
+ export CXX=aarch64-linux-gnu-g++
+ export AR=aarch64-linux-gnu-ar
+ export RANLIB=aarch64-linux-gnu-ranlib
+ fi
+ tar xf $pkgname-$pkgver.tar.gz
+ cd $pkgname-$pkgver
+ patch -p2 --verbose -i $srcdir/allow_redefine_CC_AR.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
+ --disable-ldconfig \
--enable-shared \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
+
make
+ make minilzip
}
check() {
-
Делаем
updpkgsums && makepkg --printsrcinfo > .SRCINFO -
Делаем
cat /etc/makepkg.conf > makepkg.conf. В файл надо внести следующие изменения:
@@ -35,14 +35,14 @@
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
-CARCH="x86_64"
+CARCH="aarch64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
-CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
+CFLAGS="-march=armv9-a -mtune=cortex-a76 -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
- -fstack-clash-protection -fcf-protection \
+ -fstack-clash-protection \
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
Обрати внимание на ключи -march, -mtune. Я не знаю, какой именно проц/SoC у тебя, так что поправь при необходимости. Известные gcc архитектуры и флаги компилятора можно подсмотреть в этом документике.
- И, наконец, пробуем собрать:
makepkg arch=aarch64 --nocheck --config makepkg.conf -fC.
Мне пришлось собирать с --nocheck, потому что пакет
pacman -Ql aarch64-linux-gnu-glibc | grep ld-linux
aarch64-linux-gnu-glibc /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
– почему-то у меня протухший, а QEMU слинкован уже со свежим, хотя я перед процессом обхода нецелованных граблей обновился. И вот тут, вероятно, будут следующие грабли. Я предупредил :)
И вот что у меня получилось:
pacman -Qlp /tmp/lzlib-1.15-1-aarch64.pkg.tar.zst
lzlib /usr/
lzlib /usr/bin/
lzlib /usr/bin/minilzip
lzlib /usr/include/
lzlib /usr/include/lzlib.h
lzlib /usr/lib/
lzlib /usr/lib/liblz.a
lzlib /usr/lib/liblz.so
lzlib /usr/lib/liblz.so.1
lzlib /usr/lib/liblz.so.1.15
lzlib /usr/share/
lzlib /usr/share/info/
lzlib /usr/share/info/dir
lzlib /usr/share/info/lzlib.info
lzlib /usr/share/licenses/
lzlib /usr/share/licenses/lzlib/
lzlib /usr/share/licenses/lzlib/COPYING
lzlib /usr/share/man/
lzlib /usr/share/man/man1/
lzlib /usr/share/man/man1/minilzip.1
Пакет какое-то время должен лежат тута.
Исправление yars068, :
Кажется, скросс-скомпилировал :) Итак:
- Устанавливаем необходимые пакеты:
sudo pacman -Syu aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
-
Забираем нужный исходник:
pkgctl repo clone --protocol=https lzlib -
Делаем
makepkg -so; -
Насыпаем сверху патчик (имя файла патча должно быть как в изменённом PKGBUILD’е):
--- a/lzlib-1.15/configure 2025-01-09 02:22:51.000000000 +0300
+++ b/lzlib-1.15/configure 2025-07-07 21:18:04.210642166 +0300
@@ -30,8 +30,8 @@
infodir='$(datarootdir)/info'
libdir='$(exec_prefix)/lib'
mandir='$(datarootdir)/man'
-CC=gcc
-AR=ar
+CC=${CC:-gcc}
+AR=${AR:-ar}
CPPFLAGS=
CFLAGS='-Wall -W -O2'
LDFLAGS=
- Модифицируем PKGBUILD:
--- lzlib/PKGBUILD 2025-07-07 22:15:58.451086247 +0300
+++ lzlib-arm/PKGBUILD 2025-07-07 22:08:41.084673025 +0300
@@ -6,23 +6,43 @@
pkgver=1.15
pkgrel=1
pkgdesc="A library providing in-memory LZMA compression and decompression functions"
-arch=('x86_64')
+arch=('x86_64' 'aarch64')
url="http://www.nongnu.org/lzip/lzlib.html"
license=('BSD-2-Clause')
depends=('glibc')
-source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}
+ allow_redefine_CC_AR.patch)
+
sha256sums=('4afab907a46d5a7d14e927a1080c3f4d7e3ca5a0f9aea81747d8fed0292377ff'
- 'SKIP')
+ 'SKIP'
+ '6d907d121374d7d5e08280de70818c4b4cb60febe051868a2365edf4fe52fd43')
+
validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz
+prepare() {
+ if [ "x$arch" == "xaarch64" ] ; then
+ echo "Setting up the environment to cross-compile"
+ export CC=aarch64-linux-gnu-gcc
+ export CXX=aarch64-linux-gnu-g++
+ export AR=aarch64-linux-gnu-ar
+ export RANLIB=aarch64-linux-gnu-ranlib
+ fi
+ tar xf $pkgname-$pkgver.tar.gz
+ cd $pkgname-$pkgver
+ patch -p2 --verbose -i $srcdir/allow_redefine_CC_AR.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
+ --disable-ldconfig \
--enable-shared \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
+
make
+ make minilzip
}
check() {
-
Делаем
updpkgsums && makepkg --printsrcinfo > .SRCINFO -
Делаем
cat /etc/makepkg.conf > makepkg.conf. В файл надо внести следующие изменения:
@@ -35,14 +35,14 @@
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
-CARCH="x86_64"
+CARCH="aarch64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
-CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
+CFLAGS="-march=armv9-a -mtune=cortex-a76 -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
- -fstack-clash-protection -fcf-protection \
+ -fstack-clash-protection \
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
Обрати внимание на ключи -march, -mtune. Я не знаю, какой именно проц/SoC у тебя, так что поправь при необходимости.
- И, наконец, пробуем собрать:
makepkg arch=aarch64 --nocheck --config makepkg.conf -fC.
Мне пришлось собирать с --nocheck, потому что пакет
pacman -Ql aarch64-linux-gnu-glibc | grep ld-linux
aarch64-linux-gnu-glibc /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
– почему-то у меня протухший, а QEMU слинкован уже со свежим, хотя я перед процессом обхода нецелованных граблей обновился. И вот тут, вероятно, будут следующие грабли. Я предупредил :)
И вот что у меня получилось:
pacman -Qlp /tmp/lzlib-1.15-1-aarch64.pkg.tar.zst
lzlib /usr/
lzlib /usr/bin/
lzlib /usr/bin/minilzip
lzlib /usr/include/
lzlib /usr/include/lzlib.h
lzlib /usr/lib/
lzlib /usr/lib/liblz.a
lzlib /usr/lib/liblz.so
lzlib /usr/lib/liblz.so.1
lzlib /usr/lib/liblz.so.1.15
lzlib /usr/share/
lzlib /usr/share/info/
lzlib /usr/share/info/dir
lzlib /usr/share/info/lzlib.info
lzlib /usr/share/licenses/
lzlib /usr/share/licenses/lzlib/
lzlib /usr/share/licenses/lzlib/COPYING
lzlib /usr/share/man/
lzlib /usr/share/man/man1/
lzlib /usr/share/man/man1/minilzip.1
Пакет какое-то время должен лежат тута.
Исходная версия yars068, :
Кажется, скросс-скомпилировал :) Итак: 0. Устанавливаем необходимые пакеты:
sudo pacman -Syu aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc aarch64-linux-gnu-glibc aarch64-linux-gnu-linux-api-headers
-
Забираем нужный исходник:
pkgctl repo clone --protocol=https lzlib -
Делаем
makepkg -so; -
Насыпаем сверху патчик (имя файла патча должно быть как в изменённом PKGBUILD’е):
--- a/lzlib-1.15/configure 2025-01-09 02:22:51.000000000 +0300
+++ b/lzlib-1.15/configure 2025-07-07 21:18:04.210642166 +0300
@@ -30,8 +30,8 @@
infodir='$(datarootdir)/info'
libdir='$(exec_prefix)/lib'
mandir='$(datarootdir)/man'
-CC=gcc
-AR=ar
+CC=${CC:-gcc}
+AR=${AR:-ar}
CPPFLAGS=
CFLAGS='-Wall -W -O2'
LDFLAGS=
- Модифицируем PKGBUILD:
--- lzlib/PKGBUILD 2025-07-07 22:15:58.451086247 +0300
+++ lzlib-arm/PKGBUILD 2025-07-07 22:08:41.084673025 +0300
@@ -6,23 +6,43 @@
pkgver=1.15
pkgrel=1
pkgdesc="A library providing in-memory LZMA compression and decompression functions"
-arch=('x86_64')
+arch=('x86_64' 'aarch64')
url="http://www.nongnu.org/lzip/lzlib.html"
license=('BSD-2-Clause')
depends=('glibc')
-source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig})
+source=(https://download.savannah.gnu.org/releases/lzip/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}
+ allow_redefine_CC_AR.patch)
+
sha256sums=('4afab907a46d5a7d14e927a1080c3f4d7e3ca5a0f9aea81747d8fed0292377ff'
- 'SKIP')
+ 'SKIP'
+ '6d907d121374d7d5e08280de70818c4b4cb60febe051868a2365edf4fe52fd43')
+
validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz
+prepare() {
+ if [ "x$arch" == "xaarch64" ] ; then
+ echo "Setting up the environment to cross-compile"
+ export CC=aarch64-linux-gnu-gcc
+ export CXX=aarch64-linux-gnu-g++
+ export AR=aarch64-linux-gnu-ar
+ export RANLIB=aarch64-linux-gnu-ranlib
+ fi
+ tar xf $pkgname-$pkgver.tar.gz
+ cd $pkgname-$pkgver
+ patch -p2 --verbose -i $srcdir/allow_redefine_CC_AR.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure \
--prefix=/usr \
+ --disable-ldconfig \
--enable-shared \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS"
+
make
+ make minilzip
}
check() {
-
Делаем
updpkgsums && makepkg --printsrcinfo > .SRCINFO -
Делаем
cat /etc/makepkg.conf > makepkg.conf. В файл надо внести следующие изменения:
@@ -35,14 +35,14 @@
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
-CARCH="x86_64"
+CARCH="aarch64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
#CPPFLAGS=""
-CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
+CFLAGS="-march=armv9-a -mtune=cortex-a76 -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
- -fstack-clash-protection -fcf-protection \
+ -fstack-clash-protection \
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
Обрати внимание на ключи -march, -mtune. Я не знаю, какой именно проц/SoC у тебя, так что поправь при необходимости.
- И, наконец, пробуем собрать:
makepkg arch=aarch64 --nocheck --config makepkg.conf -fC.
Мне пришлось собирать с --nocheck, потому что пакет
pacman -Ql aarch64-linux-gnu-glibc | grep ld-linux
aarch64-linux-gnu-glibc /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
– почему-то у меня протухший, а QEMU слинкован уже со свежим, хотя я перед процессом обхода нецелованных граблей обновился. И вот тут, вероятно, будут следующие грабли. Я предупредил :)
И вот что у меня получилось:
pacman -Qlp /tmp/lzlib-1.15-1-aarch64.pkg.tar.zst
lzlib /usr/
lzlib /usr/bin/
lzlib /usr/bin/minilzip
lzlib /usr/include/
lzlib /usr/include/lzlib.h
lzlib /usr/lib/
lzlib /usr/lib/liblz.a
lzlib /usr/lib/liblz.so
lzlib /usr/lib/liblz.so.1
lzlib /usr/lib/liblz.so.1.15
lzlib /usr/share/
lzlib /usr/share/info/
lzlib /usr/share/info/dir
lzlib /usr/share/info/lzlib.info
lzlib /usr/share/licenses/
lzlib /usr/share/licenses/lzlib/
lzlib /usr/share/licenses/lzlib/COPYING
lzlib /usr/share/man/
lzlib /usr/share/man/man1/
lzlib /usr/share/man/man1/minilzip.1
Пакет какое-то время должен лежат тута.