Skip to content

Commit aee81d2

Browse files
returnCodaFi
authored andcommitted
Add Initial platform support for Haiku. (swiftlang#11583)
1 parent 0eae9ea commit aee81d2

40 files changed

+449
-55
lines changed

CMakeLists.txt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,10 @@ set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
170170
"Path on an Android device where build products will be pushed. These are used when running the test suite against the device")
171171

172172
#
173-
# User-configurable ICU specific options for Android, FreeBSD, Linux.
173+
# User-configurable ICU specific options for Android, FreeBSD, Linux and Haiku.
174174
#
175175

176-
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS)
176+
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU)
177177
set(SWIFT_${sdk}_ICU_UC "" CACHE STRING
178178
"Path to a directory containing the icuuc library for ${sdk}")
179179
set(SWIFT_${sdk}_ICU_UC_INCLUDE "" CACHE STRING
@@ -536,6 +536,8 @@ else()
536536
set(SWIFT_HOST_VARIANT_SDK_default "CYGWIN")
537537
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
538538
set(SWIFT_HOST_VARIANT_SDK_default "WINDOWS")
539+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku")
540+
set(SWIFT_HOST_VARIANT_SDK_default "HAIKU")
539541
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
540542
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
541543
else()
@@ -677,6 +679,16 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WINDOWS")
677679
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
678680
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
679681

682+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "HAIKU")
683+
684+
set(CMAKE_EXECUTABLE_FORMAT "ELF")
685+
set(SWIFT_HOST_VARIANT "haiku" CACHE STRING
686+
"Deployment OS for Swift host tools (the compiler) [haiku].")
687+
688+
configure_sdk_unix(HAIKU "Haiku" "haiku" "haiku" "x86_64" "x86_64-unknown-haiku" "/")
689+
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
690+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
691+
680692
elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*)")
681693

