Skip to content

Commit 331175c

Browse files
committed
test build with new builder
1 parent cd3421f commit 331175c

7 files changed

+187
-87
lines changed

gpkg/gcc-libs-dev-glibc32/build.sh

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
TERMUX_PKG_HOMEPAGE=https://gcc.gnu.org/
2+
TERMUX_PKG_DESCRIPTION="Runtime libraries shipped by GCC on a 32-bit basis (temporary package)"
3+
TERMUX_PKG_LICENSE="GPL-3.0"
4+
TERMUX_PKG_MAINTAINER="@termux-pacman"
5+
TERMUX_PKG_VERSION=14.2.1
6+
TERMUX_PKG_SKIP_SRC_EXTRACT=true
7+
TERMUX_PKG_BLACKLISTED_ARCHES="arm, i686"
8+
9+
termux_step_make_install() {
10+
(
11+
termux_set_crosses_arch
12+
mkdir -p ${TERMUX_LIB32_PATH}
13+
cp -r ${CGCT_DIR}/${TERMUX_ARCH}/lib/lib* ${TERMUX_LIB32_PATH}
14+
)
15+
}

gpkg/glibc/build.sh

+43-74
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,7 @@ TERMUX_PKG_RECOMMENDS="glibc-runner"
1111
TERMUX_PKG_NO_STATICSPLIT=true
1212
TERMUX_PKG_CONFFILES="glibc/etc/gai.conf, glibc/etc/locale.gen"
1313
TERMUX_PKG_SEPARATE_SUB_DEPENDS=true
14-
15-
# Variables for glibc32 compilation
16-
TERMUX_PKG_BUILD32=$(test "$TERMUX_ARCH" = "aarch64" || test "$TERMUX_ARCH" = "arm" && \
17-
test "$TERMUX_ON_DEVICE_BUILD" = "false" && echo "true" || echo "false")
18-
TERMUX_PKG_BUILDDIR32="${TERMUX_TOPDIR}/${TERMUX_PKG_NAME}/build32"
19-
#if [ "$TERMUX_PKG_BUILD32" = "true" ]; then
20-
# TERMUX_PKG_BUILD_DEPENDS="glibc32"
21-
#fi
22-
23-
termux_setup_build32() {
24-
case $TERMUX_ARCH in
25-
"aarch64")
26-
TERMUX_ARCH="arm"
27-
TERMUX_HOST_PLATFORM="arm-linux-gnueabihf";;
28-
"x86_64")
29-
TERMUX_ARCH="i686"
30-
TERMUX_HOST_PLATFORM="i686-linux-gnu";;
31-
esac
32-
termux_step_setup_toolchain
33-
cd ${TERMUX_PKG_BUILDDIR32}
34-
}
14+
TERMUX_PKG_BUILD32=true
3515

