Skip to content

Commit 6777041

Browse files
brad0korli
andcommitted
[OpenMP] Add support for Haiku
Co-authored-by: Jérôme Duval <[email protected]>
1 parent 4781a8e commit 6777041

File tree

8 files changed

+50
-23
lines changed

8 files changed

+50
-23
lines changed

openmp/runtime/src/kmp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,6 +1354,10 @@ extern kmp_uint64 __kmp_now_nsec();
13541354
/* TODO: tune for KMP_OS_OPENBSD */
13551355
#define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
13561356
#define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
1357+
#elif KMP_OS_HAIKU
1358+
/* TODO: tune for KMP_OS_HAIKU */
1359+
#define KMP_INIT_WAIT 1024U /* initial number of spin-tests */
1360+
#define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */
13571361
#elif KMP_OS_HURD
13581362
/* TODO: tune for KMP_OS_HURD */
13591363
#define KMP_INIT_WAIT 1024U /* initial number of spin-tests */

openmp/runtime/src/kmp_ftn_entry.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,8 @@ int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
582582
int gtid;
583583

584584
#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
585-
KMP_OS_OPENBSD || KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_AIX
585+
KMP_OS_OPENBSD || KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || \
586+
KMP_OS_AIX
586587
gtid = __kmp_entry_gtid();
587588
#elif KMP_OS_WINDOWS
588589
if (!__kmp_init_parallel ||

openmp/runtime/src/kmp_platform.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#define KMP_OS_OPENBSD 0
2323
#define KMP_OS_DARWIN 0
2424
#define KMP_OS_WINDOWS 0
25+
#define KMP_OS_HAIKU 0
2526
#define KMP_OS_HURD 0
2627
#define KMP_OS_SOLARIS 0
2728
#define KMP_OS_WASI 0
@@ -73,6 +74,11 @@
7374
#define KMP_OS_OPENBSD 1
7475
#endif
7576

77+
#if (defined __HAIKU__)
78+
#undef KMP_OS_HAIKU
79+
#define KMP_OS_HAIKU 1
80+
#endif
81+
7682
#if (defined __GNU__)
7783
#undef KMP_OS_HURD
7884
#define KMP_OS_HURD 1
@@ -94,14 +100,14 @@
94100
#endif
95101

96102
#if (1 != KMP_OS_LINUX + KMP_OS_DRAGONFLY + KMP_OS_FREEBSD + KMP_OS_NETBSD + \
97-
KMP_OS_OPENBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS + KMP_OS_HURD + \
98-
KMP_OS_SOLARIS + KMP_OS_WASI + KMP_OS_AIX)
103+
KMP_OS_OPENBSD + KMP_OS_DARWIN + KMP_OS_WINDOWS + KMP_OS_HAIKU + \
104+
KMP_OS_HURD + KMP_OS_SOLARIS + KMP_OS_WASI + KMP_OS_AIX)
99105
#error Unknown OS
100106
#endif
101107

102108
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
103-
KMP_OS_OPENBSD || KMP_OS_DARWIN || KMP_OS_HURD || KMP_OS_SOLARIS || \
104-
KMP_OS_WASI || KMP_OS_AIX
109+
KMP_OS_OPENBSD || KMP_OS_DARWIN || KMP_OS_HAIKU || KMP_OS_HURD || \
110+
KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
105111
#undef KMP_OS_UNIX
106112
#define KMP_OS_UNIX 1
107113
#endif

