mirror of https://github.com/bjornbytes/lovr.git
os_linux: implement virtual memory allocator;
This commit is contained in:
parent
8ef2b064fd
commit
7984baad65
|
@ -80,7 +80,7 @@ endif
|
|||
## Linux
|
||||
ifeq ($(PLATFORM),linux)
|
||||
linux = y
|
||||
CFLAGS += -D_POSIX_C_SOURCE=200809L
|
||||
CFLAGS += -D_POSIX_C_SOURCE=200809L -D_DEFAULT_SOURCE
|
||||
CFLAGS += -DLOVR_GL
|
||||
LDFLAGS += -lm -lpthread -ldl
|
||||
LDFLAGS += -Wl,-rpath,\$ORIGIN
|
||||
|
|
|
@ -145,6 +145,11 @@ double os_get_time(void);
|
|||
void os_sleep(double seconds);
|
||||
void os_request_permission(os_permission permission);
|
||||
|
||||
void* os_vm_init(size_t size);
|
||||
bool os_vm_free(void* p, size_t size);
|
||||
bool os_vm_commit(void* p, size_t size);
|
||||
bool os_vm_release(void* p, size_t size);
|
||||
|
||||
void os_poll_events(void);
|
||||
void os_on_quit(fn_quit* callback);
|
||||
void os_on_focus(fn_focus* callback);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include "os_glfw.h"
|
||||
|
||||
|
@ -51,6 +52,22 @@ void os_on_permission(fn_permission* callback) {
|
|||
//
|
||||
}
|
||||
|
||||
void* os_vm_init(size_t size) {
|
||||
return mmap(NULL, size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
}
|
||||
|
||||
bool os_vm_free(void* p, size_t size) {
|
||||
return !munmap(p, size);
|
||||
}
|
||||
|
||||
bool os_vm_commit(void* p, size_t size) {
|
||||
return !mprotect(p, size, PROT_READ | PROT_WRITE);
|
||||
}
|
||||
|
||||
bool os_vm_release(void* p, size_t size) {
|
||||
return !madvise(p, size, MADV_DONTNEED);
|
||||
}
|
||||
|
||||
size_t os_get_home_directory(char* buffer, size_t size) {
|
||||
const char* path = getenv("HOME");
|
||||
|
||||
|
|
Loading…
Reference in New Issue