3616
termux_step_pre_configure() {
3717
if [ "$TERMUX_PACKAGE_LIBRARY" != "glibc" ]; then
@@ -112,8 +92,8 @@ termux_step_pre_configure() {
11292

11393
# replacing some hard paths that may not exist in some device
11494
for i in /dev/stderr:/proc/self/fd/2 \
115-
/dev/stdin:/proc/self/fd/0 \
116-
/dev/stdout:/proc/self/fd/1; do
95+
/dev/stdin:/proc/self/fd/0 \
96+
/dev/stdout:/proc/self/fd/1; do
11797
for j in $(grep -s -r -l ${i%%:*} ${TERMUX_PKG_SRCDIR}); do
11898
sed -i "s|${i%%:*}|${i//*:}|g" ${j}
11999
done
@@ -124,20 +104,16 @@ termux_step_pre_configure() {
124104

125105
# specifying the current release (use only when developing glibc)
126106
sed -i "s/stable/dev.$(git -C ${TERMUX_PKG_BUILDER_DIR} rev-parse --short HEAD).$(date +%Y%m%d%H%M%S)/" ${TERMUX_PKG_SRCDIR}/version.h
127-
128-
if [ "$TERMUX_PKG_BUILD32" = "true" ]; then
129-
rm -fr ${TERMUX_PKG_BUILDDIR32}
130-
mkdir -p ${TERMUX_PKG_BUILDDIR32}
131-
fi
132107
}
133108

134-
termux_glibc_configure() {
135-
local libdir="${1}"
136-
137-
echo "slibdir=${TERMUX_PREFIX}/${libdir}" > configparms
138-
echo "rtlddir=${TERMUX_PREFIX}/${libdir}" >> configparms
109+
termux_step_configure() {
110+
echo "slibdir=${TERMUX_LIB_PATH}" > configparms
111+
echo "rtlddir=${TERMUX_LIB_PATH}" >> configparms
139112
echo "sbindir=${TERMUX_PREFIX}/bin" >> configparms
140113
echo "rootsbindir=${TERMUX_PREFIX}/bin" >> configparms
114+
if [ "$TERMUX_ARCH" != "$TERMUX_REAL_ARCH" ]; then
115+
echo 'build-programs=no' >> configparms
116+
fi
141117

142118
local _configure_flags=()
143119
case $TERMUX_ARCH in
@@ -153,8 +129,8 @@ termux_glibc_configure() {
153129

154130
${TERMUX_PKG_SRCDIR}/configure \
155131
--prefix=$TERMUX_PREFIX \
156-
--libdir=${TERMUX_PREFIX}/${libdir} \
157-
--libexecdir=${TERMUX_PREFIX}/${libdir} \
132+
--libdir=$TERMUX_LIB_PATH \
133+
--libexecdir=$TERMUX_LIB_PATH \
158134
--host=$TERMUX_HOST_PLATFORM \
159135
--build=$TERMUX_HOST_PLATFORM \
160136
--target=$TERMUX_HOST_PLATFORM \
@@ -171,35 +147,17 @@ termux_glibc_configure() {
171147
"${_configure_flags[@]}"
172148
}
173149

174-
termux_step_configure() {
175-
termux_glibc_configure "lib"
176-
177-
if [ "$TERMUX_PKG_BUILD32" = "true" ]; then
178-
(
179-
termux_setup_build32
180-
termux_glibc_configure "lib32"
181-
echo 'build-programs=no' >> configparms
182-
)
183-
fi
184-
}
185-
186150
termux_step_make() {
187151
make -O
188-
make info
189-
190-
if [ "$TERMUX_PKG_BUILD32" = "true" ]; then
191-
(
192-
termux_setup_build32
193-
make -O
194-
)
152+
if [ "$TERMUX_ARCH" = "$TERMUX_REAL_ARCH" ]; then
153+
make info
195154
fi
196155
}
197156

198157
termux_glibc_make_syscall_without_fsc() {
199158
local libname="libsyscall_without_fsc.so"
200-
local libdir="$1"
201159
echo "Compiling '${libname}'..."
202-
$CC ${TERMUX_PKG_BUILDER_DIR}/syscall.c -o ${TERMUX_PREFIX}/${libdir}/${libname} \
160+
$CC ${TERMUX_PKG_BUILDER_DIR}/syscall.c -o ${TERMUX_LIB_PATH}/${libname} \
203161
-shared -DWITHOUT_FAKESYSCALL
204162
echo "DONE"
205163
}
@@ -210,11 +168,11 @@ termux_step_make_install() {
210168
make install_root="/" install
211169

212170
rm -f ${TERMUX_PREFIX}/etc/ld.so.cache
213-
rm -f ${TERMUX_PREFIX}/bin/{tzselect,zdump,zic}
171+
#rm -f ${TERMUX_PREFIX}/bin/{tzselect,zdump,zic}
214172

215-
install -dm755 ${TERMUX_PREFIX}/lib/tmpfiles.d
173+
install -dm755 ${TERMUX_LIB_PATH}/tmpfiles.d
216174
install -m644 ${TERMUX_PKG_SRCDIR}/nscd/nscd.conf ${TERMUX_PREFIX}/etc/nscd.conf
217-
install -m644 ${TERMUX_PKG_SRCDIR}/nscd/nscd.tmpfiles ${TERMUX_PREFIX}/lib/tmpfiles.d/nscd.conf
175+
install -m644 ${TERMUX_PKG_SRCDIR}/nscd/nscd.tmpfiles ${TERMUX_LIB_PATH}/tmpfiles.d/nscd.conf
218176
install -m644 ${TERMUX_PKG_SRCDIR}/posix/gai.conf ${TERMUX_PREFIX}/etc/gai.conf
219177
install -m755 ${TERMUX_PKG_BUILDER_DIR}/locale-gen ${TERMUX_PREFIX}/bin
220178
sed -i "s|@TERMUX_PREFIX@|$TERMUX_PREFIX|g; s|@TERMUX_PREFIX_CLASSICAL@|$TERMUX_PREFIX_CLASSICAL|g" \
@@ -227,7 +185,7 @@ termux_step_make_install() {
227185
sed -e '1,3d' -e 's|/| |g' -e 's| \\||g' \
228186
${TERMUX_PKG_SRCDIR}/localedata/SUPPORTED > ${TERMUX_PREFIX}/share/i18n/SUPPORTED
229187

230-
install -dm755 ${TERMUX_PREFIX}/lib/locale
188+
install -dm755 ${TERMUX_LIB_PATH}/locale
231189
make -C ${TERMUX_PKG_SRCDIR}/localedata objdir=${TERMUX_PKG_BUILDDIR} \
232190
SUPPORTED-LOCALES="C.UTF-8/UTF-8 en_US.UTF-8/UTF-8" install-locale-files
233191
sed -i '/#C\.UTF-8 /d' ${TERMUX_PREFIX}/etc/locale.gen
@@ -236,24 +194,35 @@ termux_step_make_install() {
236194
install -Dm644 ${TERMUX_PKG_BUILDER_DIR}/sdt-config.h ${TERMUX_PREFIX}/include/sys/sdt-config.h
237195

238196
ln -sfr $PATH_DYNAMIC_LINKER ${TERMUX_PREFIX}/bin/ld.so
239-
ln -sfr $PATH_DYNAMIC_LINKER ${TERMUX_PREFIX}/lib/ld.so
197+
ln -sfr $PATH_DYNAMIC_LINKER ${TERMUX_LIB_PATH}/ld.so
240198

241-
termux_glibc_make_syscall_without_fsc "lib"
242-
243-
if [ "$TERMUX_PKG_BUILD32" = "true" ]; then
244-
(
245-
termux_setup_build32
199+
termux_glibc_make_syscall_without_fsc
200+
}
246201

247-
make DESTDIR=${TERMUX_PKG_BUILDDIR32} install
202+
termux_step_make_install32() {
203+
make DESTDIR=${TERMUX_PKG_BUILD32DIR} install
204+
205+
echo "Sorting headers for include32..."
206+
local hpath
207+
for hpath in $(find ${TERMUX_PKG_BUILD32DIR}/${TERMUX_PREFIX}/include -type f); do
208+
local h=$(sed "s|${TERMUX_PKG_BUILD32DIR}/${TERMUX_PREFIX}/include/||g" <<< "$hpath")
209+
if [ -f "${TERMUX_PREFIX}/include/${h}" ] && \
210+
[ $(md5sum "${hpath}" | awk '{printf $1}') = $(md5sum "${TERMUX_PREFIX}/include/${h}" | awk '{printf $1}') ]; then
211+
rm "${hpath}"
212+
fi
213+
done
214+
find ${TERMUX_PKG_BUILD32DIR}/${TERMUX_PREFIX}/include -type d -empty -delete
215+
echo "DONE"
248216

249-
cp -r ${TERMUX_PKG_BUILDDIR32}/${TERMUX_PREFIX}/lib32 $TERMUX_PREFIX
217+
cp -r ${TERMUX_PKG_BUILD32DIR}/${TERMUX_LIB_PATH} $TERMUX_PREFIX
218+
install -dm755 ${TERMUX_PREFIX}/include32
219+
cp -r ${TERMUX_PKG_BUILD32DIR}/${TERMUX_PREFIX}/include/* ${TERMUX_PREFIX}/include32
250220

251-
ln -sfr ${TERMUX_PREFIX}/lib/locale ${TERMUX_PREFIX}/lib32/locale
221+
ln -sfr ${TERMUX_LIB64_PATH}/locale ${TERMUX_LIB_PATH}/locale
252222

253-
ln -sfr ${TERMUX_PREFIX}/lib32/${DYNAMIC_LINKER} $PATH_DYNAMIC_LINKER
254-
ln -sfr ${TERMUX_PREFIX}/lib32/${DYNAMIC_LINKER} ${TERMUX_PREFIX}/lib32/ld.so
223+
ln -sfr ${TERMUX_LIB_PATH}/${DYNAMIC_LINKER} $PATH_DYNAMIC_LINKER
224+
ln -sfr ${TERMUX_LIB_PATH}/${DYNAMIC_LINKER} ${TERMUX_PREFIX}/bin/ld32.so
225+
ln -sfr ${TERMUX_LIB_PATH}/${DYNAMIC_LINKER} ${TERMUX_LIB_PATH}/ld.so
255226

256-
termux_glibc_make_syscall_without_fsc "lib32"
257-
)
258-
fi
227+
termux_glibc_make_syscall_without_fsc
259228
}

gpkg/glibc/fakesyscall.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@
5656
"get_mempolicy",
5757
"set_mempolicy",
5858
"mq_open",
59-
"rt_sigreturn"
59+
"rt_sigreturn",
60+
"semget",
61+
"semctl",
62+
"semtimedop",
63+
"semtimedop_time64"
6064
]
6165
}

gpkg/glibc/glibc32.subpackage.sh

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
TERMUX_SUBPKG_DESCRIPTION="GNU C Library (32-bit)"
2-
TERMUX_SUBPKG_DEPENDS="linux-api-headers-glibc"
2+
TERMUX_SUBPKG_DEPENDS="glibc"
33
TERMUX_SUBPKG_EXCLUDED_ARCHES="arm, i686"
44
TERMUX_SUBPKG_INCLUDE="
5+
glibc/bin/ld32.so
56
glibc/lib32/
67
glibc/lib/ld-linux-armhf.so.3
7-
glibc/lib/ld-linux.so.2"
8+
glibc/lib/ld-linux.so.2
9+
glibc/include32/
10+
"

gpkg/glibc/set-fakesyscalls.patch

+83
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,89 @@ index 730059d7..23ec12ad 100644
8181
- return SYSCALL_CANCEL (open_by_handle_at, mount_fd, handle, flags);
8282
+ return syscall (__NR_open_by_handle_at, mount_fd, handle, flags);
8383
}
84+
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c
85+
index c57fceab..0da2d1d7 100644
86+
--- a/sysdeps/unix/sysv/linux/semctl.c
87+
+++ b/sysdeps/unix/sysv/linux/semctl.c
88+
@@ -21,6 +21,7 @@
89+
#include <sysdep.h>
90+
#include <shlib-compat.h>
91+
#include <linux/posix_types.h> /* For __kernel_mode_t. */
92+
+#include <fakesyscall.h>
93+
94+
/* The struct used to issue the syscall. For architectures that assume
95+
64-bit time as default (!__ASSUME_TIME64_SYSCALLS) the syscall will
96+
@@ -121,7 +122,7 @@ static int
97+
semctl_syscall (int semid, int semnum, int cmd, semctl_arg_t arg)
98+
{
99+
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
100+
- return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd | __IPC_64,
101+
+ return syscall (__NR_semctl, semid, semnum, cmd | __IPC_64,
102+
arg.array);
103+
#else
104+
return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
105+
@@ -388,7 +389,7 @@ __old_semctl (int semid, int semnum, int cmd, ...)
106+
/* For architectures that have wire-up semctl but also have __IPC_64 to a
107+
value different than default (0x0) it means the compat symbol used the
108+
__NR_ipc syscall. */
109+
- return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array);
110+
+ return syscall (__NR_semctl, semid, semnum, cmd, arg.array);
111+
# else
112+
return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd,
113+
SEMCTL_ARG_ADDRESS (arg));
114+
diff --git a/sysdeps/unix/sysv/linux/semget.c b/sysdeps/unix/sysv/linux/semget.c
115+
index 26d00467..9675de7a 100644
116+
--- a/sysdeps/unix/sysv/linux/semget.c
117+
+++ b/sysdeps/unix/sysv/linux/semget.c
118+
@@ -19,6 +19,7 @@
119+
#include <ipc_priv.h>
120+
#include <sysdep.h>
121+
#include <errno.h>
122+
+#include <fakesyscall.h>
123+
124+
/* Return identifier for array of NSEMS semaphores associated with
125+
KEY. */
126+
@@ -27,7 +28,7 @@ int
127+
semget (key_t key, int nsems, int semflg)
128+
{
129+
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
130+
- return INLINE_SYSCALL_CALL (semget, key, nsems, semflg);
131+
+ return syscall (__NR_semget, key, nsems, semflg);
132+
#else
133+
return INLINE_SYSCALL_CALL (ipc, IPCOP_semget, key, nsems, semflg, NULL);
134+
#endif
135+
diff --git a/sysdeps/unix/sysv/linux/semtimedop.c b/sysdeps/unix/sysv/linux/semtimedop.c
136+
index 181289fa..e503f813 100644
137+
--- a/sysdeps/unix/sysv/linux/semtimedop.c
138+
+++ b/sysdeps/unix/sysv/linux/semtimedop.c
139+
@@ -19,15 +19,16 @@
140+
#include <ipc_priv.h>
141+
#include <sysdep.h>
142+
#include <errno.h>
143+
+#include <fakesyscall.h>
144+
145+
static int
146+
semtimedop_syscall (int semid, struct sembuf *sops, size_t nsops,
147+
const struct __timespec64 *timeout)
148+
{
149+
#ifdef __NR_semtimedop_time64
150+
- return INLINE_SYSCALL_CALL (semtimedop_time64, semid, sops, nsops, timeout);
151+
+ return syscall (__NR_semtimedop_time64, semid, sops, nsops, timeout);
152+
#elif defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS && defined __NR_semtimedop
153+
- return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
154+
+ return syscall (__NR_semtimedop, semid, sops, nsops, timeout);
155+
#else
156+
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid,
157+
SEMTIMEDOP_IPC_ARGS (nsops, sops, timeout));
158+
@@ -59,7 +60,7 @@ __semtimedop64 (int semid, struct sembuf *sops, size_t nsops,
159+
pts32 = &ts32;
160+
}
161+
# ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
162+
- return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, pts32);
163+
+ return syscall (__NR_semtimedop, semid, sops, nsops, pts32);
164+
# else
165+
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid,
166+
SEMTIMEDOP_IPC_ARGS (nsops, sops, pts32));
84167
diff --git a/sysdeps/unix/sysv/linux/setegid.c b/sysdeps/unix/sysv/linux/setegid.c
85168
index 4a608532..e4ff2bc3 100644
86169
--- a/sysdeps/unix/sysv/linux/setegid.c

gpkg/glibc/set-sigrestore.patch

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
diff --git a/sysdeps/unix/sysv/linux/arm/sigrestorer.S b/sysdeps/unix/sysv/linux/arm/sigrestorer.S
2+
index 6eacc3f4..7d33283d 100644
3+
--- a/sysdeps/unix/sysv/linux/arm/sigrestorer.S
4+
+++ b/sysdeps/unix/sysv/linux/arm/sigrestorer.S
5+
@@ -16,6 +16,7 @@
6+
<https://www.gnu.org/licenses/>. */
7+
8+
#include <sysdep.h>
9+
+#include <disabled-syscall.h>
10+
11+
/* If no SA_RESTORER function was specified by the application we use
12+
one of these. This avoids the need for the kernel to synthesise a return
13+
diff --git a/sysdeps/unix/sysv/linux/i386/libc_sigaction.c b/sysdeps/unix/sysv/linux/i386/libc_sigaction.c
14+
index 9d225d5e..70dcf24c 100644
15+
--- a/sysdeps/unix/sysv/linux/i386/libc_sigaction.c
16+
+++ b/sysdeps/unix/sysv/linux/i386/libc_sigaction.c
17+
@@ -18,6 +18,7 @@
18+
19+
#include <signal.h>
20+
#include <ldsodefs.h>
21+
+#include <disabled-syscall.h>
22+
23+
#define SA_RESTORER 0x04000000
24+
25+
diff --git a/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c
26+
index b39812f8..59c6b490 100644
27+
--- a/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c
28+
+++ b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c
29+
@@ -17,6 +17,7 @@
30+
<https://www.gnu.org/licenses/>. */
31+
32+
#include <signal.h>
33+
+#include <disabled-syscall.h>
34+
#define SA_RESTORER 0x04000000
35+
36+
extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;

gpkg/glibc/sigrestorer.S.patch

-10
This file was deleted.

0 commit comments

Comments
 (0)