diff --git a/stdlib/public/Platform/CMakeLists.txt b/stdlib/public/Platform/CMakeLists.txt index 7554331b1744d..5b6d036dbec7d 100644 --- a/stdlib/public/Platform/CMakeLists.txt +++ b/stdlib/public/Platform/CMakeLists.txt @@ -130,13 +130,7 @@ foreach(sdk ${SWIFT_SDKS}) set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}") set(module_dir_static "${SWIFTSTATICLIB_DIR}/${arch_subdir}") - if(${sdk} STREQUAL ANDROID) - set(glibc_modulemap_source "bionic.modulemap.gyb") - elseif(${sdk} STREQUAL OPENBSD) - set(glibc_modulemap_source "libc-openbsd.modulemap.gyb") - else() - set(glibc_modulemap_source "glibc.modulemap.gyb") - endif() + set(glibc_modulemap_source "glibc.modulemap.gyb") set(glibc_modulemap_out "${module_dir}/glibc.modulemap") set(glibc_modulemap_out_static "${module_dir_static}/glibc.modulemap") diff --git a/stdlib/public/Platform/SwiftGlibc.h.gyb b/stdlib/public/Platform/SwiftGlibc.h.gyb index 3391eaee29934..61d054e09b049 100644 --- a/stdlib/public/Platform/SwiftGlibc.h.gyb +++ b/stdlib/public/Platform/SwiftGlibc.h.gyb @@ -27,8 +27,8 @@ headers = [ 'string.h', 'tgmath.h', 'time.h', + 'util.h', 'utmp.h', - 'utmpx.h', # POSIX 'aio.h', @@ -70,6 +70,7 @@ headers = [ 'sys/ioctl.h', 'sys/ipc.h', 'sys/mman.h', + 'sys/mount.h', 'sys/msg.h', 'sys/resource.h', 'sys/select.h', diff --git a/stdlib/public/Platform/bionic.modulemap.gyb b/stdlib/public/Platform/bionic.modulemap.gyb deleted file mode 100644 index e44f9082653a6..0000000000000 --- a/stdlib/public/Platform/bionic.modulemap.gyb +++ /dev/null @@ -1,393 +0,0 @@ -//===--- bionic.modulemap -------------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -/// This is a semi-complete modulemap that maps bionics's headers in a roughly -/// similar way to the Darwin SDK modulemap. We do not take care to list every -/// single header which may be included by a particular submodule, so there can -/// still be issues if imported into the same context as one in which someone -/// included those headers directly. -/// -/// It's not named just Bionic so that it doesn't conflict in the event of a -/// future official bionic modulemap. -module SwiftGlibc [system] { - - link "dl" - - // C standard library - module C { - module features { - header "${GLIBC_INCLUDE_PATH}/features.h" - export * - } - - module complex { - header "${GLIBC_INCLUDE_PATH}/complex.h" - export * - } - - module pty { - header "${GLIBC_INCLUDE_PATH}/pty.h" - export * - } - module utmp { - header "${GLIBC_INCLUDE_PATH}/utmp.h" - export * - } - - module ctype { - header "${GLIBC_INCLUDE_PATH}/ctype.h" - export * - } - module errno { - header "${GLIBC_INCLUDE_PATH}/errno.h" - export * - } - - module fenv { - header "${GLIBC_INCLUDE_PATH}/fenv.h" - export * - } - - // note: supplied by compiler - // module float { - // header "${GLIBC_INCLUDE_PATH}/float.h" - // export * - // } - - module inttypes { - header "${GLIBC_INCLUDE_PATH}/inttypes.h" - export * - } - - // note: potentially supplied by compiler - // module iso646 { - // header "${GLIBC_INCLUDE_PATH}/iso646.h" - // export * - // } - // module limits { - // header "${GLIBC_INCLUDE_PATH}/limits.h" - // export * - // } - - module locale { - header "${GLIBC_INCLUDE_PATH}/locale.h" - export * - } - module math { - link "m" - header "${GLIBC_INCLUDE_PATH}/math.h" - export * - } - module setjmp { - header "${GLIBC_INCLUDE_PATH}/setjmp.h" - export * - } - module signal { - header "${GLIBC_INCLUDE_PATH}/signal.h" - export * - } - - // note: supplied by the compiler - // module stdarg { - // header "${GLIBC_INCLUDE_PATH}/stdarg.h" - // export * - // } - // module stdbool { - // header "${GLIBC_INCLUDE_PATH}/stdbool.h" - // export * - // } - // module stddef { - // header "${GLIBC_INCLUDE_PATH}/stddef.h" - // export * - // } - // module stdint { - // header "${GLIBC_INCLUDE_PATH}/stdint.h" - // export * - // } - - module stdio { - header "${GLIBC_INCLUDE_PATH}/stdio.h" - export * - } - module stdlib { - header "${GLIBC_INCLUDE_PATH}/stdlib.h" - export * - export stddef - } - module string { - header "${GLIBC_INCLUDE_PATH}/string.h" - export * - } - - // note: supplied by the compiler - // explicit module tgmath { - // header "${GLIBC_INCLUDE_PATH}/tgmath.h" - // export * - // } - - module time { - header "${GLIBC_INCLUDE_PATH}/time.h" - export * - } - } - - // POSIX - module POSIX { - module wait { - header "${GLIBC_INCLUDE_PATH}/wait.h" - export * - } - - module cpio { - header "${GLIBC_INCLUDE_PATH}/cpio.h" - export * - } - module nl_types { - header "${GLIBC_INCLUDE_PATH}/nl_types.h" - export * - } - - module ftw { - header "${GLIBC_INCLUDE_PATH}/ftw.h" - export * - } - module glob { - header "${GLIBC_INCLUDE_PATH}/glob.h" - export * - } - module iconv { - header "${GLIBC_INCLUDE_PATH}/iconv.h" - export * - } - module langinfo { - header "${GLIBC_INCLUDE_PATH}/langinfo.h" - export * - } - module netdb { - header "${GLIBC_INCLUDE_PATH}/netdb.h" - export * - } - module ifaddrs { - header "${GLIBC_INCLUDE_PATH}/ifaddrs.h" - export * - } - module search { - header "${GLIBC_INCLUDE_PATH}/search.h" - export * - } - module spawn { - header "${GLIBC_INCLUDE_PATH}/spawn.h" - export * - } - module syslog { - header "${GLIBC_INCLUDE_PATH}/syslog.h" - export * - } - module tar { - header "${GLIBC_INCLUDE_PATH}/tar.h" - export * - } - - module arpa { - module inet { - header "${GLIBC_INCLUDE_PATH}/arpa/inet.h" - export * - } - export * - } - module dirent { - header "${GLIBC_INCLUDE_PATH}/dirent.h" - export * - } - module dlfcn { - header "${GLIBC_INCLUDE_PATH}/dlfcn.h" - export * - } - module fcntl { - header "${GLIBC_INCLUDE_PATH}/fcntl.h" - export * - } - module fnmatch { - header "${GLIBC_INCLUDE_PATH}/fnmatch.h" - export * - } - module grp { - header "${GLIBC_INCLUDE_PATH}/grp.h" - export * - } - module ioctl { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/ioctl.h" - export * - } - module libgen { - header "${GLIBC_INCLUDE_PATH}/libgen.h" - export * - } - module net { - module if { - header "${GLIBC_INCLUDE_PATH}/net/if.h" - export * - } - } - module netinet { - module in { - header "${GLIBC_INCLUDE_PATH}/netinet/in.h" - export * - - exclude header "${GLIBC_INCLUDE_PATH}/netinet6/in6.h" - } - module tcp { - header "${GLIBC_INCLUDE_PATH}/netinet/tcp.h" - export * - } - } - module poll { - header "${GLIBC_INCLUDE_PATH}/poll.h" - export * - } - module pthread { - header "${GLIBC_INCLUDE_PATH}/pthread.h" - export * - } - module pwd { - header "${GLIBC_INCLUDE_PATH}/pwd.h" - export * - } - module regex { - header "${GLIBC_INCLUDE_PATH}/regex.h" - export * - } - module sched { - header "${GLIBC_INCLUDE_PATH}/sched.h" - export * - } - module semaphore { - header "${GLIBC_INCLUDE_PATH}/semaphore.h" - export * - } - module strings { - header "${GLIBC_INCLUDE_PATH}/strings.h" - export * - } - - module sys { - export * - - module cdefs { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/cdefs.h" - export * - } - module file { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/file.h" - export * - } - module sem { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/sem.h" - export * - } - module shm { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/shm.h" - export * - } - module inotify { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/inotify.h" - export * - } - module statvfs { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/statvfs.h" - export * - } - - module ipc { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/ipc.h" - export * - } - module mman { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/mman.h" - export * - } - module msg { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/msg.h" - export * - } - module resource { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/resource.h" - export * - } - module select { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/select.h" - export * - } - module sendfile { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/sendfile.h" - export * - } - module socket { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/socket.h" - export * - } - module stat { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/stat.h" - export * - } - module time { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/time.h" - export * - } - module times { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/times.h" - export * - } - module types { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/types.h" - export * - } - module uio { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/uio.h" - export * - } - module un { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/un.h" - export * - } - module user { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/user.h" - export * - } - module utsname { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/utsname.h" - export * - } - module wait { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/wait.h" - export * - } - } - module sysexits { - header "${GLIBC_INCLUDE_PATH}/sysexits.h" - export * - } - module termios { - header "${GLIBC_INCLUDE_PATH}/termios.h" - export * - } - module unistd { - header "${GLIBC_INCLUDE_PATH}/unistd.h" - export * - } - module utime { - header "${GLIBC_INCLUDE_PATH}/utime.h" - export * - } - } -} - diff --git a/stdlib/public/Platform/glibc.modulemap.gyb b/stdlib/public/Platform/glibc.modulemap.gyb index 455dd111e2ce3..da3ceb2a2bc68 100644 --- a/stdlib/public/Platform/glibc.modulemap.gyb +++ b/stdlib/public/Platform/glibc.modulemap.gyb @@ -19,17 +19,19 @@ /// It's not named just Glibc so that it doesn't conflict in the event of a /// future official glibc modulemap. module SwiftGlibc [system] { -% if CMAKE_SDK == "LINUX": +% if CMAKE_SDK in ["LINUX", "ANDROID", "OPENBSD"]: link "m" % end -% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN"]: +% if CMAKE_SDK in ["LINUX", "FREEBSD", "OPENBSD", "CYGWIN"]: link "pthread" // FIXME: util contains rarely used functions and not usually needed. Unfortunately // link directive doesn't work in the submodule yet. +% if CMAKE_SDK != "OPENBSD": link "util" % end +% end -% if CMAKE_SDK != "FREEBSD" and CMAKE_SDK != "HAIKU": +% if CMAKE_SDK not in ["FREEBSD", "OPENBSD", "HAIKU"]: link "dl" % end @@ -43,7 +45,7 @@ module SwiftGlibc [system] { export * } -% if CMAKE_SDK != "WASI": +% if CMAKE_SDK != "WASI" and CMAKE_SDK != "ANDROID": module CUUID [system] { header "${GLIBC_INCLUDE_PATH}/uuid/uuid.h" link "uuid" diff --git a/stdlib/public/Platform/libc-openbsd.modulemap.gyb b/stdlib/public/Platform/libc-openbsd.modulemap.gyb deleted file mode 100644 index 48d9bddd86bb3..0000000000000 --- a/stdlib/public/Platform/libc-openbsd.modulemap.gyb +++ /dev/null @@ -1,315 +0,0 @@ -//===--- libc-openbsd.modulemap.gyb ----------------------------------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors -// -//===----------------------------------------------------------------------===// - -/// Partial modulemap for libc on OpenBSD. -module SwiftGlibc [system] { - link "pthread" - link "util" - - // C standard library - module C { - module complex { - header "${GLIBC_INCLUDE_PATH}/complex.h" - export * - } - module ctype { - header "${GLIBC_INCLUDE_PATH}/ctype.h" - export * - } - module errno { - header "${GLIBC_INCLUDE_PATH}/errno.h" - export * - } - module fenv { - header "${GLIBC_INCLUDE_PATH}/fenv.h" - export * - } - module inttypes { - header "${GLIBC_INCLUDE_PATH}/inttypes.h" - export * - } - module locale { - header "${GLIBC_INCLUDE_PATH}/locale.h" - export * - } - module math { - link "m" - header "${GLIBC_INCLUDE_PATH}/math.h" - export * - } - module setjmp { - header "${GLIBC_INCLUDE_PATH}/setjmp.h" - export * - } - module signal { - header "${GLIBC_INCLUDE_PATH}/signal.h" - export * - } - - module stdio { - header "${GLIBC_INCLUDE_PATH}/stdio.h" - export * - } - module stdlib { - header "${GLIBC_INCLUDE_PATH}/stdlib.h" - export * - export stddef - } - module stdint { - header "${GLIBC_INCLUDE_PATH}/stdint.h" - export * - } - module string { - header "${GLIBC_INCLUDE_PATH}/string.h" - export * - } - module time { - header "${GLIBC_INCLUDE_PATH}/time.h" - export * - } - } - - // POSIX - module POSIX { - module cpio { - header "${GLIBC_INCLUDE_PATH}/cpio.h" - export * - } - module nl_types { - header "${GLIBC_INCLUDE_PATH}/nl_types.h" - export * - } - module ftw { - header "${GLIBC_INCLUDE_PATH}/ftw.h" - export * - } - module glob { - header "${GLIBC_INCLUDE_PATH}/glob.h" - export * - } - module langinfo { - header "${GLIBC_INCLUDE_PATH}/langinfo.h" - export * - } - module netdb { - header "${GLIBC_INCLUDE_PATH}/netdb.h" - export * - } - module ifaddrs { - header "${GLIBC_INCLUDE_PATH}/ifaddrs.h" - export * - } - module search { - header "${GLIBC_INCLUDE_PATH}/search.h" - export * - } - module spawn { - header "${GLIBC_INCLUDE_PATH}/spawn.h" - export * - } - module syslog { - header "${GLIBC_INCLUDE_PATH}/syslog.h" - export * - } - module tar { - header "${GLIBC_INCLUDE_PATH}/tar.h" - export * - } - module utmp { - header "${GLIBC_INCLUDE_PATH}/utmp.h" - export * - } - module arpa { - module inet { - header "${GLIBC_INCLUDE_PATH}/arpa/inet.h" - export * - } - export * - } - module dirent { - header "${GLIBC_INCLUDE_PATH}/dirent.h" - export * - } - module dl { - header "${GLIBC_INCLUDE_PATH}/link.h" - export * - } - module dlfcn { - header "${GLIBC_INCLUDE_PATH}/dlfcn.h" - export * - } - module fcntl { - header "${GLIBC_INCLUDE_PATH}/fcntl.h" - export * - } - module fnmatch { - header "${GLIBC_INCLUDE_PATH}/fnmatch.h" - export * - } - module grp { - header "${GLIBC_INCLUDE_PATH}/grp.h" - export * - } - module ioctl { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/ioctl.h" - export * - } - module libgen { - header "${GLIBC_INCLUDE_PATH}/libgen.h" - export * - } - module net { - module if { - header "${GLIBC_INCLUDE_PATH}/net/if.h" - export * - } - } - module netinet { - module in { - header "${GLIBC_INCLUDE_PATH}/netinet/in.h" - export * - - exclude header "${GLIBC_INCLUDE_PATH}/netinet6/in6.h" - } - module tcp { - header "${GLIBC_INCLUDE_PATH}/netinet/tcp.h" - export * - } - } - module poll { - header "${GLIBC_INCLUDE_PATH}/poll.h" - export * - } - module pthread { - header "${GLIBC_INCLUDE_PATH}/pthread.h" - export * - } - module pwd { - header "${GLIBC_INCLUDE_PATH}/pwd.h" - export * - } - module regex { - header "${GLIBC_INCLUDE_PATH}/regex.h" - export * - } - module sched { - header "${GLIBC_INCLUDE_PATH}/sched.h" - export * - } - module semaphore { - header "${GLIBC_INCLUDE_PATH}/semaphore.h" - export * - } - module strings { - header "${GLIBC_INCLUDE_PATH}/strings.h" - export * - } - - module sys { - export * - - module file { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/file.h" - export * - } - module sem { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/sem.h" - export * - } - module shm { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/shm.h" - export * - } - module statvfs { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/statvfs.h" - export * - } - module ipc { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/ipc.h" - export * - } - module mman { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/mman.h" - export * - } - module msg { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/msg.h" - export * - } - module resource { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/resource.h" - export * - } - module select { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/select.h" - export * - } - module socket { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/socket.h" - export * - } - module stat { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/stat.h" - export * - } - module time { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/time.h" - export * - } - module times { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/times.h" - export * - } - module types { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/types.h" - export * - } - module event { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/event.h" - export * - } - module uio { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/uio.h" - export * - } - module un { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/un.h" - export * - } - module user { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/user.h" - export * - } - module utsname { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/utsname.h" - export * - } - module wait { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/wait.h" - export * - } - } - module termios { - header "${GLIBC_INCLUDE_PATH}/termios.h" - export * - } - module unistd { - header "${GLIBC_INCLUDE_PATH}/unistd.h" - export * - } - } -} - -module CUUID [system] { - header "${GLIBC_INCLUDE_PATH}/uuid.h" - export * -} diff --git a/stdlib/public/SwiftShims/LibcShims.h b/stdlib/public/SwiftShims/LibcShims.h index 7dfde65ae46a8..6391ddd42be22 100644 --- a/stdlib/public/SwiftShims/LibcShims.h +++ b/stdlib/public/SwiftShims/LibcShims.h @@ -68,7 +68,7 @@ static inline __swift_size_t _swift_stdlib_strlen_unsigned(const unsigned char * SWIFT_READONLY static inline int _swift_stdlib_memcmp(const void *s1, const void *s2, __swift_size_t n) { -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__ANDROID__) || defined(__OpenBSD__) extern int memcmp(const void * _Nullable, const void * _Nullable, __swift_size_t); #else extern int memcmp(const void *, const void *, __swift_size_t); diff --git a/test/Interop/C/libc/include-signal.swift b/test/Interop/C/libc/include-signal.swift index 3b420364f3ce8..83029c9b3b530 100644 --- a/test/Interop/C/libc/include-signal.swift +++ b/test/Interop/C/libc/include-signal.swift @@ -28,6 +28,6 @@ // See https://forums.swift.org/t/problems-with-swiftglibc-and-proposed-fix/37594 // for further details. -// REQUIRES: OS=linux-gnu +// REQUIRES: OS=linux-gnu || OS=linux-android -import IncludeSignal \ No newline at end of file +import IncludeSignal diff --git a/test/Interop/Cxx/class/memory-layout-silgen.swift b/test/Interop/Cxx/class/memory-layout-silgen.swift index a0301a03af7f3..35d3f2797ad32 100644 --- a/test/Interop/Cxx/class/memory-layout-silgen.swift +++ b/test/Interop/Cxx/class/memory-layout-silgen.swift @@ -1,8 +1,5 @@ // RUN: %target-swiftxx-frontend -I %S/Inputs -emit-ir -o - %s | %FileCheck %s -// XFAIL: OS=linux-android -// XFAIL: OS=linux-androideabi - import MemoryLayout var v = PrivateMemberLayout() diff --git a/test/Interop/Cxx/libc/include-glibc.swift b/test/Interop/Cxx/libc/include-glibc.swift index 116dc88895783..b36e7379d22b0 100644 --- a/test/Interop/Cxx/libc/include-glibc.swift +++ b/test/Interop/Cxx/libc/include-glibc.swift @@ -1,7 +1,7 @@ // RUN: %target-run-simple-swift(-Xfrontend -enable-cxx-interop) // REQUIRES: executable_test -// REQUIRES: OS=linux-gnu +// REQUIRES: OS=linux-gnu || OS=linux-android import Glibc import StdlibUnittest