summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorMarcin Gasperowicz <xnooga@gmail.com>2020-05-23 15:31:30 +0200
committerGitHub <noreply@github.com>2020-05-23 15:31:30 +0200
commitc21dc21f36798e2e941e5f2f0da7531c1a228bea (patch)
tree7f3cec790db433f2749a4e5dd783995cb3f018df /Libraries
parentdd924b730a7cd0bc1d5997f87e12a1df847f5961 (diff)
downloadserenity-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.cpp10
-rw-r--r--Libraries/LibCore/TCPSocket.cpp10
-rw-r--r--Libraries/LibCore/UDPServer.cpp11
-rw-r--r--Libraries/LibCore/UDPSocket.cpp11
-rw-r--r--Libraries/LibJS/Heap/Heap.cpp10
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);