mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-24 16:01:09 +02:00
app-emulation/containerd: fix ebuild for cross-compilation
This commit is contained in:
parent
4b22ea1c82
commit
500038f2de
@ -2,8 +2,9 @@
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI=6
|
||||
EAPI=5
|
||||
EGO_PN="github.com/docker/${PN}"
|
||||
COREOS_GO_PACKAGE="${EGO_PN}"
|
||||
|
||||
if [[ ${PV} == *9999 ]]; then
|
||||
inherit golang-vcs
|
||||
@ -11,10 +12,12 @@ else
|
||||
MY_PV="${PV/_/-}"
|
||||
EGIT_COMMIT="v${MY_PV}"
|
||||
SRC_URI="https://${EGO_PN}/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
|
||||
KEYWORDS="amd64"
|
||||
KEYWORDS="amd64 arm64"
|
||||
inherit golang-vcs-snapshot
|
||||
fi
|
||||
|
||||
inherit coreos-go
|
||||
|
||||
DESCRIPTION="A daemon to control runC"
|
||||
HOMEPAGE="https://containerd.tools"
|
||||
|
||||
@ -28,11 +31,23 @@ RDEPEND="app-emulation/runc
|
||||
|
||||
S=${WORKDIR}/${P}/src/${EGO_PN}
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/0001-Use-flag-for-aarch64-EpollCreate1.patch
|
||||
"${FILESDIR}"/0002-archutils-epoll_aarch64-fix-C-formatting.patch
|
||||
"${FILESDIR}"/0003-archutils-fix-build-on-aarch64.patch
|
||||
"${FILESDIR}"/0004-Correct-build-flag-for-arm64.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
eapply_user
|
||||
epatch "${PATCHES[@]}"
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
export GOARCH=$(go_get_arch)
|
||||
export CGO_ENABLED=1
|
||||
export CC=$(tc-getCC)
|
||||
export CXX=$(tc-getCXX)
|
||||
|
||||
local options=( $(usex seccomp "seccomp") )
|
||||
export GOPATH="${WORKDIR}/${P}" # ${PWD}/vendor
|
||||
LDFLAGS= emake GIT_COMMIT="$EGIT_COMMIT" BUILDTAGS="${options[@]}"
|
||||
|
@ -0,0 +1,45 @@
|
||||
From e419be223f415008f313e95d6d19f20398bdec9b Mon Sep 17 00:00:00 2001
|
||||
From: Qiang Huang <h.huangqiang@huawei.com>
|
||||
Date: Mon, 11 Apr 2016 15:01:36 +0800
|
||||
Subject: [PATCH] Use flag for aarch64 EpollCreate1
|
||||
|
||||
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
|
||||
---
|
||||
archutils/epoll_aarch64.go | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/archutils/epoll_aarch64.go b/archutils/epoll_aarch64.go
|
||||
index b0ea48c..3984ac4 100644
|
||||
--- a/archutils/epoll_aarch64.go
|
||||
+++ b/archutils/epoll_aarch64.go
|
||||
@@ -5,15 +5,15 @@ package archutils
|
||||
// #include <sys/epoll.h>
|
||||
/*
|
||||
int EpollCreate1(int flag) {
|
||||
- return epoll_create1(0);
|
||||
+ return epoll_create1(flag);
|
||||
}
|
||||
|
||||
-int EpollCtl(int efd, int op,int sfd, int Events, int Fd) {
|
||||
+int EpollCtl(int efd, int op, int sfd, int Events, int Fd) {
|
||||
struct epoll_event event;
|
||||
event.events = Events;
|
||||
event.data.fd = Fd;
|
||||
|
||||
- return epoll_ctl(efd,op,sfd,&event);
|
||||
+ return epoll_ctl(efd, op, sfd, &event);
|
||||
}
|
||||
|
||||
typedef struct Event{
|
||||
@@ -41,7 +41,7 @@ import (
|
||||
)
|
||||
|
||||
func EpollCreate1(flag int) (int, error) {
|
||||
- fd := int(C.EpollCreate1(0))
|
||||
+ fd := int(C.EpollCreate1(C.int(flag)))
|
||||
if fd < 0 {
|
||||
return fd, fmt.Errorf("failed to create epoll, errno is %d", fd)
|
||||
}
|
||||
--
|
||||
2.8.3
|
||||
|
@ -0,0 +1,80 @@
|
||||
From 1e617aaab4942faf8a354c7239f061300637e5b8 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksa Sarai <asarai@suse.de>
|
||||
Date: Wed, 13 Apr 2016 16:08:28 +1000
|
||||
Subject: [PATCH 2/2] archutils: epoll_aarch64: fix C formatting
|
||||
|
||||
Use proper C formatting to make the cgo code much easier to read. Also
|
||||
remove the pointless typedef.
|
||||
|
||||
Signed-off-by: Aleksa Sarai <asarai@suse.de>
|
||||
---
|
||||
archutils/epoll_aarch64.go | 38 +++++++++++++++++++-------------------
|
||||
1 file changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/archutils/epoll_aarch64.go b/archutils/epoll_aarch64.go
|
||||
index 3984ac4..73cd8ed 100644
|
||||
--- a/archutils/epoll_aarch64.go
|
||||
+++ b/archutils/epoll_aarch64.go
|
||||
@@ -5,31 +5,31 @@ package archutils
|
||||
// #include <sys/epoll.h>
|
||||
/*
|
||||
int EpollCreate1(int flag) {
|
||||
- return epoll_create1(flag);
|
||||
+ return epoll_create1(flag);
|
||||
}
|
||||
|
||||
-int EpollCtl(int efd, int op, int sfd, int Events, int Fd) {
|
||||
- struct epoll_event event;
|
||||
- event.events = Events;
|
||||
- event.data.fd = Fd;
|
||||
+int EpollCtl(int efd, int op,int sfd, int events, int fd) {
|
||||
+ struct epoll_event event;
|
||||
+ event.events = events;
|
||||
+ event.data.fd = fd;
|
||||
|
||||
- return epoll_ctl(efd, op, sfd, &event);
|
||||
+ return epoll_ctl(efd, op, sfd, &event);
|
||||
}
|
||||
|
||||
-typedef struct Event{
|
||||
- uint32_t events;
|
||||
- int fd;
|
||||
+struct event_t {
|
||||
+ uint32_t events;
|
||||
+ int fd;
|
||||
};
|
||||
|
||||
struct epoll_event events[128];
|
||||
-int run_epoll_wait(int fd, struct Event *event) {
|
||||
- int n, i;
|
||||
- n = epoll_wait(fd, events, 128, -1);
|
||||
- for (i = 0; i < n; i++) {
|
||||
- event[i].events = events[i].events;
|
||||
- event[i].fd = events[i].data.fd;
|
||||
- }
|
||||
- return n;
|
||||
+int run_epoll_wait(int fd, struct event_t *event) {
|
||||
+ int n, i;
|
||||
+ n = epoll_wait(fd, events, 128, -1);
|
||||
+ for (i = 0; i < n; i++) {
|
||||
+ event[i].events = events[i].events;
|
||||
+ event[i].fd = events[i].data.fd;
|
||||
+ }
|
||||
+ return n;
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
@@ -57,8 +57,8 @@ func EpollCtl(epfd int, op int, fd int, event *syscall.EpollEvent) error {
|
||||
}
|
||||
|
||||
func EpollWait(epfd int, events []syscall.EpollEvent, msec int) (int, error) {
|
||||
- var c_events [128]C.struct_Event
|
||||
- n := int(C.run_epoll_wait(C.int(epfd), (*C.struct_Event)(unsafe.Pointer(&c_events))))
|
||||
+ var c_events [128]C.struct_event_t
|
||||
+ n := int(C.run_epoll_wait(C.int(epfd), (*C.struct_event_t)(unsafe.Pointer(&c_events))))
|
||||
if n < 0 {
|
||||
return int(n), fmt.Errorf("Failed to wait epoll")
|
||||
}
|
||||
--
|
||||
2.8.3
|
||||
|
@ -0,0 +1,39 @@
|
||||
From 7c572f16734b69134b17c5f6c563d6d6a595e606 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksa Sarai <asarai@suse.de>
|
||||
Date: Wed, 13 Apr 2016 19:29:20 +1000
|
||||
Subject: [PATCH 3/3] archutils: fix build on aarch64
|
||||
|
||||
Due to an invalid architecture name (arm64), containerd could not build
|
||||
on aarch64 machines. Fix this by using the correct name of the
|
||||
architecture for conditional building.
|
||||
|
||||
Signed-off-by: Aleksa Sarai <asarai@suse.de>
|
||||
---
|
||||
archutils/epoll.go | 3 ++-
|
||||
archutils/epoll_aarch64.go | 2 +-
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/archutils/epoll.go b/archutils/epoll.go
|
||||
index 6922b52..6bb6047 100644
|
||||
--- a/archutils/epoll.go
|
||||
+++ b/archutils/epoll.go
|
||||
@@ -1,4 +1,5 @@
|
||||
-//+build !arm64,linux
|
||||
+// +build linux,!aarch64
|
||||
+
|
||||
package archutils
|
||||
|
||||
import (
|
||||
diff --git a/archutils/epoll_aarch64.go b/archutils/epoll_aarch64.go
|
||||
index 73cd8ed..3d63147 100644
|
||||
--- a/archutils/epoll_aarch64.go
|
||||
+++ b/archutils/epoll_aarch64.go
|
||||
@@ -1,4 +1,4 @@
|
||||
-// +build arm64,linux
|
||||
+// +build linux,aarch64
|
||||
|
||||
package archutils
|
||||
|
||||
--
|
||||
2.8.3
|
||||
|
@ -0,0 +1,183 @@
|
||||
From 313db3df26b12293e7d99eab0647f5222f195648 Mon Sep 17 00:00:00 2001
|
||||
From: Qiang Huang <h.huangqiang@huawei.com>
|
||||
Date: Fri, 29 Apr 2016 11:42:41 +0000
|
||||
Subject: [PATCH 4/4] Correct build flag for arm64
|
||||
|
||||
On arm64, the default build flag is the same as the one from
|
||||
`go env` which is arm64. So we should use arm64 instead of
|
||||
aarch64 for both build flag and file name.
|
||||
|
||||
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
|
||||
---
|
||||
archutils/epoll.go | 2 +-
|
||||
archutils/epoll_aarch64.go | 70 ----------------------------------------------
|
||||
archutils/epoll_arm64.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 71 insertions(+), 71 deletions(-)
|
||||
delete mode 100644 archutils/epoll_aarch64.go
|
||||
create mode 100644 archutils/epoll_arm64.go
|
||||
|
||||
diff --git a/archutils/epoll.go b/archutils/epoll.go
|
||||
index 6bb6047..c8ade64 100644
|
||||
--- a/archutils/epoll.go
|
||||
+++ b/archutils/epoll.go
|
||||
@@ -1,4 +1,4 @@
|
||||
-// +build linux,!aarch64
|
||||
+// +build linux,!arm64
|
||||
|
||||
package archutils
|
||||
|
||||
diff --git a/archutils/epoll_aarch64.go b/archutils/epoll_aarch64.go
|
||||
deleted file mode 100644
|
||||
index 3d63147..0000000
|
||||
--- a/archutils/epoll_aarch64.go
|
||||
+++ /dev/null
|
||||
@@ -1,70 +0,0 @@
|
||||
-// +build linux,aarch64
|
||||
-
|
||||
-package archutils
|
||||
-
|
||||
-// #include <sys/epoll.h>
|
||||
-/*
|
||||
-int EpollCreate1(int flag) {
|
||||
- return epoll_create1(flag);
|
||||
-}
|
||||
-
|
||||
-int EpollCtl(int efd, int op,int sfd, int events, int fd) {
|
||||
- struct epoll_event event;
|
||||
- event.events = events;
|
||||
- event.data.fd = fd;
|
||||
-
|
||||
- return epoll_ctl(efd, op, sfd, &event);
|
||||
-}
|
||||
-
|
||||
-struct event_t {
|
||||
- uint32_t events;
|
||||
- int fd;
|
||||
-};
|
||||
-
|
||||
-struct epoll_event events[128];
|
||||
-int run_epoll_wait(int fd, struct event_t *event) {
|
||||
- int n, i;
|
||||
- n = epoll_wait(fd, events, 128, -1);
|
||||
- for (i = 0; i < n; i++) {
|
||||
- event[i].events = events[i].events;
|
||||
- event[i].fd = events[i].data.fd;
|
||||
- }
|
||||
- return n;
|
||||
-}
|
||||
-*/
|
||||
-import "C"
|
||||
-
|
||||
-import (
|
||||
- "fmt"
|
||||
- "syscall"
|
||||
- "unsafe"
|
||||
-)
|
||||
-
|
||||
-func EpollCreate1(flag int) (int, error) {
|
||||
- fd := int(C.EpollCreate1(C.int(flag)))
|
||||
- if fd < 0 {
|
||||
- return fd, fmt.Errorf("failed to create epoll, errno is %d", fd)
|
||||
- }
|
||||
- return fd, nil
|
||||
-}
|
||||
-
|
||||
-func EpollCtl(epfd int, op int, fd int, event *syscall.EpollEvent) error {
|
||||
- errno := C.EpollCtl(C.int(epfd), C.int(syscall.EPOLL_CTL_ADD), C.int(fd), C.int(event.Events), C.int(event.Fd))
|
||||
- if errno < 0 {
|
||||
- return fmt.Errorf("Failed to ctl epoll")
|
||||
- }
|
||||
- return nil
|
||||
-}
|
||||
-
|
||||
-func EpollWait(epfd int, events []syscall.EpollEvent, msec int) (int, error) {
|
||||
- var c_events [128]C.struct_event_t
|
||||
- n := int(C.run_epoll_wait(C.int(epfd), (*C.struct_event_t)(unsafe.Pointer(&c_events))))
|
||||
- if n < 0 {
|
||||
- return int(n), fmt.Errorf("Failed to wait epoll")
|
||||
- }
|
||||
- for i := 0; i < n; i++ {
|
||||
- events[i].Fd = int32(c_events[i].fd)
|
||||
- events[i].Events = uint32(c_events[i].events)
|
||||
- }
|
||||
- return int(n), nil
|
||||
-}
|
||||
diff --git a/archutils/epoll_arm64.go b/archutils/epoll_arm64.go
|
||||
new file mode 100644
|
||||
index 0000000..00abc68
|
||||
--- /dev/null
|
||||
+++ b/archutils/epoll_arm64.go
|
||||
@@ -0,0 +1,70 @@
|
||||
+// +build linux,arm64
|
||||
+
|
||||
+package archutils
|
||||
+
|
||||
+// #include <sys/epoll.h>
|
||||
+/*
|
||||
+int EpollCreate1(int flag) {
|
||||
+ return epoll_create1(flag);
|
||||
+}
|
||||
+
|
||||
+int EpollCtl(int efd, int op,int sfd, int events, int fd) {
|
||||
+ struct epoll_event event;
|
||||
+ event.events = events;
|
||||
+ event.data.fd = fd;
|
||||
+
|
||||
+ return epoll_ctl(efd, op, sfd, &event);
|
||||
+}
|
||||
+
|
||||
+struct event_t {
|
||||
+ uint32_t events;
|
||||
+ int fd;
|
||||
+};
|
||||
+
|
||||
+struct epoll_event events[128];
|
||||
+int run_epoll_wait(int fd, struct event_t *event) {
|
||||
+ int n, i;
|
||||
+ n = epoll_wait(fd, events, 128, -1);
|
||||
+ for (i = 0; i < n; i++) {
|
||||
+ event[i].events = events[i].events;
|
||||
+ event[i].fd = events[i].data.fd;
|
||||
+ }
|
||||
+ return n;
|
||||
+}
|
||||
+*/
|
||||
+import "C"
|
||||
+
|
||||
+import (
|
||||
+ "fmt"
|
||||
+ "syscall"
|
||||
+ "unsafe"
|
||||
+)
|
||||
+
|
||||
+func EpollCreate1(flag int) (int, error) {
|
||||
+ fd := int(C.EpollCreate1(C.int(flag)))
|
||||
+ if fd < 0 {
|
||||
+ return fd, fmt.Errorf("failed to create epoll, errno is %d", fd)
|
||||
+ }
|
||||
+ return fd, nil
|
||||
+}
|
||||
+
|
||||
+func EpollCtl(epfd int, op int, fd int, event *syscall.EpollEvent) error {
|
||||
+ errno := C.EpollCtl(C.int(epfd), C.int(syscall.EPOLL_CTL_ADD), C.int(fd), C.int(event.Events), C.int(event.Fd))
|
||||
+ if errno < 0 {
|
||||
+ return fmt.Errorf("Failed to ctl epoll")
|
||||
+ }
|
||||
+ return nil
|
||||
+}
|
||||
+
|
||||
+func EpollWait(epfd int, events []syscall.EpollEvent, msec int) (int, error) {
|
||||
+ var c_events [128]C.struct_event_t
|
||||
+ n := int(C.run_epoll_wait(C.int(epfd), (*C.struct_event_t)(unsafe.Pointer(&c_events))))
|
||||
+ if n < 0 {
|
||||
+ return int(n), fmt.Errorf("Failed to wait epoll")
|
||||
+ }
|
||||
+ for i := 0; i < n; i++ {
|
||||
+ events[i].Fd = int32(c_events[i].fd)
|
||||
+ events[i].Events = uint32(c_events[i].events)
|
||||
+ }
|
||||
+ return int(n), nil
|
||||
+}
|
||||
--
|
||||
2.8.3
|
||||
|
Loading…
x
Reference in New Issue
Block a user