Commit 899b8a3f authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

freebsd port. addresses #1789

git-svn-id: file:///svn/toku/tokudb@12507 c7de825b-a66e-492c-adef-691d508d4ae1
parent 0906fbc5
......@@ -129,7 +129,7 @@ toku_os_initialize_settings(int UU(verbosity)) {
return r;
}
#if 0
#if __linux__
int
toku_os_get_max_rss(int64_t *maxrss) {
......
......@@ -4,7 +4,9 @@
#include <unistd.h>
#include <assert.h>
#include <string.h>
#if defined(__linux__)
#include <bits/wordsize.h>
#endif
#include "toku_os.h"
int main(int argc, char *argv[]) {
......@@ -28,12 +30,20 @@ int main(int argc, char *argv[]) {
if (verbose) printf("maxdata=%"PRIu64"\n", maxdata);
// check the data size
#if __WORDSIZE == 64
#if defined(__linux__)
#if __WORDSIZE == 64
assert(maxdata > (1ULL << 32));
#elif __WORDSIZE == 32
assert(maxdata < (1ULL << 32));
#else
#error
#endif
#elif __x86_64__
assert(maxdata > (1ULL << 32));
#elif __WORDSIZE == 32
#elif __i386__
assert(maxdata < (1ULL << 32));
#else
#error
#error
#endif
return 0;
......
# -*- Mode: Makefile -*-
.DEFAULT_GOAL=install
TOKUROOT=../
INCLUDEDIRS=-I.
SKIP_LIBPORTABILITYRULE=1
include $(TOKUROOT)toku_include/Makefile.include
OPT_AROPT=-qnoipo #Disable ipo for lib creation even when optimization is on.
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c,%.$(OEXT),$(SRCS))
TARGET = libtokuportability.$(AEXT)
build install: $(LIBPORTABILITY)
$(LIBPORTABILITY): $(TARGET)
if ! diff $< $@ 2>/dev/null; then cp $< $@; fi
$(TARGET): $(OBJS)
$(OBJS): CFLAGS += -DTOKU_ALLOW_DEPRECATED
#Blank on purpose
check: $(TARGET)
cd tests && $(MAKE) check
clean:
rm -rf $(TARGET) $(LIBPORTABILITY)
cd tests && $(MAKE) clean
#ifndef _TOKU_ENDIAN_H
#define _TOKU_ENDIAN_H
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#if __x86_64__ || __i386__
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#error
#endif
#endif
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/resource.h>
#include "toku_portability.h"
#include "toku_os_types.h"
#include "toku_assert.h"
int
toku_portability_init(void) {
return 0;
}
int
toku_portability_destroy(void) {
return 0;
}
int
toku_os_getpid(void) {
return getpid();
}
#if __FreeBSD__
int
toku_os_gettid(void) {
long tid;
int r = thr_self(&tid);
assert(r == 0);
return tid;
}
#endif
int
toku_os_get_number_processors(void) {
return sysconf(_SC_NPROCESSORS_CONF);
}
int
toku_os_get_number_active_processors(void) {
return sysconf(_SC_NPROCESSORS_ONLN);
}
int
toku_os_get_pagesize(void) {
return sysconf(_SC_PAGESIZE);
}
uint64_t
toku_os_get_phys_memory_size(void) {
uint64_t npages = sysconf(_SC_PHYS_PAGES);
uint64_t pagesize = sysconf(_SC_PAGESIZE);
return npages*pagesize;
}
int
toku_os_get_file_size(int fildes, int64_t *fsize) {
struct stat sbuf;
int r = fstat(fildes, &sbuf);
if (r==0) {
*fsize = sbuf.st_size;
}
return r;
}
int
toku_os_get_unique_file_id(int fildes, struct fileid *id) {
struct stat statbuf;
memset(id, 0, sizeof(*id));
int r=fstat(fildes, &statbuf);
if (r==0) {
memset(id, 0, sizeof(*id));
id->st_dev = statbuf.st_dev;
id->st_ino = statbuf.st_ino;
}
return r;
}
#if defined(LOCK_EX)
int
toku_os_lock_file(char *name) {
int r;
int fd = open(name, O_RDWR|O_CREAT, S_IRUSR | S_IWUSR);
if (fd>=0) {
r = flock(fd, LOCK_EX | LOCK_NB);
if (r!=0) {
r = errno; //Save errno from flock.
close(fd);
fd = -1; //Disable fd.
errno = r;
}
}
return fd;
}
int
toku_os_unlock_file(int fildes) {
int r = flock(fildes, LOCK_UN);
if (r==0) r = close(fildes);
return r;
}
#endif
int
toku_os_mkdir(const char *pathname, mode_t mode) {
int r = mkdir(pathname, mode);
return r;
}
int
toku_os_get_process_times(struct timeval *usertime, struct timeval *kerneltime) {
int r;
struct rusage rusage;
r = getrusage(RUSAGE_SELF, &rusage);
if (r == -1)
return errno;
if (usertime)
*usertime = rusage.ru_utime;
if (kerneltime)
*kerneltime = rusage.ru_stime;
return 0;
}
int
toku_os_initialize_settings(int UU(verbosity)) {
verbosity = verbosity;
return 0;
}
#if __linux__
int
toku_os_get_max_rss(int64_t *maxrss) {
char statusname[100];
sprintf(statusname, "/proc/%d/status", getpid());
FILE *f = fopen(statusname, "r");
if (f == NULL)
return errno;
int r = ENOENT;
char line[100];
while (fgets(line, sizeof line, f)) {
r = sscanf(line, "VmHWM:\t%lld kB\n", (long long *) maxrss);
if (r == 1) {
*maxrss *= 1<<10;
r = 0;
break;
}
}
fclose(f);
return r;
}
int
toku_os_get_rss(int64_t *rss) {
char statusname[100];
sprintf(statusname, "/proc/%d/status", getpid());
FILE *f = fopen(statusname, "r");
if (f == NULL)
return errno;
int r = ENOENT;
char line[100];
while (fgets(line, sizeof line, f)) {
r = sscanf(line, "VmRSS:\t%lld kB\n", (long long *) rss);
if (r == 1) {
*rss *= 1<<10;
r = 0;
break;
}
}
fclose(f);
return r;
}
#endif
int
toku_os_is_absolute_name(const char* path) {
return path[0] == '/';
}
int
toku_os_get_max_process_data_size(uint64_t *maxdata) {
int r;
struct rlimit rlimit;
r = getrlimit(RLIMIT_DATA, &rlimit);
if (r == 0) {
uint64_t d;
d = rlimit.rlim_max;
// with the "right" macros defined, the rlimit is a 64 bit number on a
// 32 bit system. getrlimit returns 2**64-1 which is clearly wrong.
// for 32 bit processes, we assume that 1/2 of the address space is
// used for mapping the kernel. this may be pessimistic.
if (sizeof (void *) == 4 && d > (1ULL << 31))
d = 1ULL << 31;
*maxdata = d;
} else
r = errno;
return r;
}
int
toku_stat(const char *name, toku_struct_stat *buf) {
int r = stat(name, buf);
return r;
}
int
toku_fstat(int fd, toku_struct_stat *buf) {
int r = fstat(fd, buf);
return r;
}
../linux/toku_os_types.h
\ No newline at end of file
#include <toku_pthread.h>
int toku_pthread_yield(void) {
return sched_yield();
}
../linux/toku_pthread.h
\ No newline at end of file
......@@ -64,7 +64,7 @@ endif
OPT_OPTFLAGS = -O3 -finline-functions
DBG_OPTFLAGS = -O0
SYSTEM = $(shell uname -s | tr [A-Z] [a-z])
SYSTEM = $(shell uname -s | tr [:upper:] [:lower:])
ifeq ($(VERBOSE),2)
VERBVERBOSE=-v
......@@ -96,7 +96,11 @@ endif
WALL = -Wall -Wextra -Wcast-align -Wbad-function-cast -Wno-missing-noreturn
FORMAT = -Wmissing-format-attribute
ifeq ($(SYSTEM),sunos)
VISIBILITY=
else
VISIBILITY= -fvisibility=hidden
endif
FPICFLAGS = -fPIC
SHADOW = -Wshadow
SYMBOLS = -g3 -ggdb3
......@@ -302,6 +306,9 @@ endif
ifeq ($(SYSTEM),linux)
CPPFLAGS+=-D_SVID_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_XOPEN_SOURCE=600
endif
ifeq ($(SYSTEM),sunos)
CPPFLAGS+=-D_LARGEFILE64_SOURCE
endif
#TODO: Fix this up if we want to keep using CIL.
#ifeq ($(CIL),1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment