From 553e9ff15be8508499cbab579fbb1c5933da054c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 25 Mar 2018 03:15:59 +0200 Subject: testing/crystal: add support for aarch64 Crystal binary used for bootstrapping was cross-compiled using Crystal's cross-compilation support documented at https://crystal-lang.org/docs/syntax_and_semantics/cross-compilation.html. It doesn't need any cross-compilation toolchain. :) --- testing/crystal/APKBUILD | 10 +- testing/crystal/aarch64-linux-musl.patch | 940 +++++++++++++++++++++++++++++++ 2 files changed, 947 insertions(+), 3 deletions(-) create mode 100644 testing/crystal/aarch64-linux-musl.patch (limited to 'testing') diff --git a/testing/crystal/APKBUILD b/testing/crystal/APKBUILD index 00e6a3968d..1fc93b42a9 100644 --- a/testing/crystal/APKBUILD +++ b/testing/crystal/APKBUILD @@ -3,12 +3,12 @@ # TODO: Fix SSL bindings for LibreSSL (https://github.com/crystal-lang/crystal/issues/4676) pkgname=crystal pkgver=0.24.2 -pkgrel=1 +pkgrel=2 _bootver=0.24.2 _llvmver=5 pkgdesc="The Crystal Programming Language" url="https://crystal-lang.org/" -arch="x86_64" +arch="x86_64 aarch64" license="Apache-2.0" depends="gc-dev libatomic_ops libevent-dev libxml2-dev gcc gmp-dev pcre-dev yaml-dev" checkdepends="openssl-dev readline-dev zlib-dev" @@ -19,9 +19,11 @@ subpackages="$pkgname-doc " source="$pkgname-$pkgver.tar.gz::https://github.com/crystal-lang/$pkgname/archive/$pkgver.tar.gz https://dev.alpinelinux.org/archive/crystal/crystal-$_bootver-x86_64-alpine-linux-musl.tar.gz + https://dev.alpinelinux.org/archive/crystal/crystal-$_bootver-aarch64-alpine-linux-musl.tar.gz makefile-shell.patch fix-makefile-stderr-redirect.patch makefile-allow-extra-flags.patch + aarch64-linux-musl.patch " builddir="$srcdir/$pkgname-$pkgver" options="!check" # FIXME @@ -119,6 +121,8 @@ zshcomp() { sha512sums="db9fb973eeb2bc72ef91bb894b7c5aea73e727ff46e739aa431d68e556238f346a688a7a43de284afb4667b49366afce3ca423a523bea521180fa8f19ba6862d crystal-0.24.2.tar.gz 6d7ee01ff5bfaaf79fa80c15575ae4496e17629ed18cb0577db6734266c2dbf5b0bf0a554c7c153e1b81f4c71e62bb803fd4b6513e3d039571ee4f953d85ecf4 crystal-0.24.2-x86_64-alpine-linux-musl.tar.gz +d6ed122a5ddb4e1ea772357cd3115dcf8cd92a75f973b6f7e4b8b6135fb4123fb98334495f6f312da7ab7ba3bda57bd3cb4f06c0f421df2c09d19c0ab1b8b67b crystal-0.24.2-aarch64-alpine-linux-musl.tar.gz 2a81b6eaeb934ef5d4435a80a346425a760a602d04bccc89068dde7ed48a6099c4ea59a291f444127e91e81acde0ee42d857481041869cf6094a2e29f0de184a makefile-shell.patch 2f995903093da9af4263bf2d7fde75715a114b02b74ba26c8290d7b20042be8a2db305a2ea144925f054354f6f6a430750d19fa036bf764562dedb56da12866a fix-makefile-stderr-redirect.patch -d1641f538cb1ae9f817b57e19800b0af91e3723c752fba38b2644b8acc66d80862c6bef22194f1f4c64ae7d8393c2772f0a0ea0a76a199151ef8c74c686ea49f makefile-allow-extra-flags.patch" +d1641f538cb1ae9f817b57e19800b0af91e3723c752fba38b2644b8acc66d80862c6bef22194f1f4c64ae7d8393c2772f0a0ea0a76a199151ef8c74c686ea49f makefile-allow-extra-flags.patch +0252e850b79d622fe69329fac3653128b1cc0108961c928a9efa8fa5df1bce13692b6a520697c45c37791a9e6547d5ec7f0f11905e8299902055ab3dbdfd7556 aarch64-linux-musl.patch" diff --git a/testing/crystal/aarch64-linux-musl.patch b/testing/crystal/aarch64-linux-musl.patch new file mode 100644 index 0000000000..bc6d904079 --- /dev/null +++ b/testing/crystal/aarch64-linux-musl.patch @@ -0,0 +1,940 @@ +From: Jakub Jirutka +Date: Sun, 25 Mar 2018 00:43:00 +0100 +Subject: [PATCH] Add support for target aarch64-linux-musl + +This patch is backported for 0.24.2. + +Upstream-Issue: https://github.com/crystal-lang/crystal/pull/5861 + +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/arpa/inet.cr +@@ -0,0 +1,9 @@ ++require "../netinet/in" ++require "../stdint" ++ ++lib LibC ++ fun htons(x0 : UInt16T) : UInt16T ++ fun ntohs(x0 : UInt16T) : UInt16T ++ fun inet_ntop(x0 : Int, x1 : Void*, x2 : Char*, x3 : SocklenT) : Char* ++ fun inet_pton(x0 : Int, x1 : Char*, x2 : Void*) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/dirent.cr +@@ -0,0 +1,18 @@ ++require "./sys/types" ++ ++lib LibC ++ type DIR = Void ++ ++ struct Dirent ++ d_ino : InoT ++ d_off : OffT ++ d_reclen : UShort ++ d_type : Char ++ d_name : StaticArray(Char, 256) ++ end ++ ++ fun closedir(x0 : DIR*) : Int ++ fun opendir(x0 : Char*) : DIR* ++ fun readdir(x0 : DIR*) : Dirent* ++ fun rewinddir(x0 : DIR*) : Void ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/dlfcn.cr +@@ -0,0 +1,21 @@ ++lib LibC ++ RTLD_LAZY = 1 ++ RTLD_NOW = 2 ++ RTLD_GLOBAL = 256 ++ RTLD_LOCAL = 0 ++ RTLD_DEFAULT = Pointer(Void).new(0) ++ RTLD_NEXT = Pointer(Void).new(-1) ++ ++ struct DlInfo ++ dli_fname : Char* ++ dli_fbase : Void* ++ dli_sname : Char* ++ dli_saddr : Void* ++ end ++ ++ fun dlclose(x0 : Void*) : Int ++ fun dlerror : Char* ++ fun dlopen(x0 : Char*, x1 : Int) : Void* ++ fun dlsym(x0 : Void*, x1 : Char*) : Void* ++ fun dladdr(x0 : Void*, x1 : DlInfo*) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/errno.cr +@@ -0,0 +1,83 @@ ++lib LibC ++ E2BIG = 7 ++ EACCES = 13 ++ EADDRINUSE = 98 ++ EADDRNOTAVAIL = 99 ++ EAFNOSUPPORT = 97 ++ EAGAIN = 11 ++ EALREADY = 114 ++ EBADF = 9 ++ EBADMSG = 74 ++ EBUSY = 16 ++ ECANCELED = 125 ++ ECHILD = 10 ++ ECONNABORTED = 103 ++ ECONNREFUSED = 111 ++ ECONNRESET = 104 ++ EDEADLK = 35 ++ EDESTADDRREQ = 89 ++ EDOM = 33 ++ EDQUOT = 122 ++ EEXIST = 17 ++ EFAULT = 14 ++ EFBIG = 27 ++ EHOSTUNREACH = 113 ++ EIDRM = 43 ++ EILSEQ = 84 ++ EINPROGRESS = 115 ++ EINTR = 4 ++ EINVAL = 22 ++ EIO = 5 ++ EISCONN = 106 ++ EISDIR = 21 ++ ELOOP = 40 ++ EMFILE = 24 ++ EMLINK = 31 ++ EMSGSIZE = 90 ++ EMULTIHOP = 72 ++ ENAMETOOLONG = 36 ++ ENETDOWN = 100 ++ ENETRESET = 102 ++ ENETUNREACH = 101 ++ ENFILE = 23 ++ ENOBUFS = 105 ++ ENODEV = 19 ++ ENOENT = 2 ++ ENOEXEC = 8 ++ ENOLCK = 37 ++ ENOLINK = 67 ++ ENOMEM = 12 ++ ENOMSG = 42 ++ ENOPROTOOPT = 92 ++ ENOSPC = 28 ++ ENOSYS = 38 ++ ENOTCONN = 107 ++ ENOTDIR = 20 ++ ENOTEMPTY = 39 ++ ENOTRECOVERABLE = 131 ++ ENOTSOCK = 88 ++ ENOTSUP = LibC::EOPNOTSUPP ++ ENOTTY = 25 ++ ENXIO = 6 ++ EOPNOTSUPP = 95 ++ EOVERFLOW = 75 ++ EOWNERDEAD = 130 ++ EPERM = 1 ++ EPIPE = 32 ++ EPROTO = 71 ++ EPROTONOSUPPORT = 93 ++ EPROTOTYPE = 91 ++ ERANGE = 34 ++ EROFS = 30 ++ ESPIPE = 29 ++ ESRCH = 3 ++ ESTALE = 116 ++ ETIMEDOUT = 110 ++ ETXTBSY = 26 ++ EWOULDBLOCK = LibC::EAGAIN ++ EXDEV = 18 ++ ENODATA = 61 ++ ENOSR = 63 ++ ENOSTR = 60 ++ ETIME = 62 ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/fcntl.cr +@@ -0,0 +1,32 @@ ++require "./sys/types" ++require "./sys/stat" ++require "./unistd" ++ ++lib LibC ++ F_GETFD = 1 ++ F_SETFD = 2 ++ F_GETFL = 3 ++ F_SETFL = 4 ++ FD_CLOEXEC = 1 ++ O_CLOEXEC = 0o2000000 ++ O_CREAT = 0o100 ++ O_NOFOLLOW = 0o100000 ++ O_TRUNC = 0o1000 ++ O_APPEND = 0o2000 ++ O_NONBLOCK = 0o4000 ++ O_SYNC = 0o4010000 ++ O_RDONLY = 0o0 ++ O_RDWR = 0o2 ++ O_WRONLY = 0o1 ++ ++ struct Flock ++ l_type : Short ++ l_whence : Short ++ l_start : OffT ++ l_len : OffT ++ l_pid : PidT ++ end ++ ++ fun fcntl(x0 : Int, x1 : Int, ...) : Int ++ fun open(x0 : Char*, x1 : Int, ...) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/iconv.cr +@@ -0,0 +1,9 @@ ++require "./stddef" ++ ++lib LibC ++ type IconvT = Void* ++ ++ fun iconv(x0 : IconvT, x1 : Char**, x2 : SizeT*, x3 : Char**, x4 : SizeT*) : SizeT ++ fun iconv_close(x0 : IconvT) : Int ++ fun iconv_open(x0 : Char*, x1 : Char*) : IconvT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/netdb.cr +@@ -0,0 +1,39 @@ ++require "./netinet/in" ++require "./sys/socket" ++require "./stdint" ++ ++lib LibC ++ AI_PASSIVE = 0x01 ++ AI_CANONNAME = 0x02 ++ AI_NUMERICHOST = 0x04 ++ AI_NUMERICSERV = 0x400 ++ AI_V4MAPPED = 0x08 ++ AI_ALL = 0x10 ++ AI_ADDRCONFIG = 0x20 ++ EAI_AGAIN = -3 ++ EAI_BADFLAGS = -1 ++ EAI_FAIL = -4 ++ EAI_FAMILY = -6 ++ EAI_MEMORY = -10 ++ EAI_NONAME = -2 ++ EAI_SERVICE = -8 ++ EAI_SOCKTYPE = -7 ++ EAI_SYSTEM = -11 ++ EAI_OVERFLOW = -12 ++ ++ struct Addrinfo ++ ai_flags : Int ++ ai_family : Int ++ ai_socktype : Int ++ ai_protocol : Int ++ ai_addrlen : SocklenT ++ ai_addr : Sockaddr* ++ ai_canonname : Char* ++ ai_next : Addrinfo* ++ end ++ ++ fun freeaddrinfo(x0 : Addrinfo*) : Void ++ fun gai_strerror(x0 : Int) : Char* ++ fun getaddrinfo(x0 : Char*, x1 : Char*, x2 : Addrinfo*, x3 : Addrinfo**) : Int ++ fun getnameinfo(x0 : Sockaddr*, x1 : SocklenT, x2 : Char*, x3 : SocklenT, x4 : Char*, x5 : SocklenT, x6 : Int) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/netinet/in.cr +@@ -0,0 +1,42 @@ ++require "../sys/socket" ++require "../stdint" ++ ++lib LibC ++ IPPROTO_IP = 0 ++ IPPROTO_ICMP = 1 ++ IPPROTO_RAW = 255 ++ IPPROTO_TCP = 6 ++ IPPROTO_UDP = 17 ++ ++ alias InPortT = UInt16T ++ alias InAddrT = UInt32T ++ ++ struct InAddr ++ s_addr : InAddrT ++ end ++ ++ union In6AddrIn6Union ++ __s6_addr : StaticArray(UInt8T, 16) ++ __s6_addr16 : StaticArray(UInt16T, 8) ++ __s6_addr32 : StaticArray(UInt32T, 4) ++ end ++ ++ struct In6Addr ++ __in6_union : In6AddrIn6Union ++ end ++ ++ struct SockaddrIn ++ sin_family : SaFamilyT ++ sin_port : InPortT ++ sin_addr : InAddr ++ sin_zero : StaticArray(UInt8T, 8) ++ end ++ ++ struct SockaddrIn6 ++ sin6_family : SaFamilyT ++ sin6_port : InPortT ++ sin6_flowinfo : UInt32T ++ sin6_addr : In6Addr ++ sin6_scope_id : UInt32T ++ end ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/netinet/tcp.cr +@@ -0,0 +1,6 @@ ++lib LibC ++ TCP_NODELAY = 1 ++ TCP_KEEPIDLE = 4 ++ TCP_KEEPINTVL = 5 ++ TCP_KEEPCNT = 6 ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/pthread.cr +@@ -0,0 +1,18 @@ ++require "./sys/types" ++ ++lib LibC ++ fun pthread_cond_broadcast(x0 : PthreadCondT*) : Int ++ fun pthread_cond_destroy(x0 : PthreadCondT*) : Int ++ fun pthread_cond_init(x0 : PthreadCondT*, x1 : PthreadCondattrT*) : Int ++ fun pthread_cond_signal(x0 : PthreadCondT*) : Int ++ fun pthread_cond_wait(x0 : PthreadCondT*, x1 : PthreadMutexT*) : Int ++ fun pthread_create(x0 : PthreadT*, x1 : PthreadAttrT*, x2 : Void* -> Void*, x3 : Void*) : Int ++ fun pthread_detach(x0 : PthreadT) : Int ++ fun pthread_join(x0 : PthreadT, x1 : Void**) : Int ++ fun pthread_mutex_destroy(x0 : PthreadMutexT*) : Int ++ fun pthread_mutex_init(x0 : PthreadMutexT*, x1 : PthreadMutexattrT*) : Int ++ fun pthread_mutex_lock(x0 : PthreadMutexT*) : Int ++ fun pthread_mutex_trylock(x0 : PthreadMutexT*) : Int ++ fun pthread_mutex_unlock(x0 : PthreadMutexT*) : Int ++ fun pthread_self : PthreadT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/signal.cr +@@ -0,0 +1,40 @@ ++require "./sys/types" ++require "./time" ++ ++lib LibC ++ SIGHUP = 1 ++ SIGINT = 2 ++ SIGQUIT = 3 ++ SIGILL = 4 ++ SIGTRAP = 5 ++ SIGIOT = LibC::SIGABRT ++ SIGABRT = 6 ++ SIGFPE = 8 ++ SIGKILL = 9 ++ SIGBUS = 7 ++ SIGSEGV = 11 ++ SIGSYS = 31 ++ SIGPIPE = 13 ++ SIGALRM = 14 ++ SIGTERM = 15 ++ SIGURG = 23 ++ SIGSTOP = 19 ++ SIGTSTP = 20 ++ SIGCONT = 18 ++ SIGCHLD = 17 ++ SIGTTIN = 21 ++ SIGTTOU = 22 ++ SIGIO = 29 ++ SIGXCPU = 24 ++ SIGXFSZ = 25 ++ SIGVTALRM = 26 ++ SIGUSR1 = 10 ++ SIGUSR2 = 12 ++ SIGWINCH = 28 ++ SIGPWR = 30 ++ SIGSTKFLT = 16 ++ SIGUNUSED = LibC::SIGSYS ++ ++ fun kill(x0 : PidT, x1 : Int) : Int ++ fun signal(x0 : Int, x1 : Int -> Void) : Int -> Void ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/stddef.cr +@@ -0,0 +1,3 @@ ++lib LibC ++ alias SizeT = ULong ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/stdint.cr +@@ -0,0 +1,10 @@ ++lib LibC ++ alias Int8T = SChar ++ alias Int16T = Short ++ alias Int32T = Int ++ alias Int64T = Long ++ alias UInt8T = Char ++ alias UInt16T = UShort ++ alias UInt32T = UInt ++ alias UInt64T = ULong ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/stdio.cr +@@ -0,0 +1,9 @@ ++require "./sys/types" ++require "./stddef" ++ ++lib LibC ++ fun printf(x0 : Char*, ...) : Int ++ fun dprintf(fd : Int, format : Char*, ...) : Int ++ fun rename(x0 : Char*, x1 : Char*) : Int ++ fun snprintf(x0 : Char*, x1 : SizeT, x2 : Char*, ...) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/stdlib.cr +@@ -0,0 +1,25 @@ ++require "./stddef" ++require "./sys/wait" ++ ++lib LibC ++ struct DivT ++ quot : Int ++ rem : Int ++ end ++ ++ fun atof(x0 : Char*) : Double ++ fun div(x0 : Int, x1 : Int) : DivT ++ fun exit(x0 : Int) : NoReturn ++ fun free(x0 : Void*) : Void ++ fun getenv(x0 : Char*) : Char* ++ fun malloc(x0 : SizeT) : Void* ++ fun mkstemp(x0 : Char*) : Int ++ fun mkstemps(x0 : Char*, x1 : Int) : Int ++ fun putenv(x0 : Char*) : Int ++ fun realloc(x0 : Void*, x1 : SizeT) : Void* ++ fun realpath(x0 : Char*, x1 : Char*) : Char* ++ fun setenv(x0 : Char*, x1 : Char*, x2 : Int) : Int ++ fun strtof(x0 : Char*, x1 : Char**) : Float ++ fun strtod(x0 : Char*, x1 : Char**) : Double ++ fun unsetenv(x0 : Char*) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/string.cr +@@ -0,0 +1,9 @@ ++require "./stddef" ++ ++lib LibC ++ fun memchr(x0 : Void*, c : Int, n : SizeT) : Void* ++ fun memcmp(x0 : Void*, x1 : Void*, x2 : SizeT) : Int ++ fun strcmp(x0 : Char*, x1 : Char*) : Int ++ fun strerror(x0 : Int) : Char* ++ fun strlen(x0 : Char*) : SizeT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/mman.cr +@@ -0,0 +1,31 @@ ++require "./types" ++ ++lib LibC ++ PROT_EXEC = 4 ++ PROT_NONE = 0 ++ PROT_READ = 1 ++ PROT_WRITE = 2 ++ MAP_FIXED = 0x10 ++ MAP_PRIVATE = 0x02 ++ MAP_SHARED = 0x01 ++ MAP_ANON = 0x20 ++ MAP_ANONYMOUS = LibC::MAP_ANON ++ MAP_FAILED = Pointer(Void).new(-1) ++ POSIX_MADV_DONTNEED = 0 ++ POSIX_MADV_NORMAL = 0 ++ POSIX_MADV_RANDOM = 1 ++ POSIX_MADV_SEQUENTIAL = 2 ++ POSIX_MADV_WILLNEED = 3 ++ MADV_DONTNEED = 4 ++ MADV_NORMAL = 0 ++ MADV_RANDOM = 1 ++ MADV_SEQUENTIAL = 2 ++ MADV_WILLNEED = 3 ++ MADV_HUGEPAGE = 14 ++ MADV_NOHUGEPAGE = 15 ++ ++ fun mmap(x0 : Void*, x1 : SizeT, x2 : Int, x3 : Int, x4 : Int, x5 : OffT) : Void* ++ fun mprotect(x0 : Void*, x1 : SizeT, x2 : Int) : Int ++ fun munmap(x0 : Void*, x1 : SizeT) : Int ++ fun madvise(x0 : Void*, x1 : SizeT, x2 : Int) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/select.cr +@@ -0,0 +1,14 @@ ++require "./types" ++require "./time" ++require "../time" ++require "../signal" ++ ++lib LibC ++ alias FdMask = ULong ++ ++ struct FdSet ++ fds_bits : StaticArray(ULong, 16) ++ end ++ ++ fun select(x0 : Int, x1 : FdSet*, x2 : FdSet*, x3 : FdSet*, x4 : Timeval*) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/socket.cr +@@ -0,0 +1,65 @@ ++require "./types" ++ ++lib LibC ++ SOCK_DGRAM = 2 ++ SOCK_RAW = 3 ++ SOCK_SEQPACKET = 5 ++ SOCK_STREAM = 1 ++ SOL_SOCKET = 1 ++ SO_BROADCAST = 6 ++ SO_KEEPALIVE = 9 ++ SO_LINGER = 13 ++ SO_RCVBUF = 8 ++ SO_REUSEADDR = 2 ++ SO_REUSEPORT = 15 ++ SO_SNDBUF = 7 ++ PF_INET = 2 ++ PF_INET6 = 10 ++ PF_UNIX = LibC::PF_LOCAL ++ PF_UNSPEC = 0 ++ PF_LOCAL = 1 ++ AF_INET = LibC::PF_INET ++ AF_INET6 = LibC::PF_INET6 ++ AF_UNIX = LibC::AF_LOCAL ++ AF_UNSPEC = LibC::PF_UNSPEC ++ AF_LOCAL = LibC::PF_LOCAL ++ SHUT_RD = 0 ++ SHUT_RDWR = 2 ++ SHUT_WR = 1 ++ SOCK_CLOEXEC = 0o2000000 ++ ++ alias SocklenT = UInt ++ alias SaFamilyT = UShort ++ ++ struct Sockaddr ++ sa_family : SaFamilyT ++ sa_data : StaticArray(Char, 14) ++ end ++ ++ struct SockaddrStorage ++ ss_family : SaFamilyT ++ __ss_align : ULong ++ __ss_padding : StaticArray(Char, 112) ++ end ++ ++ struct Linger ++ l_onoff : Int ++ l_linger : Int ++ end ++ ++ fun accept(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int ++ fun bind(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int ++ fun connect(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int ++ fun getpeername(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int ++ fun getsockname(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int ++ fun getsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT*) : Int ++ fun listen(x0 : Int, x1 : Int) : Int ++ fun recv(x0 : Int, x1 : Void*, x2 : SizeT, x3 : Int) : SSizeT ++ fun recvfrom(x0 : Int, x1 : Void*, x2 : SizeT, x3 : Int, x4 : Sockaddr*, x5 : SocklenT*) : SSizeT ++ fun send(x0 : Int, x1 : Void*, x2 : SizeT, x3 : Int) : SSizeT ++ fun sendto(x0 : Int, x1 : Void*, x2 : SizeT, x3 : Int, x4 : Sockaddr*, x5 : SocklenT) : SSizeT ++ fun setsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT) : Int ++ fun shutdown(x0 : Int, x1 : Int) : Int ++ fun socket(x0 : Int, x1 : Int, x2 : Int) : Int ++ fun socketpair(x0 : Int, x1 : Int, x2 : Int, x3 : StaticArray(Int, 2)) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/stat.cr +@@ -0,0 +1,56 @@ ++require "./types" ++require "../time" ++ ++lib LibC ++ S_IFMT = 0o170000 ++ S_IFBLK = 0o060000 ++ S_IFCHR = 0o020000 ++ S_IFIFO = 0o010000 ++ S_IFREG = 0o100000 ++ S_IFDIR = 0o040000 ++ S_IFLNK = 0o120000 ++ S_IFSOCK = 0o140000 ++ S_IRUSR = 0o400 ++ S_IWUSR = 0o200 ++ S_IXUSR = 0o100 ++ S_IRWXU = 0o700 ++ S_IRGRP = 0o040 ++ S_IWGRP = 0o020 ++ S_IXGRP = 0o010 ++ S_IRWXG = 0o070 ++ S_IROTH = 0o004 ++ S_IWOTH = 0o002 ++ S_IXOTH = 0o001 ++ S_IRWXO = 0o007 ++ S_ISUID = 0o4000 ++ S_ISGID = 0o2000 ++ S_ISVTX = 0o1000 ++ ++ struct Stat ++ st_dev : DevT ++ st_ino : InoT ++ st_mode : ModeT ++ st_nlink : NlinkT ++ st_uid : UidT ++ st_gid : GidT ++ st_rdev : DevT ++ __pad : ULong ++ st_size : OffT ++ st_blksize : BlksizeT ++ __pad2 : Int ++ st_blocks : BlkcntT ++ st_atim : Timespec ++ st_mtim : Timespec ++ st_ctim : Timespec ++ __unused : StaticArray(UInt, 2) ++ end ++ ++ fun chmod(x0 : Char*, x1 : ModeT) : Int ++ fun fstat(x0 : Int, x1 : Stat*) : Int ++ fun lstat(x0 : Char*, x1 : Stat*) : Int ++ fun mkdir(x0 : Char*, x1 : ModeT) : Int ++ fun mkfifo(x0 : Char*, x1 : ModeT) : Int ++ fun mknod(x0 : Char*, x1 : ModeT, x2 : DevT) : Int ++ fun stat(x0 : Char*, x1 : Stat*) : Int ++ fun umask(x0 : ModeT) : ModeT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/syscall.cr +@@ -0,0 +1,3 @@ ++lib LibC ++ SYS_getrandom = 278 ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/time.cr +@@ -0,0 +1,16 @@ ++require "./types" ++ ++lib LibC ++ struct Timeval ++ tv_sec : TimeT ++ tv_usec : SusecondsT ++ end ++ ++ struct Timezone ++ tz_minuteswest : Int ++ tz_dsttime : Int ++ end ++ ++ fun gettimeofday(x0 : Timeval*, x1 : Void*) : Int ++ fun utimes(path : Char*, times : Timeval[2]) : Int ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/times.cr +@@ -0,0 +1,12 @@ ++require "./types" ++ ++lib LibC ++ struct Tms ++ tms_utime : ClockT ++ tms_stime : ClockT ++ tms_cutime : ClockT ++ tms_cstime : ClockT ++ end ++ ++ fun times(x0 : Tms*) : ClockT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/types.cr +@@ -0,0 +1,61 @@ ++require "../stddef" ++require "../stdint" ++ ++lib LibC ++ alias BlkcntT = Long ++ alias BlksizeT = Int ++ alias ClockT = Long ++ alias ClockidT = Int ++ alias DevT = ULong ++ alias GidT = UInt ++ alias IdT = UInt ++ alias InoT = ULong ++ alias ModeT = UInt ++ alias NlinkT = UInt ++ alias OffT = Long ++ alias PidT = Int ++ ++ union PthreadAttrTU ++ __i : StaticArray(Int, 14) ++ __vi : StaticArray(Int, 14) ++ __s : StaticArray(ULong, 7) ++ end ++ ++ struct PthreadAttrT ++ __u : PthreadAttrTU ++ end ++ ++ union PthreadCondTU ++ __i : StaticArray(Int, 12) ++ __vi : StaticArray(Int, 12) ++ __p : StaticArray(Void*, 6) ++ end ++ ++ struct PthreadCondT ++ __u : PthreadCondTU ++ end ++ ++ struct PthreadCondattrT ++ __attr : UInt ++ end ++ ++ union PthreadMutexTU ++ __i : StaticArray(Int, 10) ++ __vi : StaticArray(Int, 10) ++ __p : StaticArray(Void*, 5) ++ end ++ ++ struct PthreadMutexT ++ __u : PthreadMutexTU ++ end ++ ++ struct PthreadMutexattrT ++ __attr : UInt ++ end ++ ++ type PthreadT = Void* ++ alias SSizeT = Long ++ alias SusecondsT = Long ++ alias TimeT = Long ++ alias UidT = UInt ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/un.cr +@@ -0,0 +1,8 @@ ++require "./socket" ++ ++lib LibC ++ struct SockaddrUn ++ sun_family : SaFamilyT ++ sun_path : StaticArray(Char, 108) ++ end ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/sys/wait.cr +@@ -0,0 +1,8 @@ ++require "./types" ++require "../signal" ++ ++lib LibC ++ WNOHANG = 1 ++ ++ fun waitpid(x0 : PidT, x1 : Int*, x2 : Int) : PidT ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/termios.cr +@@ -0,0 +1,120 @@ ++require "./sys/types" ++ ++lib LibC ++ VEOF = 4 ++ VEOL = 11 ++ VERASE = 2 ++ VINTR = 0 ++ VKILL = 3 ++ VMIN = 6 ++ VQUIT = 1 ++ VSTART = 8 ++ VSTOP = 9 ++ VSUSP = 10 ++ BRKINT = 0o000002 ++ ICRNL = 0o000400 ++ IGNBRK = 0o000001 ++ IGNCR = 0o000200 ++ IGNPAR = 0o000004 ++ INLCR = 0o000100 ++ INPCK = 0o000020 ++ ISTRIP = 0o000040 ++ IXANY = 0o004000 ++ IXOFF = 0o010000 ++ IXON = 0o002000 ++ PARMRK = 0o000010 ++ OPOST = 0o000001 ++ ONLCR = 0o000004 ++ OCRNL = 0o000010 ++ ONOCR = 0o000020 ++ ONLRET = 0o000040 ++ OFDEL = 0o000200 ++ OFILL = 0o000100 ++ CRDLY = 0o003000 ++ CR0 = 0o000000 ++ CR1 = 0o001000 ++ CR2 = 0o002000 ++ CR3 = 0o003000 ++ TABDLY = 0o014000 ++ TAB0 = 0o000000 ++ TAB1 = 0o004000 ++ TAB2 = 0o010000 ++ TAB3 = 0o014000 ++ BSDLY = 0o020000 ++ BS0 = 0o000000 ++ BS1 = 0o020000 ++ VTDLY = 0o040000 ++ VT0 = 0o000000 ++ VT1 = 0o040000 ++ FFDLY = 0o100000 ++ FF0 = 0o000000 ++ FF1 = 0o100000 ++ NLDLY = 0o000400 ++ NL0 = 0o000000 ++ NL1 = 0o000400 ++ B0 = 0o000000 ++ B50 = 0o000001 ++ B75 = 0o000002 ++ B110 = 0o000003 ++ B134 = 0o000004 ++ B150 = 0o000005 ++ B200 = 0o000006 ++ B300 = 0o000007 ++ B600 = 0o000010 ++ B1200 = 0o000011 ++ B1800 = 0o000012 ++ B2400 = 0o000013 ++ B4800 = 0o000014 ++ B9600 = 0o000015 ++ B19200 = 0o000016 ++ B38400 = 0o000017 ++ CSIZE = 0o000060 ++ CS5 = 0o000000 ++ CS6 = 0o000020 ++ CS7 = 0o000040 ++ CS8 = 0o000060 ++ CSTOPB = 0o000100 ++ CREAD = 0o000200 ++ PARENB = 0o000400 ++ PARODD = 0o001000 ++ HUPCL = 0o002000 ++ CLOCAL = 0o004000 ++ ECHO = 0o000010 ++ ECHOE = 0o000020 ++ ECHOK = 0o000040 ++ ECHONL = 0o000100 ++ ICANON = 0o000002 ++ IEXTEN = 0o100000 ++ ISIG = 0o000001 ++ NOFLSH = 0o000200 ++ TOSTOP = 0o000400 ++ TCSANOW = 0 ++ TCSADRAIN = 1 ++ TCSAFLUSH = 2 ++ TCIFLUSH = 0 ++ TCIOFLUSH = 2 ++ TCOFLUSH = 1 ++ TCIOFF = 2 ++ TCION = 3 ++ TCOOFF = 0 ++ TCOON = 1 ++ ++ alias CcT = Char ++ alias SpeedT = UInt ++ alias TcflagT = UInt ++ ++ struct Termios ++ c_iflag : TcflagT ++ c_oflag : TcflagT ++ c_cflag : TcflagT ++ c_lflag : TcflagT ++ c_line : CcT ++ c_cc : StaticArray(CcT, 32) ++ __c_ispeed : SpeedT ++ __c_ospeed : SpeedT ++ end ++ ++ fun tcgetattr(x0 : Int, x1 : Termios*) : Int ++ fun tcsetattr(x0 : Int, x1 : Int, x2 : Termios*) : Int ++ fun cfmakeraw(x0 : Termios*) : Void ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/time.cr +@@ -0,0 +1,37 @@ ++require "./sys/types" ++ ++lib LibC ++ CLOCK_MONOTONIC = 1 ++ CLOCK_REALTIME = 0 ++ ++ struct Tm ++ tm_sec : Int ++ tm_min : Int ++ tm_hour : Int ++ tm_mday : Int ++ tm_mon : Int ++ tm_year : Int ++ tm_wday : Int ++ tm_yday : Int ++ tm_isdst : Int ++ tm_gmtoff : Long ++ tm_zone : Char* ++ end ++ ++ struct Timespec ++ tv_sec : TimeT ++ tv_nsec : Long ++ end ++ ++ fun clock_gettime(x0 : ClockidT, x1 : Timespec*) : Int ++ fun clock_settime(x0 : ClockidT, x1 : Timespec*) : Int ++ fun gmtime_r(x0 : TimeT*, x1 : Tm*) : Tm* ++ fun localtime_r(x0 : TimeT*, x1 : Tm*) : Tm* ++ fun mktime(x0 : Tm*) : TimeT ++ fun tzset : Void ++ fun timegm(x0 : Tm*) : TimeT ++ ++ $daylight : Int ++ $timezone : Long ++ $tzname : StaticArray(Char*, 2) ++end +--- /dev/null ++++ b/src/lib_c/aarch64-linux-musl/c/unistd.cr +@@ -0,0 +1,41 @@ ++require "./sys/types" ++require "./stdint" ++ ++lib LibC ++ F_OK = 0 ++ R_OK = 4 ++ W_OK = 2 ++ X_OK = 1 ++ SC_CLK_TCK = 2 ++ SC_NPROCESSORS_ONLN = 84 ++ ++ fun access(x0 : Char*, x1 : Int) : Int ++ fun chdir(x0 : Char*) : Int ++ fun chown(x0 : Char*, x1 : UidT, x2 : GidT) : Int ++ fun close(x0 : Int) : Int ++ fun dup2(x0 : Int, x1 : Int) : Int ++ fun _exit(x0 : Int) : NoReturn ++ fun execvp(x0 : Char*, x1 : Char**) : Int ++ @[ReturnsTwice] ++ fun fork : PidT ++ fun ftruncate(x0 : Int, x1 : OffT) : Int ++ fun getcwd(x0 : Char*, x1 : SizeT) : Char* ++ fun gethostname(x0 : Char*, x1 : SizeT) : Int ++ fun getpgid(x0 : PidT) : PidT ++ fun getpid : PidT ++ fun getppid : PidT ++ fun isatty(x0 : Int) : Int ++ fun lchown(x0 : Char*, x1 : UidT, x2 : GidT) : Int ++ fun link(x0 : Char*, x1 : Char*) : Int ++ fun lockf(x0 : Int, x1 : Int, x2 : OffT) : Int ++ fun lseek(x0 : Int, x1 : OffT, x2 : Int) : OffT ++ fun pipe(x0 : StaticArray(Int, 2)) : Int ++ fun read(x0 : Int, x1 : Void*, x2 : SizeT) : SSizeT ++ fun pread(x0 : Int, x1 : Void*, x2 : SizeT, x3 : OffT) : SSizeT ++ fun rmdir(x0 : Char*) : Int ++ fun symlink(x0 : Char*, x1 : Char*) : Int ++ fun syscall(x0 : Long, ...) : Long ++ fun sysconf(x0 : Int) : Long ++ fun unlink(x0 : Char*) : Int ++ fun write(x0 : Int, x1 : Void*, x2 : SizeT) : SSizeT ++end -- cgit v1.2.3