openmp/runtime/src/kmp_runtime.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8949,8 +8949,8 @@ __kmp_determine_reduction_method(
89498949
KMP_ARCH_VE || KMP_ARCH_S390X || KMP_ARCH_WASM
89508950

89518951
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
8952-
KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN || KMP_OS_HURD || \
8953-
KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
8952+
KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN || KMP_OS_HAIKU || \
8953+
KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
89548954

89558955
int teamsize_cutoff = 4;
89568956

@@ -8974,15 +8974,15 @@ __kmp_determine_reduction_method(
89748974
#else
89758975
#error "Unknown or unsupported OS"
89768976
#endif // KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD ||
8977-
// KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN || KMP_OS_HURD ||
8978-
// KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
8977+
// KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN || KMP_OS_HAIKU ||
8978+
// KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
89798979

89808980
#elif KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_AARCH || KMP_ARCH_MIPS || \
89818981
KMP_ARCH_WASM || KMP_ARCH_PPC || KMP_ARCH_AARCH64_32
89828982

89838983
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
8984-
KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_HURD || KMP_OS_SOLARIS || \
8985-
KMP_OS_WASI || KMP_OS_AIX
8984+
KMP_OS_OPENBSD || KMP_OS_WINDOWS || KMP_OS_HAIKU || KMP_OS_HURD || \
8985+
KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
89868986

89878987
// basic tuning
89888988

openmp/runtime/src/kmp_wrapper_getpid.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
// On Unix-like systems (Linux* OS and OS X*) getpid() is declared in standard
1919
// headers.
20-
#if !defined(KMP_OS_AIX)
20+
#if !defined(KMP_OS_AIX) && !defined(KMP_OS_HAIKU)
2121
#include <sys/syscall.h>
2222
#endif
2323
#include <sys/types.h>
@@ -36,6 +36,9 @@
3636
#elif KMP_OS_AIX
3737
#include <pthread.h>
3838
#define __kmp_gettid() pthread_self()
39+
#elif KMP_OS_HAIKU
40+
#include <OS.h>
41+
#define __kmp_gettid() find_thread(NULL)
3942
#elif defined(SYS_gettid)
4043
// Hopefully other Unix systems define SYS_gettid syscall for getting os thread
4144
// id

openmp/runtime/src/z_Linux_util.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#if KMP_OS_AIX
3333
#include <sys/ldr.h>
3434
#include <libperfstat.h>
35-
#else
35+
#elif !KMP_OS_HAIKU
3636
#include <sys/syscall.h>
3737
#endif
3838
#include <sys/time.h>
@@ -465,7 +465,7 @@ void __kmp_terminate_thread(int gtid) {
465465
static kmp_int32 __kmp_set_stack_info(int gtid, kmp_info_t *th) {
466466
int stack_data;
467467
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
468-
KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_AIX
468+
KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_AIX
469469
int status;
470470
size_t size = 0;
471471
void *addr = 0;
@@ -517,7 +517,7 @@ static kmp_int32 __kmp_set_stack_info(int gtid, kmp_info_t *th) {
517517
return TRUE;
518518
}
519519
#endif /* KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD \
520-
|| KMP_OS_HURD || KMP_OS_SOLARIS */
520+
|| KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS */
521521
/* Use incremental refinement starting from initial conservative estimate */
522522
TCW_PTR(th->th.th_info.ds.ds_stacksize, 0);
523523
TCW_PTR(th->th.th_info.ds.ds_stackbase, &stack_data);
@@ -532,7 +532,8 @@ static void *__kmp_launch_worker(void *thr) {
532532
#endif /* KMP_BLOCK_SIGNALS */
533533
void *exit_val;
534534
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
535-
KMP_OS_OPENBSD || KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_AIX
535+
KMP_OS_OPENBSD || KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || \
536+
KMP_OS_AIX
536537
void *volatile padding = 0;
537538
#endif
538539
int gtid;
@@ -581,7 +582,8 @@ static void *__kmp_launch_worker(void *thr) {
581582
#endif /* KMP_BLOCK_SIGNALS */
582583

583584
#if KMP_OS_LINUX || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
584-
KMP_OS_OPENBSD || KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_AIX
585+
KMP_OS_OPENBSD || KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || \
586+
KMP_OS_AIX
585587
if (__kmp_stkoffset > 0 && gtid > 0) {
586588
padding = KMP_ALLOCA(gtid * __kmp_stkoffset);
587589
(void)padding;
@@ -1902,7 +1904,7 @@ static int __kmp_get_xproc(void) {
19021904
__kmp_type_convert(sysconf(_SC_NPROCESSORS_CONF), &(r));
19031905

19041906
#elif KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_OPENBSD || \
1905-
KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
1907+
KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || KMP_OS_WASI || KMP_OS_AIX
19061908

19071909
__kmp_type_convert(sysconf(_SC_NPROCESSORS_ONLN), &(r));
19081910

@@ -2400,6 +2402,9 @@ int __kmp_is_address_mapped(void *addr) {
24002402
}
24012403
KMP_INTERNAL_FREE(loadQueryBuf);
24022404

2405+
#elif KMP_OS_HAIKU
2406+
2407+
found = 1;
24032408
#else
24042409

24052410
#error "Unknown or unsupported OS"
@@ -2515,7 +2520,9 @@ int __kmp_get_load_balance(int max) {
25152520
glb_running_threads = running_threads;
25162521

25172522
return running_threads;
2518-
}
2523+
#elif KMP_OS_HAIKU
2524+
2525+
int __kmp_get_load_balance(int max) { return -1; }
25192526

25202527
#else // Linux* OS
25212528

openmp/runtime/test/lit.cfg

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def prepend_dynamic_library_path(path):
1919
elif config.operating_system == 'Darwin':
2020
name = 'DYLD_LIBRARY_PATH'
2121
sep = ':'
22+
elif config.operating_system == 'Haiku':
23+
name = 'LIBRARY_PATH'
24+
sep = ':'
2225
elif target_arch == 've':
2326
name = 'VE_LD_LIBRARY_PATH'
2427
sep = ':'
@@ -60,10 +63,11 @@ config.test_flags_use_compiler_omp_h = flags
6063

6164
# extra libraries
6265
libs = ""
63-
if config.has_libm:
64-
libs += " -lm"
65-
if config.has_libatomic:
66-
libs += " -latomic"
66+
if config.operating_system != 'Haiku':
67+
if config.has_libm:
68+
libs += " -lm"
69+
if config.has_libatomic:
70+
libs += " -latomic"
6771

6872
# Allow REQUIRES / UNSUPPORTED / XFAIL to work
6973
config.target_triple = [ ]

openmp/tools/multiplex/ompt-multiplex.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
#endif
2222
#include <dlfcn.h>
2323
#include <errno.h>
24+
#ifndef __HAIKU__
2425
#include <execinfo.h>
26+
#endif
2527
#include <inttypes.h>
2628
#include <omp-tools.h>
2729
#include <omp.h>

0 commit comments

Comments
 (0)