unix: add support for OpenBSD
This commit is contained in:
parent
fd9dbb1279
commit
4ab1990064
@ -82,6 +82,15 @@ OBJS += src/unix/netbsd.o
|
|||||||
OBJS += src/unix/kqueue.o
|
OBJS += src/unix/kqueue.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (OpenBSD,$(uname_S))
|
||||||
|
EV_CONFIG=config_openbsd.h
|
||||||
|
EIO_CONFIG=config_openbsd.h
|
||||||
|
CPPFLAGS += -Isrc/ares/config_openbsd
|
||||||
|
LINKFLAGS+=
|
||||||
|
OBJS += src/unix/openbsd.o
|
||||||
|
OBJS += src/unix/kqueue.o
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq (,$(findstring CYGWIN,$(uname_S)))
|
ifneq (,$(findstring CYGWIN,$(uname_S)))
|
||||||
EV_CONFIG=config_cygwin.h
|
EV_CONFIG=config_cygwin.h
|
||||||
EIO_CONFIG=config_cygwin.h
|
EIO_CONFIG=config_cygwin.h
|
||||||
|
|||||||
137
src/unix/eio/config_openbsd.h
Normal file
137
src/unix/eio/config_openbsd.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/* config.h. Generated from config.h.in by configure. */
|
||||||
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#define HAVE_DLFCN_H 1
|
||||||
|
|
||||||
|
/* fallocate(2) is available */
|
||||||
|
/* #undef HAVE_FALLOCATE */
|
||||||
|
|
||||||
|
/* fdatasync(2) is available */
|
||||||
|
/* #undef HAVE_FDATASYNC */
|
||||||
|
|
||||||
|
/* futimes(2) is available */
|
||||||
|
#define HAVE_FUTIMES 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* posix_fadvise(2) is available */
|
||||||
|
/* #undef HAVE_POSIX_FADVISE */
|
||||||
|
|
||||||
|
/* posix_madvise(2) is available */
|
||||||
|
#define HAVE_POSIX_MADVISE 1
|
||||||
|
|
||||||
|
/* prctl(PR_SET_NAME) is available */
|
||||||
|
/* #undef HAVE_PRCTL_SET_NAME */
|
||||||
|
|
||||||
|
/* pread(2) and pwrite(2) are available */
|
||||||
|
#define HAVE_PREADWRITE 1
|
||||||
|
|
||||||
|
/* readahead(2) is available (linux) */
|
||||||
|
/* #undef HAVE_READAHEAD */
|
||||||
|
|
||||||
|
/* sendfile(2) is available and supported */
|
||||||
|
/* #undef HAVE_SENDFILE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* sync_file_range(2) is available */
|
||||||
|
/* #undef HAVE_SYNC_FILE_RANGE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/prctl.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_PRCTL_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* syscall(__NR_syncfs) is available */
|
||||||
|
/* #undef HAVE_SYS_SYNCFS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/syscall.h> header file. */
|
||||||
|
#define HAVE_SYS_SYSCALL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* utimes(2) is available */
|
||||||
|
#define HAVE_UTIMES 1
|
||||||
|
|
||||||
|
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||||
|
*/
|
||||||
|
#define LT_OBJDIR ".libs/"
|
||||||
|
|
||||||
|
/* Name of package */
|
||||||
|
#define PACKAGE "libeio"
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT ""
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME ""
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING ""
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME ""
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#define PACKAGE_URL ""
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION ""
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Enable extensions on AIX 3, Interix. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
# define _ALL_SOURCE 1
|
||||||
|
#endif
|
||||||
|
/* Enable GNU extensions on systems that have them. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
/* Enable threading extensions on Solaris. */
|
||||||
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
# define _POSIX_PTHREAD_SEMANTICS 1
|
||||||
|
#endif
|
||||||
|
/* Enable extensions on HP NonStop. */
|
||||||
|
#ifndef _TANDEM_SOURCE
|
||||||
|
# define _TANDEM_SOURCE 1
|
||||||
|
#endif
|
||||||
|
/* Enable general extensions on Solaris. */
|
||||||
|
#ifndef __EXTENSIONS__
|
||||||
|
# define __EXTENSIONS__ 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#define VERSION "1.0"
|
||||||
|
|
||||||
|
/* Define to 1 if on MINIX. */
|
||||||
|
/* #undef _MINIX */
|
||||||
|
|
||||||
|
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||||
|
this defined. */
|
||||||
|
/* #undef _POSIX_1_SOURCE */
|
||||||
|
|
||||||
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||||
|
/* #undef _POSIX_SOURCE */
|
||||||
126
src/unix/ev/config_openbsd.h
Normal file
126
src/unix/ev/config_openbsd.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/* config.h. Generated from config.h.in by configure. */
|
||||||
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `clock_gettime' function. */
|
||||||
|
#define HAVE_CLOCK_GETTIME 1
|
||||||
|
|
||||||
|
/* "use syscall interface for clock_gettime" */
|
||||||
|
/* #undef HAVE_CLOCK_SYSCALL */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#define HAVE_DLFCN_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `epoll_ctl' function. */
|
||||||
|
/* #undef HAVE_EPOLL_CTL */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `eventfd' function. */
|
||||||
|
/* #undef HAVE_EVENTFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `inotify_init' function. */
|
||||||
|
/* #undef HAVE_INOTIFY_INIT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#define HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `kqueue' function. */
|
||||||
|
#define HAVE_KQUEUE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `m' library (-lm). */
|
||||||
|
#define HAVE_LIBM 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `rt' library (-lrt). */
|
||||||
|
/* #undef HAVE_LIBRT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `nanosleep' function. */
|
||||||
|
#define HAVE_NANOSLEEP 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `poll' function. */
|
||||||
|
#define HAVE_POLL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <poll.h> header file. */
|
||||||
|
#define HAVE_POLL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `port_create' function. */
|
||||||
|
/* #undef HAVE_PORT_CREATE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <port.h> header file. */
|
||||||
|
/* #undef HAVE_PORT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `select' function. */
|
||||||
|
#define HAVE_SELECT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `signalfd' function. */
|
||||||
|
/* #undef HAVE_SIGNALFD */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/epoll.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_EPOLL_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/eventfd.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_EVENTFD_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/event.h> header file. */
|
||||||
|
#define HAVE_SYS_EVENT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/inotify.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_INOTIFY_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
#define HAVE_SYS_SELECT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/signalfd.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_SIGNALFD_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||||
|
*/
|
||||||
|
#define LT_OBJDIR ".libs/"
|
||||||
|
|
||||||
|
/* Name of package */
|
||||||
|
#define PACKAGE "libev"
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT ""
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME ""
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING ""
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME ""
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#define PACKAGE_URL ""
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION ""
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#define VERSION "4.04"
|
||||||
123
src/unix/openbsd.c
Normal file
123
src/unix/openbsd.c
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to
|
||||||
|
* deal in the Software without restriction, including without limitation the
|
||||||
|
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
* sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
* IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#undef NANOSEC
|
||||||
|
#define NANOSEC 1000000000
|
||||||
|
|
||||||
|
|
||||||
|
uint64_t uv_hrtime(void) {
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
return (ts.tv_sec * NANOSEC + ts.tv_nsec);
|
||||||
|
}
|
||||||
|
|
||||||
|
void uv_loadavg(double avg[3]) {
|
||||||
|
struct loadavg info;
|
||||||
|
size_t size = sizeof(info);
|
||||||
|
int which[] = {CTL_VM, VM_LOADAVG};
|
||||||
|
|
||||||
|
if (sysctl(which, 2, &info, &size, NULL, 0) < 0) return;
|
||||||
|
|
||||||
|
avg[0] = (double) info.ldavg[0] / info.fscale;
|
||||||
|
avg[1] = (double) info.ldavg[1] / info.fscale;
|
||||||
|
avg[2] = (double) info.ldavg[2] / info.fscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
int uv_exepath(char* buffer, size_t* size) {
|
||||||
|
int mib[4];
|
||||||
|
char **argsbuf = NULL;
|
||||||
|
char **argsbuf_tmp;
|
||||||
|
size_t argsbuf_size = 100U;
|
||||||
|
size_t exepath_size;
|
||||||
|
pid_t mypid;
|
||||||
|
int status = -1;
|
||||||
|
|
||||||
|
if (!buffer || !size) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
mypid = getpid();
|
||||||
|
for (;;) {
|
||||||
|
if ((argsbuf_tmp = realloc(argsbuf, argsbuf_size)) == NULL) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
argsbuf = argsbuf_tmp;
|
||||||
|
mib[0] = CTL_KERN;
|
||||||
|
mib[1] = KERN_PROC_ARGS;
|
||||||
|
mib[2] = mypid;
|
||||||
|
mib[3] = KERN_PROC_ARGV;
|
||||||
|
if (sysctl(mib, 4, argsbuf, &argsbuf_size, NULL, 0) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (errno != ENOMEM) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
argsbuf_size *= 2U;
|
||||||
|
}
|
||||||
|
if (argsbuf[0] == NULL) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
exepath_size = strlen(argsbuf[0]);
|
||||||
|
if (exepath_size >= *size) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
memcpy(buffer, argsbuf[0], exepath_size + 1U);
|
||||||
|
*size = exepath_size;
|
||||||
|
status = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
|
free(argsbuf);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
double uv_get_free_memory(void) {
|
||||||
|
struct uvmexp info;
|
||||||
|
size_t size = sizeof(info);
|
||||||
|
int which[] = {CTL_VM, VM_UVMEXP};
|
||||||
|
|
||||||
|
if (sysctl(which, 2, &info, &size, NULL, 0) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (double) info.free * sysconf(_SC_PAGESIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
double uv_get_total_memory(void) {
|
||||||
|
uint64_t info;
|
||||||
|
int which[] = {CTL_HW, HW_PHYSMEM64};
|
||||||
|
size_t size = sizeof(info);
|
||||||
|
|
||||||
|
if (sysctl(which, 2, &info, &size, NULL, 0) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (double) info;
|
||||||
|
}
|
||||||
7
uv.gyp
7
uv.gyp
@ -235,6 +235,13 @@
|
|||||||
'EV_CONFIG_H="config_freebsd.h"',
|
'EV_CONFIG_H="config_freebsd.h"',
|
||||||
'EIO_CONFIG_H="config_freebsd.h"',
|
'EIO_CONFIG_H="config_freebsd.h"',
|
||||||
],
|
],
|
||||||
|
[ 'OS=="openbsd"', {
|
||||||
|
'include_dirs': [ 'src/ares/config_openbsd' ],
|
||||||
|
'sources': [ 'src/unix/openbsd.c' ],
|
||||||
|
'defines': [
|
||||||
|
'EV_CONFIG_H="config_openbsd.h"',
|
||||||
|
'EIO_CONFIG_H="config_openbsd.h"',
|
||||||
|
],
|
||||||
}],
|
}],
|
||||||
[ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
[ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
||||||
'sources': [ 'src/unix/kqueue.c' ],
|
'sources': [ 'src/unix/kqueue.c' ],
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user