diff --git a/AK/Platform.h b/AK/Platform.h index c2fe8deee3..7125ab9689 100644 --- a/AK/Platform.h +++ b/AK/Platform.h @@ -68,11 +68,16 @@ # define AK_OS_LINUX #endif -#if defined(__APPLE__) && defined(__MACH__) +#if defined(__APPLE__) && defined(__MACH__) && !defined(__IOS__) # define AK_OS_MACOS # define AK_OS_BSD_GENERIC #endif +#if defined(__IOS__) +# define AK_OS_IOS +# define AK_OS_BSD_GENERIC +#endif + #if defined(__FreeBSD__) # define AK_OS_BSD_GENERIC # define AK_OS_FREEBSD diff --git a/AK/StackInfo.cpp b/AK/StackInfo.cpp index fa5833aa95..944e7b7a7e 100644 --- a/AK/StackInfo.cpp +++ b/AK/StackInfo.cpp @@ -12,9 +12,9 @@ #ifdef AK_OS_SERENITY # include -#elif defined(AK_OS_LINUX) or defined(AK_LIBC_GLIBC) or defined(AK_OS_MACOS) or defined(AK_OS_NETBSD) or defined(AK_OS_SOLARIS) or defined(AK_OS_HAIKU) +#elif defined(AK_OS_LINUX) || defined(AK_LIBC_GLIBC) || defined(AK_OS_MACOS) || defined(AK_OS_IOS) || defined(AK_OS_NETBSD) || defined(AK_OS_SOLARIS) || defined(AK_OS_HAIKU) # include -#elif defined(AK_OS_FREEBSD) or defined(AK_OS_OPENBSD) +#elif defined(AK_OS_FREEBSD) || defined(AK_OS_OPENBSD) # include # include #elif defined(AK_OS_WINDOWS) @@ -54,7 +54,7 @@ StackInfo::StackInfo() VERIFY_NOT_REACHED(); } pthread_attr_destroy(&attr); -#elif defined(AK_OS_MACOS) +#elif defined(AK_OS_MACOS) || defined(AK_OS_IOS) // NOTE: !! On MacOS, pthread_get_stackaddr_np gives the TOP of the stack, not the bottom! FlatPtr top_of_stack = (FlatPtr)pthread_get_stackaddr_np(pthread_self()); m_size = (size_t)pthread_get_stacksize_np(pthread_self()); diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index d8df3f2331..55409dcce6 100644 --- a/Ladybird/CMakeLists.txt +++ b/Ladybird/CMakeLists.txt @@ -8,7 +8,7 @@ project(ladybird include(GNUInstallDirs) -if (ANDROID) +if (ANDROID OR IOS) set(BUILD_SHARED_LIBS OFF) endif() diff --git a/Ladybird/WebContent/CMakeLists.txt b/Ladybird/WebContent/CMakeLists.txt index 7fa8701ae7..fadd13dfa1 100644 --- a/Ladybird/WebContent/CMakeLists.txt +++ b/Ladybird/WebContent/CMakeLists.txt @@ -42,7 +42,7 @@ if (ENABLE_QT) endif() else() set(LIB_TYPE STATIC) - if (ANDROID) + if (ANDROID OR IOS) set(LIB_TYPE SHARED) endif() add_library(webcontent ${LIB_TYPE} ${WEBCONTENT_SOURCES}) diff --git a/Meta/CMake/accelerated_graphics.cmake b/Meta/CMake/accelerated_graphics.cmake index 07e9270df8..30f15c7d63 100644 --- a/Meta/CMake/accelerated_graphics.cmake +++ b/Meta/CMake/accelerated_graphics.cmake @@ -4,7 +4,7 @@ if (NOT ENABLE_ACCELERATED_GRAPHICS OR EMSCRIPTEN) return() endif() -if (APPLE) +if (APPLE AND NOT IOS) set(HAS_ACCELERATED_GRAPHICS ON CACHE BOOL "" FORCE) set(ACCEL_GFX_LIBS "-framework OpenGL" CACHE STRING "" FORCE) else() diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 6eb16f294a..2ae913e3ce 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -539,7 +539,7 @@ if (BUILD_LAGOM) add_serenity_subdirectory(Userland/Shell) - if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD AND NOT ANDROID) + if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD AND NOT ANDROID AND NOT IOS) # Lagom Services add_serenity_subdirectory(Userland/Services) diff --git a/Userland/Libraries/LibAudio/CMakeLists.txt b/Userland/Libraries/LibAudio/CMakeLists.txt index 6f50e24dd5..f19100d2fc 100644 --- a/Userland/Libraries/LibAudio/CMakeLists.txt +++ b/Userland/Libraries/LibAudio/CMakeLists.txt @@ -42,7 +42,7 @@ if (HAVE_PULSEAUDIO) target_compile_definitions(LibAudio PRIVATE HAVE_PULSEAUDIO=1) endif() -if (APPLE) +if (APPLE AND NOT IOS) target_sources(LibAudio PRIVATE PlaybackStreamAudioUnit.cpp) find_library(AUDIO_UNIT AudioUnit REQUIRED) diff --git a/Userland/Libraries/LibCompress/BrotliDictionary.cpp b/Userland/Libraries/LibCompress/BrotliDictionary.cpp index 75423fd4b9..93f245dde6 100644 --- a/Userland/Libraries/LibCompress/BrotliDictionary.cpp +++ b/Userland/Libraries/LibCompress/BrotliDictionary.cpp @@ -9,7 +9,7 @@ // Include the 119.9 KiB of dictionary data from a binary file extern u8 const brotli_dictionary_data[]; -#if defined(AK_OS_MACOS) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) asm(".const_data\n" ".globl _brotli_dictionary_data\n" "_brotli_dictionary_data:\n"); diff --git a/Userland/Libraries/LibCore/CMakeLists.txt b/Userland/Libraries/LibCore/CMakeLists.txt index 095f4da62e..e4c248d6a6 100644 --- a/Userland/Libraries/LibCore/CMakeLists.txt +++ b/Userland/Libraries/LibCore/CMakeLists.txt @@ -55,7 +55,7 @@ if (SERENITYOS) list(APPEND SOURCES FileWatcherSerenity.cpp) elseif (LINUX AND NOT EMSCRIPTEN) list(APPEND SOURCES FileWatcherLinux.cpp) -elseif (APPLE) +elseif (APPLE AND NOT IOS) list(APPEND SOURCES FileWatcherMacOS.mm) else() list(APPEND SOURCES FileWatcherUnimplemented.cpp) diff --git a/Userland/Libraries/LibCore/Environment.cpp b/Userland/Libraries/LibCore/Environment.cpp index b23b054ee9..c96ab1deb2 100644 --- a/Userland/Libraries/LibCore/Environment.cpp +++ b/Userland/Libraries/LibCore/Environment.cpp @@ -10,7 +10,7 @@ #include "Environment.h" #include -#if defined(AK_OS_MACOS) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) # include #else extern char** environ; @@ -20,7 +20,7 @@ namespace Core::Environment { char** raw_environ() { -#if defined(AK_OS_MACOS) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) return *_NSGetEnviron(); #else return environ; diff --git a/Userland/Libraries/LibCore/LocalServer.cpp b/Userland/Libraries/LibCore/LocalServer.cpp index a96c6043db..db9acfcdc3 100644 --- a/Userland/Libraries/LibCore/LocalServer.cpp +++ b/Userland/Libraries/LibCore/LocalServer.cpp @@ -81,7 +81,7 @@ bool LocalServer::listen(ByteString const& address) fcntl(m_fd, F_SETFD, FD_CLOEXEC); #endif VERIFY(m_fd >= 0); -#ifndef AK_OS_MACOS +#if !defined(AK_OS_MACOS) && !defined(AK_OS_IOS) rc = fchmod(m_fd, 0600); if (rc < 0) { perror("fchmod"); @@ -118,7 +118,7 @@ ErrorOr> LocalServer::accept() VERIFY(m_listening); sockaddr_un un; socklen_t un_size = sizeof(un); -#if !defined(AK_OS_MACOS) && !defined(AK_OS_HAIKU) +#if !defined(AK_OS_MACOS) && !defined(AK_OS_IOS) && !defined(AK_OS_HAIKU) int accepted_fd = ::accept4(m_fd, (sockaddr*)&un, &un_size, SOCK_NONBLOCK | SOCK_CLOEXEC); #else int accepted_fd = ::accept(m_fd, (sockaddr*)&un, &un_size); @@ -127,7 +127,7 @@ ErrorOr> LocalServer::accept() return Error::from_syscall("accept"sv, -errno); } -#if defined(AK_OS_MACOS) || defined(AK_OS_HAIKU) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) || defined(AK_OS_HAIKU) int option = 1; ioctl(m_fd, FIONBIO, &option); (void)fcntl(accepted_fd, F_SETFD, FD_CLOEXEC); diff --git a/Userland/Libraries/LibCore/Socket.cpp b/Userland/Libraries/LibCore/Socket.cpp index 395c0ac008..85e99f2c2a 100644 --- a/Userland/Libraries/LibCore/Socket.cpp +++ b/Userland/Libraries/LibCore/Socket.cpp @@ -358,7 +358,7 @@ ErrorOr LocalSocket::send_fd(int fd) ErrorOr LocalSocket::peer_pid() const { -#ifdef AK_OS_MACOS +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) pid_t pid; socklen_t pid_size = sizeof(pid); #elif defined(AK_OS_FREEBSD) @@ -380,7 +380,7 @@ ErrorOr LocalSocket::peer_pid() const socklen_t creds_size = sizeof(creds); #endif -#ifdef AK_OS_MACOS +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) TRY(System::getsockopt(m_helper.fd(), SOL_LOCAL, LOCAL_PEERPID, &pid, &pid_size)); return pid; #elif defined(AK_OS_FREEBSD) diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 2eef1f1261..923281510b 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -47,7 +47,7 @@ static int memfd_create(char const* name, unsigned int flags) } #endif -#if defined(AK_OS_MACOS) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) # include # include #else @@ -140,7 +140,7 @@ static ErrorOr> getgrent_impl(Span buffer) namespace Core::System { #ifndef HOST_NAME_MAX -# ifdef AK_OS_MACOS +# if defined(AK_OS_MACOS) || defined(AK_OS_IOS) # define HOST_NAME_MAX 255 # else # define HOST_NAME_MAX 64 @@ -399,7 +399,7 @@ ErrorOr> getspnam(StringView name) } #endif -#if !defined(AK_OS_MACOS) && !defined(AK_OS_HAIKU) +#if !defined(AK_OS_MACOS) && !defined(AK_OS_IOS) && !defined(AK_OS_HAIKU) ErrorOr accept4(int sockfd, sockaddr* address, socklen_t* address_length, int flags) { auto fd = ::accept4(sockfd, address, address_length, flags); @@ -898,17 +898,19 @@ ErrorOr> getgrnam(StringView name) return Optional {}; } +#if !defined(AK_OS_IOS) ErrorOr clock_settime(clockid_t clock_id, struct timespec* ts) { -#ifdef AK_OS_SERENITY +# ifdef AK_OS_SERENITY int rc = syscall(SC_clock_settime, clock_id, ts); HANDLE_SYSCALL_RETURN_VALUE("clocksettime", rc, {}); -#else +# else if (::clock_settime(clock_id, ts) < 0) return Error::from_syscall("clocksettime"sv, -errno); return {}; -#endif +# endif } +#endif static ALWAYS_INLINE ErrorOr posix_spawn_wrapper(StringView path, posix_spawn_file_actions_t const* file_actions, posix_spawnattr_t const* attr, char* const arguments[], char* const envp[], StringView function_name, decltype(::posix_spawn) spawn_function) { @@ -1379,7 +1381,7 @@ ErrorOr exec(StringView filename, ReadonlySpan arguments, Sear envp[environment->size()] = nullptr; if (search_in_path == SearchInPath::Yes && !filename.contains('/')) { -# if defined(AK_OS_MACOS) || defined(AK_OS_FREEBSD) || defined(AK_OS_SOLARIS) +# if defined(AK_OS_MACOS) || defined(AK_OS_IOS) || defined(AK_OS_FREEBSD) || defined(AK_OS_SOLARIS) // These BSDs don't support execvpe(), so we'll have to manually search the PATH. ScopedValueRollback errno_rollback(errno); @@ -1782,7 +1784,7 @@ ErrorOr current_executable_path() size_t len = sizeof(path); if (sysctl(mib, 4, path, &len, nullptr, 0) < 0) return Error::from_syscall("sysctl"sv, -errno); -#elif defined(AK_OS_MACOS) +#elif defined(AK_OS_MACOS) || defined(AK_OS_IOS) u32 size = sizeof(path); auto ret = _NSGetExecutablePath(path, &size); if (ret != 0) diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 48e75707e0..f37f699f67 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -152,7 +152,11 @@ ErrorOr> getgrnam(StringView name); ErrorOr> getpwuid(uid_t); ErrorOr> getgrent(Span buffer); ErrorOr> getgrgid(gid_t); + +#if !defined(AK_OS_IOS) ErrorOr clock_settime(clockid_t clock_id, struct timespec* ts); +#endif + ErrorOr posix_spawn(StringView path, posix_spawn_file_actions_t const* file_actions, posix_spawnattr_t const* attr, char* const arguments[], char* const envp[]); ErrorOr posix_spawnp(StringView path, posix_spawn_file_actions_t* const file_actions, posix_spawnattr_t* const attr, char* const arguments[], char* const envp[]); ErrorOr lseek(int fd, off_t, int whence); diff --git a/Userland/Libraries/LibCore/TCPServer.cpp b/Userland/Libraries/LibCore/TCPServer.cpp index 4835a61fa7..cb4ffe4d9d 100644 --- a/Userland/Libraries/LibCore/TCPServer.cpp +++ b/Userland/Libraries/LibCore/TCPServer.cpp @@ -80,7 +80,7 @@ ErrorOr> TCPServer::accept() VERIFY(m_listening); sockaddr_in in; socklen_t in_size = sizeof(in); -#if !defined(AK_OS_MACOS) && !defined(AK_OS_HAIKU) +#if !defined(AK_OS_MACOS) && !defined(AK_OS_IOS) && !defined(AK_OS_HAIKU) int accepted_fd = TRY(Core::System::accept4(m_fd, (sockaddr*)&in, &in_size, SOCK_NONBLOCK | SOCK_CLOEXEC)); #else int accepted_fd = TRY(Core::System::accept(m_fd, (sockaddr*)&in, &in_size)); @@ -88,7 +88,7 @@ ErrorOr> TCPServer::accept() auto socket = TRY(TCPSocket::adopt_fd(accepted_fd)); -#if defined(AK_OS_MACOS) || defined(AK_OS_HAIKU) +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) || defined(AK_OS_HAIKU) // FIXME: Ideally, we should let the caller decide whether it wants the // socket to be nonblocking or not, but there are currently places // which depend on this. diff --git a/Userland/Libraries/LibFileSystem/FileSystem.cpp b/Userland/Libraries/LibFileSystem/FileSystem.cpp index 8adb2246ff..43a96586e0 100644 --- a/Userland/Libraries/LibFileSystem/FileSystem.cpp +++ b/Userland/Libraries/LibFileSystem/FileSystem.cpp @@ -14,7 +14,7 @@ #if defined(AK_OS_SERENITY) # include -#elif defined(AK_OS_BSD_GENERIC) +#elif !defined(AK_OS_IOS) && defined(AK_OS_BSD_GENERIC) # include #elif defined(AK_OS_LINUX) # include @@ -230,7 +230,7 @@ ErrorOr copy_file(StringView destination_path, StringView source_path, str if (has_flag(preserve_mode, PreserveMode::Timestamps)) { struct timespec times[2] = { -#ifdef AK_OS_MACOS +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) source_stat.st_atimespec, source_stat.st_mtimespec, #else @@ -278,7 +278,7 @@ ErrorOr copy_directory(StringView destination_path, StringView source_path if (has_flag(preserve_mode, PreserveMode::Timestamps)) { struct timespec times[2] = { -#ifdef AK_OS_MACOS +#if defined(AK_OS_MACOS) || defined(AK_OS_IOS) source_stat.st_atimespec, source_stat.st_mtimespec, #else diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h index ddeb021e87..ec4aa74f38 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h @@ -38,6 +38,8 @@ namespace Web { # define OS_STRING "Linux" #elif defined(AK_OS_MACOS) # define OS_STRING "macOS" +#elif defined(AK_OS_IOS) +# define OS_STRING "iOS" #elif defined(AK_OS_WINDOWS) # define OS_STRING "Windows" #elif defined(AK_OS_FREEBSD)