summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt43
-rw-r--r--Makefile50
-rw-r--r--examples/beam-search/beam-search.cpp4
-rw-r--r--examples/embd-input/embd-input-lib.cpp5
-rw-r--r--examples/main/main.cpp5
-rw-r--r--examples/simple/simple.cpp4
-rw-r--r--examples/speculative/speculative.cpp4
-rw-r--r--ggml-alloc.c5
-rw-r--r--ggml.c1
-rw-r--r--llama.cpp5
10 files changed, 93 insertions, 33 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f8cee71c..0abf1df7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -551,6 +551,49 @@ else()
message(STATUS "Unknown architecture")
endif()
+# clock_gettime came in POSIX.1b (1993)
+# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
+# posix_memalign came in POSIX.1-2001 / SUSv3
+# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
+add_compile_definitions(_XOPEN_SOURCE=600)
+
+# Somehow in OpenBSD whenever POSIX conformance is specified
+# some string functions rely on locale_t availability,
+# which was introduced in POSIX.1-2008, forcing us to go higher
+IF (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+ remove_definitions(-D_XOPEN_SOURCE=600)
+ add_compile_definitions(_XOPEN_SOURCE=700)
+ENDIF()
+
+# Data types, macros and functions related to controlling CPU affinity and
+# some memory allocation are available on Linux through GNU extensions in libc
+IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ add_compile_definitions(_GNU_SOURCE)
+ENDIF()
+
+# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
+# and on macOS its availability depends on enabling Darwin extensions
+# similarly on DragonFly, enabling BSD extensions is necessary
+IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ add_compile_definitions(_DARWIN_C_SOURCE)
+ENDIF()
+IF (CMAKE_SYSTEM_NAME MATCHES "DragonFly")
+ add_compile_definitions(_DARWIN_C_SOURCE)
+ENDIF()
+
+# alloca is a non-standard interface that is not visible on BSDs when
+# POSIX conformance is specified, but not all of them provide a clean way
+# to enable it in such cases
+IF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ add_compile_definitions(__BSD_VISIBLE)
+ENDIF()
+IF (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+ add_compile_definitions(_NETBSD_SOURCE)
+ENDIF()
+IF (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+ add_compile_definitions(_BSD_SOURCE)
+ENDIF()
+
#
# libraries
#
diff --git a/Makefile b/Makefile
index 86e36ba5..a774dc50 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,56 @@ MK_CFLAGS = $(OPT) -std=c11 -fPIC
MK_CXXFLAGS = $(OPT) -std=c++11 -fPIC
MK_LDFLAGS =
+# clock_gettime came in POSIX.1b (1993)
+# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
+# posix_memalign came in POSIX.1-2001 / SUSv3
+# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
+MK_CFLAGS += -D_XOPEN_SOURCE=600
+MK_CXXFLAGS += -D_XOPEN_SOURCE=600
+
+# Somehow in OpenBSD whenever POSIX conformance is specified
+# some string functions rely on locale_t availability,
+# which was introduced in POSIX.1-2008, forcing us to go higher
+ifeq ($(UNAME_S),OpenBSD)
+ MK_CFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
+ MK_CXXFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
+endif
+
+# Data types, macros and functions related to controlling CPU affinity and
+# some memory allocation are available on Linux through GNU extensions in libc
+ifeq ($(UNAME_S),Linux)
+ MK_CFLAGS += -D_GNU_SOURCE
+ MK_CXXFLAGS += -D_GNU_SOURCE
+endif
+
+# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
+# and on macOS its availability depends on enabling Darwin extensions
+# similarly on DragonFly, enabling BSD extensions is necessary
+ifeq ($(UNAME_S),Darwin)
+ MK_CFLAGS += -D_DARWIN_C_SOURCE
+ MK_CXXFLAGS += -D_DARWIN_C_SOURCE
+endif
+ifeq ($(UNAME_S),DragonFly)
+ MK_CFLAGS += -D__BSD_VISIBLE
+ MK_CXXFLAGS += -D__BSD_VISIBLE
+endif
+
+# alloca is a non-standard interface that is not visible on BSDs when
+# POSIX conformance is specified, but not all of them provide a clean way
+# to enable it in such cases
+ifeq ($(UNAME_S),FreeBSD)
+ MK_CFLAGS += -D__BSD_VISIBLE
+ MK_CXXFLAGS += -D__BSD_VISIBLE
+endif
+ifeq ($(UNAME_S),NetBSD)
+ MK_CFLAGS += -D_NETBSD_SOURCE
+ MK_CXXFLAGS += -D_NETBSD_SOURCE
+endif
+ifeq ($(UNAME_S),OpenBSD)
+ MK_CFLAGS += -D_BSD_SOURCE
+ MK_CXXFLAGS += -D_BSD_SOURCE
+endif
+
ifdef LLAMA_DEBUG
MK_CFLAGS += -O0 -g
MK_CXXFLAGS += -O0 -g
diff --git a/examples/beam-search/beam-search.cpp b/examples/beam-search/beam-search.cpp
index 4d021434..6b31aea7 100644
--- a/examples/beam-search/beam-search.cpp
+++ b/examples/beam-search/beam-search.cpp
@@ -1,7 +1,3 @@
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "common.h"
#include "llama.h"
#include "build-info.h"
diff --git a/examples/embd-input/embd-input-lib.cpp b/examples/embd-input/embd-input-lib.cpp
index 87aac347..ef12212b 100644
--- a/examples/embd-input/embd-input-lib.cpp
+++ b/examples/embd-input/embd-input-lib.cpp
@@ -1,8 +1,3 @@
-// Defines sigaction on msys:
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "embd-input.h"
#include <cassert>
diff --git a/examples/main/main.cpp b/examples/main/main.cpp
index c9ca7719..be030fff 100644
--- a/examples/main/main.cpp
+++ b/examples/main/main.cpp
@@ -1,8 +1,3 @@
-// Defines sigaction on msys:
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "common.h"
#include "console.h"
diff --git a/examples/simple/simple.cpp b/examples/simple/simple.cpp
index 4ee85fac..ba5de0cc 100644
--- a/examples/simple/simple.cpp
+++ b/examples/simple/simple.cpp
@@ -1,7 +1,3 @@
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "build-info.h"
#include "common.h"
diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp
index c6211ac7..822d7b52 100644
--- a/examples/speculative/speculative.cpp
+++ b/examples/speculative/speculative.cpp
@@ -1,7 +1,3 @@
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "build-info.h"
#include "common.h"
diff --git a/ggml-alloc.c b/ggml-alloc.c
index e2ac891d..a1f6e7bf 100644
--- a/ggml-alloc.c
+++ b/ggml-alloc.c
@@ -1,8 +1,3 @@
-// defines MAP_ANONYMOUS
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "ggml-alloc.h"
#include "ggml.h"
#include <assert.h>
diff --git a/ggml.c b/ggml.c
index a4b9781d..d5ca0101 100644
--- a/ggml.c
+++ b/ggml.c
@@ -1,4 +1,3 @@
-#define _GNU_SOURCE // Defines CLOCK_MONOTONIC on Linux
#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnigns on Windows
#include "ggml.h"
diff --git a/llama.cpp b/llama.cpp
index cab7156f..3f119022 100644
--- a/llama.cpp
+++ b/llama.cpp
@@ -1,8 +1,3 @@
-// Defines fileno on msys:
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
#include "llama.h"
#include "ggml.h"