682694
set(SWIFT_HOST_VARIANT "macosx" CACHE STRING

cmake/modules/AddSwift.cmake

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,8 @@ function(_add_variant_link_flags)
354354
# options. This causes conflicts.
355355
list(APPEND result "-nostdlib")
356356
endif()
357+
elseif("${LFLAGS_SDK}" STREQUAL "HAIKU")
358+
list(APPEND result "-lbsd" "-latomic" "-Wl,-Bsymbolic")
357359
elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
358360
list(APPEND result
359361
"-ldl" "-llog" "-latomic" "-licudataswift" "-licui18nswift" "-licuucswift"
@@ -1265,6 +1267,9 @@ endfunction()
12651267
# SWIFT_MODULE_DEPENDS_CYGWIN
12661268
# Swift modules this library depends on when built for Cygwin.
12671269
#
1270+
# SWIFT_MODULE_DEPENDS_HAIKU
1271+
# Swift modules this library depends on when built for Haiku.
1272+
#
12681273
# FRAMEWORK_DEPENDS
12691274
# System frameworks this library depends on.
12701275
#
@@ -1338,7 +1343,7 @@ function(add_swift_library name)
13381343
cmake_parse_arguments(SWIFTLIB
13391344
"${SWIFTLIB_options}"
13401345
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_OSX;DEPLOYMENT_VERSION_IOS;DEPLOYMENT_VERSION_TVOS;DEPLOYMENT_VERSION_WATCHOS"
1341-
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;SWIFT_MODULE_DEPENDS_CYGWIN;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY"
1346+
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;SWIFT_MODULE_DEPENDS_FREEBSD;SWIFT_MODULE_DEPENDS_LINUX;SWIFT_MODULE_DEPENDS_CYGWIN;SWIFT_MODULE_DEPENDS_HAIKU;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;LLVM_COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY"
13421347
${ARGN})
13431348
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
13441349

@@ -1369,7 +1374,7 @@ function(add_swift_library name)
13691374
if("${SWIFTLIB_TARGET_SDKS}" STREQUAL "")
13701375
set(SWIFTLIB_TARGET_SDKS ${SWIFT_SDKS})
13711376
endif()
1372-
list_replace(SWIFTLIB_TARGET_SDKS ALL_POSIX_PLATFORMS "ALL_APPLE_PLATFORMS;ANDROID;CYGWIN;FREEBSD;LINUX")
1377+
list_replace(SWIFTLIB_TARGET_SDKS ALL_POSIX_PLATFORMS "ALL_APPLE_PLATFORMS;ANDROID;CYGWIN;FREEBSD;LINUX;HAIKU")
13731378
list_replace(SWIFTLIB_TARGET_SDKS ALL_APPLE_PLATFORMS "${SWIFT_APPLE_PLATFORMS}")
13741379

13751380
# All Swift code depends on the standard library, except for the standard
@@ -1479,6 +1484,9 @@ function(add_swift_library name)
14791484
elseif("${sdk}" STREQUAL "CYGWIN")
14801485
list(APPEND swiftlib_module_depends_flattened
14811486
${SWIFTLIB_SWIFT_MODULE_DEPENDS_CYGWIN})
1487+
elseif("${sdk}" STREQUAL "HAIKU")
1488+
list(APPEND swiftlib_module_depends_flattened
1489+
${SWIFTLIB_SWIFT_MODULE_DEPENDS_HAIKU})
14821490
endif()
14831491

14841492
# Swift compiles depend on swift modules, while links depend on

cmake/modules/FindICU.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ foreach(MODULE ${ICU_FIND_COMPONENTS})
3131
endif()
3232
endforeach()
3333

34-
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS)
34+
foreach(sdk ANDROID;FREEBSD;LINUX;WINDOWS;HAIKU)
3535
foreach(MODULE ${ICU_FIND_COMPONENTS})
3636
string(TOUPPER "${MODULE}" MODULE)
3737
if("${SWIFT_${sdk}_ICU_${MODULE}_INCLUDE}" STREQUAL "")

include/swift/Basic/LangOptions.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ namespace swift {
268268
Target.getOSVersion(major, minor, revision);
269269
} else if (Target.isOSLinux() || Target.isOSFreeBSD() ||
270270
Target.isAndroid() || Target.isOSWindows() ||
271-
Target.isPS4() || Target.getTriple().empty()) {
271+
Target.isPS4() || Target.isOSHaiku() ||
272+
Target.getTriple().empty()) {
272273
major = minor = revision = 0;
273274
} else {
274275
llvm_unreachable("Unsupported target OS");

include/swift/Runtime/Concurrent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#include <stdint.h>
1818
#include "llvm/Support/Allocator.h"
1919

20-
#if defined(__FreeBSD__) || defined(__CYGWIN__)
20+
#if defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__HAIKU__)
2121
#include <stdio.h>
2222
#endif
2323

include/swift/Runtime/Mutex.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
#include <type_traits>
2222

23-
#if (defined(__APPLE__) || defined(__linux__) || defined(__CYGWIN__) || defined(__FreeBSD__))
23+
#if (defined(__APPLE__) || defined(__linux__) || defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__HAIKU__))
2424
#include "swift/Runtime/MutexPThread.h"
2525
#elif defined(_WIN32)
2626
#include "swift/Runtime/MutexWin32.h"

include/swift/Runtime/MutexPThread.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ typedef pthread_cond_t ConditionHandle;
2626
typedef pthread_mutex_t MutexHandle;
2727
typedef pthread_rwlock_t ReadWriteLockHandle;
2828

29-
#if defined(__CYGWIN__) || defined(__ANDROID__)
29+
#if defined(__CYGWIN__) || defined(__ANDROID__) || defined(__HAIKU__)
3030
// At the moment CYGWIN pthreads implementation doesn't support the use of
3131
// constexpr for static allocation versions. The way they define things
3232
// results in a reinterpret_cast which violates constexpr. Similarly, Android's

lib/Basic/LangOptions.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ static const StringRef SupportedConditionalCompilationOSs[] = {
3737
"Android",
3838
"PS4",
3939
"Cygwin",
40+
"Haiku",
4041
};
4142

4243
static const StringRef SupportedConditionalCompilationArches[] = {
@@ -181,6 +182,8 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
181182
addPlatformConditionValue(PlatformConditionKind::OS, "Cygwin");
182183
else if (triple.isPS4())
183184
addPlatformConditionValue(PlatformConditionKind::OS, "PS4");
185+
else if (triple.isOSHaiku())
186+
addPlatformConditionValue(PlatformConditionKind::OS, "Haiku");
184187
else
185188
UnsupportedOS = true;
186189

lib/Basic/Platform.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) {
9797
case llvm::Triple::NetBSD:
9898
case llvm::Triple::OpenBSD:
9999
case llvm::Triple::Solaris:
100-
case llvm::Triple::Haiku:
101100
case llvm::Triple::Minix:
102101
case llvm::Triple::RTEMS:
103102
case llvm::Triple::NaCl:
@@ -135,6 +134,8 @@ StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) {
135134
}
136135
case llvm::Triple::PS4:
137136
return "ps4";
137+
case llvm::Triple::Haiku:
138+
return "haiku";
138139
}
139140
llvm_unreachable("unsupported OS");
140141
}

lib/Basic/Statistic.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ using namespace llvm::sys;
3232

3333
static size_t
3434
getChildrenMaxResidentSetSize() {
35-
#if defined(HAVE_GETRUSAGE)
35+
#if defined(HAVE_GETRUSAGE) && !defined(__HAIKU__)
3636
struct rusage RU;
3737
::getrusage(RUSAGE_CHILDREN, &RU);
3838
return RU.ru_maxrss;

0 commit comments

Comments
 (0)