diff options
author | Marcin Gasperowicz <xnooga@gmail.com> | 2020-05-23 15:31:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-23 15:31:30 +0200 |
commit | c21dc21f36798e2e941e5f2f0da7531c1a228bea (patch) | |
tree | 7f3cec790db433f2749a4e5dd783995cb3f018df /Libraries | |
parent | dd924b730a7cd0bc1d5997f87e12a1df847f5961 (diff) | |
download | serenity-c21dc21f36798e2e941e5f2f0da7531c1a228bea.zip |
Build: Make Lagom build under macOS (#2341)
Lagom now builds under macOS. Only two minor adjustments were required:
* LibCore TCP/UDP code can't use `SOCK_{NONBLOCK,CLOEXEC}` on macOS,
use ioctl() and fcntl() instead
* LibJS `Heap` code pthread usage ported to MacOS
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibCore/TCPServer.cpp | 10 | ||||
-rw-r--r-- | Libraries/LibCore/TCPSocket.cpp | 10 | ||||
-rw-r--r-- | Libraries/LibCore/UDPServer.cpp | 11 | ||||
-rw-r--r-- | Libraries/LibCore/UDPSocket.cpp | 11 | ||||
-rw-r--r-- | Libraries/LibJS/Heap/Heap.cpp | 10 |
5 files changed, 51 insertions, 1 deletions
diff --git a/Libraries/LibCore/TCPServer.cpp b/Libraries/LibCore/TCPServer.cpp index bfc8a9ce61..c751b3395a 100644 --- a/Libraries/LibCore/TCPServer.cpp +++ b/Libraries/LibCore/TCPServer.cpp @@ -32,12 +32,22 @@ #include <stdio.h> #include <sys/socket.h> +#ifndef SOCK_NONBLOCK +# include <sys/ioctl.h> +#endif namespace Core { TCPServer::TCPServer(Object* parent) : Object(parent) { +#ifdef SOCK_NONBLOCK m_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0); +#else + m_fd = socket(AF_INET, SOCK_STREAM, 0); + int option = 1; + ioctl(m_fd, FIONBIO, &option); + fcntl(m_fd, F_SETFD, FD_CLOEXEC); +#endif ASSERT(m_fd >= 0); } diff --git a/Libraries/LibCore/TCPSocket.cpp b/Libraries/LibCore/TCPSocket.cpp index ca23112e0f..6029a82432 100644 --- a/Libraries/LibCore/TCPSocket.cpp +++ b/Libraries/LibCore/TCPSocket.cpp @@ -28,6 +28,10 @@ #include <errno.h> #include <sys/socket.h> +#ifndef SOCK_NONBLOCK +# include <sys/ioctl.h> +#endif + namespace Core { TCPSocket::TCPSocket(int fd, Object* parent) @@ -43,7 +47,13 @@ TCPSocket::TCPSocket(int fd, Object* parent) TCPSocket::TCPSocket(Object* parent) : Socket(Socket::Type::TCP, parent) { +#ifdef SOCK_NONBLOCK int fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); +#else + int fd = socket(AF_INET, SOCK_STREAM, 0); + int option = 1; + ioctl(fd, FIONBIO, &option); +#endif if (fd < 0) { set_error(errno); } else { diff --git a/Libraries/LibCore/UDPServer.cpp b/Libraries/LibCore/UDPServer.cpp index ede8ff15fa..462ce5f983 100644 --- a/Libraries/LibCore/UDPServer.cpp +++ b/Libraries/LibCore/UDPServer.cpp @@ -31,12 +31,23 @@ #include <LibCore/UDPSocket.h> #include <stdio.h> +#ifndef SOCK_NONBLOCK +# include <sys/ioctl.h> +#endif + namespace Core { UDPServer::UDPServer(Object* parent) : Object(parent) { +#ifdef SOCK_NONBLOCK m_fd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0); +#else + m_fd = socket(AF_INET, SOCK_DGRAM, 0); + int option = 1; + ioctl(m_fd, FIONBIO, &option); + fcntl(m_fd, F_SETFD, FD_CLOEXEC); +#endif ASSERT(m_fd >= 0); } diff --git a/Libraries/LibCore/UDPSocket.cpp b/Libraries/LibCore/UDPSocket.cpp index 39d73412e7..943419667a 100644 --- a/Libraries/LibCore/UDPSocket.cpp +++ b/Libraries/LibCore/UDPSocket.cpp @@ -28,6 +28,10 @@ #include <errno.h> #include <sys/socket.h> +#ifndef SOCK_NONBLOCK +# include <sys/ioctl.h> +#endif + namespace Core { UDPSocket::UDPSocket(int fd, Object* parent) @@ -43,7 +47,14 @@ UDPSocket::UDPSocket(int fd, Object* parent) UDPSocket::UDPSocket(Object* parent) : Socket(Socket::Type::UDP, parent) { +#ifdef SOCK_NONBLOCK int fd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0); +#else + int fd = socket(AF_INET, SOCK_DGRAM, 0); + int option = 1; + ioctl(fd, FIONBIO, &option); +#endif + if (fd < 0) { set_error(errno); } else { diff --git a/Libraries/LibJS/Heap/Heap.cpp b/Libraries/LibJS/Heap/Heap.cpp index f1739531e9..ae451897ba 100644 --- a/Libraries/LibJS/Heap/Heap.cpp +++ b/Libraries/LibJS/Heap/Heap.cpp @@ -37,7 +37,7 @@ #ifdef __serenity__ # include <serenity.h> -#elif __linux__ +#elif __linux__ or __MACH__ # include <pthread.h> #endif @@ -157,6 +157,14 @@ void Heap::gather_conservative_roots(HashTable<Cell*>& roots) ASSERT_NOT_REACHED(); } pthread_attr_destroy(&attr); +#elif __MACH__ + stack_base = (FlatPtr)pthread_get_stackaddr_np(pthread_self()); + pthread_attr_t attr = {}; + if (int rc = pthread_attr_getstacksize(&attr, &stack_size) != 0) { + fprintf(stderr, "pthread_attr_getstacksize: %s\n", strerror(-rc)); + ASSERT_NOT_REACHED(); + } + pthread_attr_destroy(&attr); #endif FlatPtr stack_reference = reinterpret_cast<FlatPtr>(&dummy); |