Remove mxmpp.

This commit is contained in:
Jonas 'Sortie' Termansen 2013-12-27 01:44:03 +01:00
parent 1a92a6991d
commit b08455c4d3
80 changed files with 715 additions and 805 deletions

View File

@ -3,7 +3,7 @@ MAKEFILE_NOT_MEANT_FOR_SORTIX=1
include compiler.mak
include version.mak
MODULES=doc libc libm dispd games mkinitrd mxmpp utils bench ext mbr kernel
MODULES=doc libc libm dispd games mkinitrd utils bench ext mbr kernel
ifndef SYSROOT
SYSROOT:=$(shell pwd)/sysroot
@ -35,13 +35,11 @@ all: sysroot
.PHONY: build-tools
build-tools:
$(MAKE) -C mkinitrd
$(MAKE) -C mxmpp
$(MAKE) -C tix
.PHONY: install-build-tools
install-build-tools:
$(MAKE) -C mkinitrd install
$(MAKE) -C mxmpp install
$(MAKE) -C tix install
.PHONY: sysroot-fsh

View File

@ -174,7 +174,6 @@ Sortix comes with a number of home-made programs. Here is an overview:
* `mkdir` - create directory
* `mkinitrd` - create an initrd
* `mv` - move a file
* `mxmpp` - silly preprocessor
* `mxsh` - the shell
* `pager` - display file page by page
* `pong` - remake of the classic pong game
@ -514,16 +513,6 @@ filesystem and mounts it at an empty directory.
make
make install
### Building mxmpp ###
The program mxmpp is a simple and hacky macro preprocessor. It supports a special
@incude(foo_t.h) directive, which is used to pre-preprocess the headers in the C
library to avoid the overhead of repeated declarations.
cd /src/mxmpp
make
make install
### Building mkinitrd ###
This program produces a Sortix compatible initrd, the file that contains the

View File

@ -9,7 +9,7 @@ endif
CPUDIR:=$(CPU)
CPPINCLUDES=-I preproc
CPPINCLUDES=-Iinclude
CPPFLAGS=-D__is_sortix_libc $(CPPINCLUDES)
FLAGS=-Wall -Wextra $(OPTLEVEL)
CFLAGS=-std=gnu99
@ -509,12 +509,7 @@ crtn.o \
MISCOBJ=\
$(CRTOBJ) \
UNPROCHEADERDIRS:=$(shell find include -type d)
UNPROCHEADERS:=$(shell find include -type f)
HEADERDIRS:=$(patsubst include%,preproc%,$(UNPROCHEADERDIRS))
HEADERS:=$(patsubst include%,preproc%,$(UNPROCHEADERS))
INSTALLHEADERDIRS:=$(addprefix $(DESTDIR)$(INCLUDEDIR),$(patsubst preproc%,%,$(HEADERDIRS)))
INSTALLHEADERS:=$(addprefix $(DESTDIR)$(INCLUDEDIR),$(patsubst preproc%,%,$(HEADERS)))
HEADERS:=$(shell find include -type d)
SORTIXOBJS:=$(addprefix sortix/,$(FREEOBJS))
SORTIXCPPFLAGS:=$(CPPFLAGS) -D__is_sortix_kernel
@ -571,15 +566,7 @@ crtn.o: $(CPUDIR)/crtn.o
# header preprocessing
$(OBJS) $(SORTIXOBJS): $(HEADERS)
$(HEADERDIRS):
mkdir -p $@
preproc/%: include/%
mxmpp -I decl $< -o $@
$(HEADERS): | $(HEADERDIRS)
headers: $(HEADERDIRS) $(HEADERS)
headers:
# standard library
%.o: %.c
@ -600,19 +587,13 @@ sortix/%.o: %.cpp
clean:
rm -f $(wildcard *.o) $(wildcard */*.o) $(wildcard */*/*.o) $(wildcard *.a)
rm -rf $(HEADERDIRS)
# Installation into sysroot
install: install-headers install-libs install-libs-kernel
$(INSTALLHEADERDIRS) $(DESTDIR)$(LIBDIR):
$(DESTDIR)$(LIBDIR):
mkdir -p $@
$(DESTDIR)$(INCLUDEDIR)/%: preproc/%
cp $< $@
$(INSTALLHEADERS): | $(INSTALLHEADERDIRS)
$(DESTDIR)$(LIBDIR)/%: %
cp -P $< $@
@ -620,11 +601,11 @@ $(INSTALLLIBS): | $(DESTDIR)$(LIBDIR)
$(INSTALLLIBSKERNEL): | $(DESTDIR)$(LIBDIR)
$(DESTDIR)$(INCLUDEDIR) $(DESTDIR)$(LIBDIR) $(INSTALLHEADERS): FORCE
install-include-dirs: headers
mkdir -p $(DESTDIR)$(INCLUDEDIR)
install-include-dirs: $(INSTALLHEADERDIRS)
install-headers: $(INSTALLHEADERDIRS) $(INSTALLHEADERS)
install-headers: install-include-dirs headers
cp -RTv include $(DESTDIR)$(INCLUDEDIR)
install-lib-dirs: $(DESTDIR)$(LIBDIR)

View File

@ -1,23 +0,0 @@
#ifndef _DIR_DECL
#define _DIR_DECL
struct dirent;
#define _DIR_REGISTERED (1<<0)
#define _DIR_ERROR (1<<1)
#define _DIR_EOF (1<<2)
typedef struct _DIR
{
void* user;
int (*read_func)(void* user, struct dirent* dirent, size_t* size);
int (*rewind_func)(void* user);
int (*fd_func)(void* user);
int (*close_func)(void* user);
void (*free_func)(struct _DIR* dir);
/* Application writers shouldn't use anything beyond this point. */
struct _DIR* prev;
struct _DIR* next;
struct dirent* entry;
size_t entrysize;
int flags;
} DIR;
#endif

View File

@ -1,5 +0,0 @@
#ifndef _FILE_DECL
#define _FILE_DECL
typedef struct FILE FILE;
#define FILE FILE
#endif

View File

@ -1,4 +0,0 @@
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif

View File

@ -1,3 +0,0 @@
#ifndef WCHAR_MAX
#define WCHAR_MAX __WCHAR_MAX
#endif

View File

@ -1,3 +0,0 @@
#ifndef WCHAR_MIN
#define WCHAR_MIN __WCHAR_MIN
#endif

View File

@ -1,3 +0,0 @@
#ifndef WEOF
#define WEOF (-1)
#endif

View File

@ -1,4 +0,0 @@
#ifndef _BLKCNT_T_DECL
#define _BLKCNT_T_DECL
typedef __blkcnt_t blkcnt_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _BLKSIZE_T_DECL
#define _BLKSIZE_T_DECL
typedef __blksize_t blksize_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _CLOCK_T_DECL
#define _CLOCK_T_DECL
typedef __clock_t clock_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _CLOCKID_T_DECL
#define _CLOCKID_T_DECL
typedef __clockid_t clockid_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _DEV_T_DECL
#define _DEV_T_DECL
typedef __dev_t dev_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _GID_T_DECL
#define _GID_T_DECL
typedef __gid_t gid_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _ID_T_DECL
#define _ID_T_DECL
typedef __id_t id_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _IN_ADDR_T_DECL
#define _IN_ADDR_T_DECL
typedef uint32_t in_addr_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _IN_PORT_T_DECL
#define _IN_PORT_T_DECL
typedef uint16_t in_port_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _INO_T_DECL
#define _INO_T_DECL
typedef __ino_t ino_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _INTPTR_T_DECL
#define _INTPTR_T_DECL
typedef __intptr_t intptr_t;
#endif

View File

@ -1,7 +0,0 @@
#ifndef _LOCALE_T_DECL
#define _LOCALT_T_DECL
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef int __locale_t;
typedef __locale_t locale_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _MODE_T_DECL
#define _MODE_T_DECL
typedef __mode_t mode_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _NLINK_T_DECL
#define _NLINK_T_DECL
typedef __nlink_t nlink_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _OFF_T_DECL
#define _OFF_T_DECL
typedef __off_t off_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _PID_T_DECL
#define _PID_T_DECL
typedef __pid_t pid_t;
#endif

View File

@ -1,2 +0,0 @@
#define __need_ptrdiff_t
#include <stddef.h>

View File

@ -1,4 +0,0 @@
#ifndef _SA_FAMILY_T_DECL
#define _SA_FAMILY_T_DECL
typedef unsigned short int sa_family_t;
#endif

View File

@ -1,2 +0,0 @@
#define __need_size_t
#include <stddef.h>

View File

@ -1,4 +0,0 @@
#ifndef _SOCKLEN_T_DECL
#define _SOCKLEN_T_DECL
typedef __socklen_t socklen_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _SSIZE_T_DECL
#define _SSIZE_T_DECL
typedef __ssize_t ssize_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _SUSECONDS_T_DECL
#define _SUSECONDS_T_DECL
typedef __suseconds_t suseconds_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _TIME_T_DECL
#define _TIME_T_DECL
typedef __time_t time_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _TIMER_T_DECL
#define _TIMER_T_DECL
typedef __timer_t timer_t;
#endif

View File

@ -1,8 +0,0 @@
#ifndef _TIMEVAL_T_DECL
#define _TIMEVAL_T_DECL
struct timeval
{
time_t tv_sec;
suseconds_t tv_usec;
};
#endif

View File

@ -1,4 +0,0 @@
#ifndef _UID_T_DECL
#define _UID_T_DECL
typedef __uid_t uid_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _USECONDS_T_DECL
#define _USECONDS_T_DECL
typedef __useconds_t useconds_t;
#endif

View File

@ -1,9 +0,0 @@
#ifndef _VALIST_DECL
#define _VALIST_DECL
#define va_start(v,l) __builtin_va_start(v,l)
#define va_arg(v,l) __builtin_va_arg(v,l)
#define va_end(v) __builtin_va_end(v)
#define va_copy(d,s) __builtin_va_copy(d,s)
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
#endif

View File

@ -1,2 +0,0 @@
#define __need_wchar_t
#include <stddef.h>

View File

@ -1,7 +0,0 @@
#ifndef _WCTRANS_T_DECL
#define _WCTRANS_T_DECL
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef unsigned int __wctrans_t;
typedef __wctrans_t wctrans_t;
#endif

View File

@ -1,4 +0,0 @@
#ifndef _WCTYPE_T_DECL
#define _WCTYPE_T_DECL
typedef int (*wctype_t)(wint_t);
#endif

View File

@ -1,5 +0,0 @@
#ifndef _WINT_T_DECL
#define _WINT_T_DECL
typedef int __wint_t;
typedef __wint_t wint_t;
#endif

View File

@ -31,9 +31,22 @@
__BEGIN_DECLS
@include(off_t.h)
@include(size_t.h)
@include(FILE.h)
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __FILE_defined
#define __FILE_defined
typedef struct FILE FILE;
#define FILE FILE
#endif
#define _FILE_REGISTERED (1<<0)
#define _FILE_BUFFER_MODE_SET (1<<1)

View File

@ -31,7 +31,11 @@
__BEGIN_DECLS
@include(size_t.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
/* If somehow another declaration of alloca happened. This shouldn't happen, but
glibc does this and we might as well do it also. */

View File

@ -31,9 +31,40 @@
__BEGIN_DECLS
@include(ino_t.h)
@include(size_t.h)
@include(DIR.h)
#ifndef __ino_t_defined
#define __ino_t_defined
typedef __ino_t ino_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __DIR_defined
#define __DIR_defined
struct dirent;
#define _DIR_REGISTERED (1<<0)
#define _DIR_ERROR (1<<1)
#define _DIR_EOF (1<<2)
typedef struct _DIR
{
void* user;
int (*read_func)(void* user, struct dirent* dirent, size_t* size);
int (*rewind_func)(void* user);
int (*fd_func)(void* user);
int (*close_func)(void* user);
void (*free_func)(struct _DIR* dir);
/* Application writers shouldn't use anything beyond this point. */
struct _DIR* prev;
struct _DIR* next;
struct dirent* entry;
size_t entrysize;
int flags;
} DIR;
#endif
struct dirent
{

View File

@ -59,7 +59,10 @@ __BEGIN_DECLS
/* TODO: POSIX_FADV_* missing here */
@include(pid_t.h)
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
struct flock
{

View File

@ -31,9 +31,22 @@
__BEGIN_DECLS
@include(FILE.h)
@include(gid_t.h)
@include(size_t.h)
#ifndef __FILE_defined
#define __FILE_defined
typedef struct FILE FILE;
#define FILE FILE
#endif
#ifndef __gid_t_defined
#define __gid_t_defined
typedef __gid_t gid_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
struct group
{

View File

@ -201,7 +201,11 @@
__BEGIN_DECLS
@include(wchar_t.h)
#ifndef __wchar_t_defined
#define __wchar_t_defined
#define __need_wchar_t
#include <stddef.h>
#endif
typedef struct
{

View File

@ -34,8 +34,16 @@
__BEGIN_DECLS
@include(off_t.h)
@include(size_t.h)
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
size_t preadall(int fd, void* buf, size_t count, off_t off);
size_t preadleast(int fd, void* buf, size_t least, size_t max, off_t off);

View File

@ -33,9 +33,20 @@
__BEGIN_DECLS
@include(in_port_t.h)
@include(in_addr_t.h)
@include(socklen_t.h)
#ifndef __in_port_t_defined
#define __in_port_t_defined
typedef uint16_t in_port_t;
#endif
#ifndef __in_addr_t_defined
#define __in_addr_t_defined
typedef uint32_t in_addr_t;
#endif
#ifndef __socklen_t_defined
#define __socklen_t_defined
typedef __socklen_t socklen_t;
#endif
struct hostent
{

View File

@ -34,10 +34,25 @@
__BEGIN_DECLS
@include(in_port_t.h)
@include(in_addr_t.h)
@include(sa_family_t.h)
@include(socklen_t.h)
#ifndef __in_port_t_defined
#define __in_port_t_defined
typedef uint16_t in_port_t;
#endif
#ifndef __in_addr_t_defined
#define __in_addr_t_defined
typedef uint32_t in_addr_t;
#endif
#ifndef __sa_family_t_defined
#define __sa_family_t_defined
typedef unsigned short int sa_family_t;
#endif
#ifndef __socklen_t_defined
#define __socklen_t_defined
typedef __socklen_t socklen_t;
#endif
struct in_addr
{

View File

@ -31,7 +31,10 @@
__BEGIN_DECLS
@include(time_t.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
__END_DECLS
#include <sortix/poll.h>

View File

@ -31,10 +31,27 @@
__BEGIN_DECLS
@include(FILE.h)
@include(gid_t.h)
@include(size_t.h)
@include(uid_t.h)
#ifndef __FILE_defined
#define __FILE_defined
typedef struct FILE FILE;
#define FILE FILE
#endif
#ifndef __gid_t_defined
#define __gid_t_defined
typedef __gid_t gid_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __uid_t_defined
#define __uid_t_defined
typedef __uid_t uid_t;
#endif
struct passwd
{

View File

@ -33,11 +33,28 @@
__BEGIN_DECLS
@include(uid_t.h)
@include(pid_t.h)
@include(size_t.h)
#ifndef __uid_t_defined
#define __uid_t_defined
typedef __uid_t uid_t;
#endif
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
/* TODO: POSIX says this header declares struct timespec, but not time_t... */
@include(time_t.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
/* TODO: pthread_t */
/* TODO: pthread_attr_t */

View File

@ -41,11 +41,32 @@
__BEGIN_DECLS
@include(off_t.h)
@include(size_t.h)
@include(ssize_t.h)
@include(NULL.h)
@include(FILE.h)
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#ifndef __FILE_defined
#define __FILE_defined
typedef struct FILE FILE;
#define FILE FILE
#endif
typedef off_t fpos_t;

View File

@ -60,9 +60,22 @@ typedef struct
long long rem;
} lldiv_t;
@include(NULL.h)
@include(size_t.h)
@include(wchar_t.h)
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __wchar_t_defined
#define __wchar_t_defined
#define __need_wchar_t
#include <stddef.h>
#endif
void abort(void) __attribute__ ((__noreturn__));
int abs(int value);

View File

@ -33,9 +33,24 @@
__BEGIN_DECLS
@include(NULL.h)
@include(size_t.h)
@include(locale_t.h)
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __locale_t_defined
#define __locale_t_defined
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef int __locale_t;
typedef __locale_t locale_t;
#endif
int ffs(int);
int ffsl(long int);

View File

@ -31,8 +31,16 @@
__BEGIN_DECLS
@include(size_t.h)
@include(ssize_t.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
ssize_t kernelinfo(const char* req, char* resp, size_t resplen);

View File

@ -33,9 +33,21 @@
__BEGIN_DECLS
@include(mode_t.h)
@include(off_t.h)
@include(size_t.h)
#ifndef __mode_t_defined
#define __mode_t_defined
typedef __mode_t mode_t;
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
void* mmap(void*, size_t, int, int, int, off_t);
int mprotect(const void*, size_t, int);

View File

@ -36,7 +36,11 @@
__BEGIN_DECLS
@include(size_t.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
ssize_t readdirents(int fd, struct kernel_dirent* dirent, size_t size);

View File

@ -33,11 +33,34 @@
__BEGIN_DECLS
@include(id_t.h)
@include(pid_t.h)
@include(time_t.h)
@include(suseconds_t.h)
@include(timeval.h)
#ifndef __id_t_defined
#define __id_t_defined
typedef __id_t id_t;
#endif
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
#ifndef __suseconds_t_defined
#define __suseconds_t_defined
typedef __suseconds_t suseconds_t;
#endif
#ifndef __timeval_defined
#define __timeval_defined
struct timeval
{
time_t tv_sec;
suseconds_t tv_usec;
};
#endif
#define RUSAGE_SELF 0
#define RUSAGE_CHILDREN 1

View File

@ -34,9 +34,24 @@
__BEGIN_DECLS
@include(time_t.h)
@include(suseconds_t.h)
@include(timeval.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
#ifndef __suseconds_t_defined
#define __suseconds_t_defined
typedef __suseconds_t suseconds_t;
#endif
#ifndef __timeval_defined
#define __timeval_defined
struct timeval
{
time_t tv_sec;
suseconds_t tv_usec;
};
#endif
__BEGIN_DECLS
#include <sortix/sigset.h>

View File

@ -33,10 +33,26 @@
__BEGIN_DECLS
@include(socklen_t.h)
@include(size_t.h)
@include(ssize_t.h)
@include(sa_family_t.h)
#ifndef __socklen_t_defined
#define __socklen_t_defined
typedef __socklen_t socklen_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
#ifndef __sa_family_t_defined
#define __sa_family_t_defined
typedef unsigned short int sa_family_t;
#endif
__END_DECLS

View File

@ -30,16 +30,57 @@
#include <sys/__/types.h>
__BEGIN_DECLS
@include(blkcnt_t.h)
@include(blksize_t.h)
@include(dev_t.h)
@include(ino_t.h)
@include(mode_t.h)
@include(nlink_t.h)
@include(uid_t.h)
@include(gid_t.h)
@include(off_t.h)
@include(time_t.h)
#ifndef __blkcnt_t_defined
#define __blkcnt_t_defined
typedef __blkcnt_t blkcnt_t;
#endif
#ifndef __blksize_t_defined
#define __blksize_t_defined
typedef __blksize_t blksize_t;
#endif
#ifndef __dev_t_defined
#define __dev_t_defined
typedef __dev_t dev_t;
#endif
#ifndef __ino_t_defined
#define __ino_t_defined
typedef __ino_t ino_t;
#endif
#ifndef __mode_t_defined
#define __mode_t_defined
typedef __mode_t mode_t;
#endif
#ifndef __nlink_t_defined
#define __nlink_t_defined
typedef __nlink_t nlink_t;
#endif
#ifndef __uid_t_defined
#define __uid_t_defined
typedef __uid_t uid_t;
#endif
#ifndef __gid_t_defined
#define __gid_t_defined
typedef __gid_t gid_t;
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
__END_DECLS
#include <sortix/timespec.h>

View File

@ -31,9 +31,24 @@
__BEGIN_DECLS
@include(time_t.h)
@include(suseconds_t.h)
@include(timeval.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
#ifndef __suseconds_t_defined
#define __suseconds_t_defined
typedef __suseconds_t suseconds_t;
#endif
#ifndef __timeval_defined
#define __timeval_defined
struct timeval
{
time_t tv_sec;
suseconds_t tv_usec;
};
#endif
int gettimeofday(struct timeval* __restrict tp, void* __restrict tzp);

View File

@ -31,7 +31,10 @@
__BEGIN_DECLS
@include(clock_t.h);
#ifndef __clock_t_defined
#define __clock_t_defined
typedef __clock_t clock_t;
#endif
struct tms
{

View File

@ -33,29 +33,109 @@
__BEGIN_DECLS
@include(blkcnt_t.h)
@include(blksize_t.h)
@include(clock_t.h)
@include(clockid_t.h)
@include(dev_t.h)
#ifndef __blkcnt_t_defined
#define __blkcnt_t_defined
typedef __blkcnt_t blkcnt_t;
#endif
#ifndef __blksize_t_defined
#define __blksize_t_defined
typedef __blksize_t blksize_t;
#endif
#ifndef __clock_t_defined
#define __clock_t_defined
typedef __clock_t clock_t;
#endif
#ifndef __clockid_t_defined
#define __clockid_t_defined
typedef __clockid_t clockid_t;
#endif
#ifndef __dev_t_defined
#define __dev_t_defined
typedef __dev_t dev_t;
#endif
/* TODO: fsblkcnt_t */
/* TODO: fsfilcnt_t */
@include(gid_t.h)
@include(id_t.h)
@include(ino_t.h)
#ifndef __gid_t_defined
#define __gid_t_defined
typedef __gid_t gid_t;
#endif
#ifndef __id_t_defined
#define __id_t_defined
typedef __id_t id_t;
#endif
#ifndef __ino_t_defined
#define __ino_t_defined
typedef __ino_t ino_t;
#endif
/* TODO: key_t */
@include(mode_t.h)
@include(nlink_t.h)
@include(off_t.h)
@include(pid_t.h)
@include(size_t.h)
@include(ssize_t.h)
@include(suseconds_t.h)
@include(time_t.h)
@include(timer_t.h)
#ifndef __mode_t_defined
#define __mode_t_defined
typedef __mode_t mode_t;
#endif
#ifndef __nlink_t_defined
#define __nlink_t_defined
typedef __nlink_t nlink_t;
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
#ifndef __suseconds_t_defined
#define __suseconds_t_defined
typedef __suseconds_t suseconds_t;
#endif
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
#ifndef __timer_t_defined
#define __timer_t_defined
typedef __timer_t timer_t;
#endif
/* TODO: trace*_t */
@include(uid_t.h)
@include(useconds_t.h)
#ifndef __uid_t_defined
#define __uid_t_defined
typedef __uid_t uid_t;
#endif
#ifndef __useconds_t_defined
#define __useconds_t_defined
typedef __useconds_t useconds_t;
#endif
#if !defined(__is_sortix_kernel)
/* TODO: pthread*_t */

View File

@ -31,9 +31,21 @@
__BEGIN_DECLS
@include(size_t.h)
@include(ssize_t.h)
@include(off_t.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
__END_DECLS

View File

@ -31,7 +31,10 @@
__BEGIN_DECLS
@include(sa_family_t.h)
#ifndef __sa_family_t_defined
#define __sa_family_t_defined
typedef unsigned short int sa_family_t;
#endif
struct sockaddr_un
{

View File

@ -35,7 +35,10 @@
__BEGIN_DECLS
@include(pid_t.h)
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
/* TODO: These are not implemented in sortix libc yet. */
#if 0

View File

@ -31,13 +31,44 @@
__BEGIN_DECLS
@include(clock_t.h)
@include(size_t.h)
@include(time_t.h)
@include(clockid_t.h)
@include(timer_t.h)
@include(locale_t.h)
@include(pid_t.h)
#ifndef __clock_t_defined
#define __clock_t_defined
typedef __clock_t clock_t;
#endif
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
#ifndef __clockid_t_defined
#define __clockid_t_defined
typedef __clockid_t clockid_t;
#endif
#ifndef __timer_t_defined
#define __timer_t_defined
typedef __timer_t timer_t;
#endif
#ifndef __locale_t_defined
#define __locale_t_defined
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef int __locale_t;
typedef __locale_t locale_t;
#endif
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
struct sigevent;
@ -62,7 +93,10 @@ __END_DECLS
#endif
__BEGIN_DECLS
@include(NULL.h)
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#define CLOCKS_PER_SEC 1000000l

View File

@ -33,7 +33,10 @@
__BEGIN_DECLS
@include(time_t.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
__END_DECLS

View File

@ -38,7 +38,10 @@
#include <stdint.h>
#include <sortix/fork.h>
__BEGIN_DECLS
@include(time_t.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
__END_DECLS
#include <sortix/timespec.h>
#include <ioleast.h>
@ -63,7 +66,10 @@ __BEGIN_DECLS
/* TODO: _POSIX_*, _POSIX2_* is missing here. */
@include(NULL.h)
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#define _CS_PATH 0
#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
@ -253,13 +259,41 @@ __BEGIN_DECLS
/* TODO: _POSIX_VDISABLE is missing here. */
@include(size_t.h)
@include(ssize_t.h)
@include(uid_t.h)
@include(gid_t.h)
@include(off_t.h)
@include(pid_t.h)
@include(useconds_t.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __ssize_t_defined
#define __ssize_t_defined
typedef __ssize_t ssize_t;
#endif
#ifndef __uid_t_defined
#define __uid_t_defined
typedef __uid_t uid_t;
#endif
#ifndef __gid_t_defined
#define __gid_t_defined
typedef __gid_t gid_t;
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __pid_t_defined
#define __pid_t_defined
typedef __pid_t pid_t;
#endif
#ifndef __useconds_t_defined
#define __useconds_t_defined
typedef __useconds_t useconds_t;
#endif
#if defined(_WANT_ENVIRON)
extern char** environ;

View File

@ -31,7 +31,10 @@
__BEGIN_DECLS
@include(time_t.h)
#ifndef __time_t_defined
#define __time_t_defined
typedef __time_t time_t;
#endif
struct utimbuf
{

View File

@ -35,17 +35,69 @@
__BEGIN_DECLS
@include(size_t.h)
@include(off_t.h)
@include(FILE.h)
@include(locale_t.h)
@include(va_list.h)
@include(wchar_t.h)
@include(wint_t.h)
@include(WCHAR_MAX.h)
@include(WCHAR_MIN.h)
@include(WEOF.h)
@include(NULL.h)
#ifndef __size_t_defined
#define __size_t_defined
#define __need_size_t
#include <stddef.h>
#endif
#ifndef __off_t_defined
#define __off_t_defined
typedef __off_t off_t;
#endif
#ifndef __FILE_defined
#define __FILE_defined
typedef struct FILE FILE;
#define FILE FILE
#endif
#ifndef __locale_t_defined
#define __locale_t_defined
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef int __locale_t;
typedef __locale_t locale_t;
#endif
#ifndef __valist_defined
#define __valist_defined
#define va_start(v,l) __builtin_va_start(v,l)
#define va_arg(v,l) __builtin_va_arg(v,l)
#define va_end(v) __builtin_va_end(v)
#define va_copy(d,s) __builtin_va_copy(d,s)
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
#endif
#ifndef __wchar_t_defined
#define __wchar_t_defined
#define __need_wchar_t
#include <stddef.h>
#endif
#ifndef __wint_t_defined
#define __wint_t_defined
typedef int __wint_t;
typedef __wint_t wint_t;
#endif
#ifndef WCHAR_MAX
#define WCHAR_MAX __WCHAR_MAX
#endif
#ifndef WCHAR_MIN
#define WCHAR_MIN __WCHAR_MIN
#endif
#ifndef WEOF
#define WEOF (-1)
#endif
#ifndef NULL
#define __need_NULL
#include <stddef.h>
#endif
#ifndef __mbstate_t_defined
/* Conversion state information. */

View File

@ -31,11 +31,36 @@
__BEGIN_DECLS
@include(wint_t.h)
@include(wctrans_t.h)
@include(wctype_t.h)
@include(locale_t.h)
@include(WEOF.h)
#ifndef __wint_t_defined
#define __wint_t_defined
typedef int __wint_t;
typedef __wint_t wint_t;
#endif
#ifndef __wctrans_t_defined
#define __wctrans_t_defined
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef unsigned int __wctrans_t;
typedef __wctrans_t wctrans_t;
#endif
#ifndef __wctype_t_defined
#define __wctype_t_defined
typedef int (*wctype_t)(wint_t);
#endif
#ifndef __locale_t_defined
#define __locale_t_defined
/* TODO: figure out what this does and typedef it properly. This is just a
temporary assignment. */
typedef int __locale_t;
typedef __locale_t locale_t;
#endif
#ifndef WEOF
#define WEOF (-1)
#endif
int iswalnum(wint_t);
int iswalpha(wint_t);

1
mxmpp/.gitignore vendored
View File

@ -1 +0,0 @@
mxmpp

View File

@ -1,35 +0,0 @@
include ../compiler.mak
include ../version.mak
include ../dirs.mak
ifndef OPTLEVEL
OPTLEVEL=-g -O2
endif
ifndef CXXFLAGS
CXXFLAGS:=$(OPTLEVEL)
endif
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
BINARIES=mxmpp
INSTALLBINARIES:=$(addprefix $(DESTDIR)$(BINDIR)/,$(BINARIES))
all: $(BINARIES)
.PHONY: all install uninstall clean
%: %.cpp
$(CXX) -std=gnu++11 $(CPPFLAGS) $(CXXFLAGS) $< -o $@
clean:
rm -f $(BINARIES)
install: all
mkdir -p $(DESTDIR)$(BINDIR)
install $(BINARIES) $(DESTDIR)$(BINDIR)
uninstall:
rm -f $(INSTALLBINARIES)

View File

@ -1 +0,0 @@
This is a small stupid macro processor used for building Sortix's libc.

View File

@ -1,414 +0,0 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2012.
This file is part of mxmpp.
mxmpp is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
mxmpp is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along with
mxmpp. If not, see <http://www.gnu.org/licenses/>.
mxmpp.cpp
A simple macro preprocessor.
*******************************************************************************/
#include <stdint.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#ifndef S_IRGRP
#define S_IRGRP (0)
#endif
#ifndef S_IWGRP
#define S_IWGRP (0)
#endif
#ifndef S_IROTH
#define S_IROTH (0)
#endif
#ifndef S_IWOTH
#define S_IWOTH (0)
#endif
#define writeall mxmpp_writeall
bool writeall(int fd, const void* p, size_t size)
{
const uint8_t* buffer = (const uint8_t*) p;
size_t bytesWritten = 0;
while ( bytesWritten < size )
{
ssize_t written = write(fd, buffer + bytesWritten, size - bytesWritten);
if ( written < 0 ) { perror("write"); return false; }
bytesWritten += written;
}
return true;
}
void usage(int /*argc*/, char* argv[])
{
printf("usage: %s [OPTIONS] [FILE]...\n", argv[0]);
printf("Preprocess FILE(s), or standard input.");
printf("\n");
printf("Options:\n");
printf(" -o <file> Write output to this file\n");
printf(" Default = Standard Output\n");
printf(" -I <file> Add this directory to the include search paths\n");
printf(" If no paths are set, include from working dir\n");
printf(" -q Surpress normal output\n");
printf(" -v Be verbose\n");
printf(" --usage Display this screen\n");
printf(" --help Display this screen\n");
printf(" --version Display version information\n");
}
void version()
{
printf("The Maxsi Macro PreProcessor 0.1\n");
printf("Copyright (C) 2011 Jonas 'Sortie' Termansen\n");
printf("This is free software; see the source for copying conditions. There is NO\n");
printf("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
printf("website: http://www.maxsi.org/software/mxmpp/\n");
}
struct searchpath
{
const char* path;
searchpath* next;
};
struct inputfile
{
const char* path;
inputfile* next;
};
int outfd = -1;
searchpath* firstpath = NULL;
inputfile* firstfile = NULL;
const size_t CONSTRUCT_SIZE = 511;
const size_t BUFFER_SIZE = 4096;
bool verbose = false;
char* search(const char* filename);
bool include(const char* parameter);
bool expand(const char* command, const char* parameter);
bool process(int fd);
bool process(const char* path);
char* search(const char* filename)
{
size_t filenamelen = strlen(filename);
for ( searchpath* path = firstpath; path != NULL; path = path->next )
{
size_t searchpathlen = strlen(path->path);
size_t filepathlen = searchpathlen + 1 + filenamelen;
char* filepath = new char[filepathlen + 1];
strcpy(filepath, path->path);
strcpy(filepath + searchpathlen, "/");
strcpy(filepath + searchpathlen + 1, filename);
struct stat sts;
int statrs = stat(filepath, &sts);
if ( statrs < 0 && errno != ENOENT )
{
fprintf(stderr, "error: could not stat file '%s': %s\n", filepath, strerror(errno)); return NULL;
}
bool found = ( statrs != -1 );
if ( verbose )
{
fprintf(stderr, "info: searching for '%s': %s\n", filepath, ( found ) ? "found" : "not found");
}
if ( found )
{
return filepath;
}
delete[] filepath;
}
return NULL;
}
bool include(const char* parameter)
{
if ( parameter[0] == '\0' )
{
fprintf(stderr, "error: @include expects a non-empty parameter\n");
return false;
}
if ( parameter[0] == '/' )
{
return process(parameter);
}
char* included = search(parameter);
if ( included == NULL )
{
fprintf(stderr, "error: could not find included file '%s'\n", parameter);
return false;
}
bool result = process(included);
delete[] included;
return result;
}
bool expand(const char* command, const char* parameter)
{
if ( strcmp(command, "@include") == 0 )
{
return include(parameter);
}
else
{
fprintf(stderr, "error: unknown macro command %s\n", command);
return false;
}
}
bool process(int fd)
{
char construct[CONSTRUCT_SIZE+1];
char buffer[BUFFER_SIZE];
size_t constructed = 0;
int phase = 0;
const char* command = NULL;
const char* parameter = NULL;
bool quote = false;
bool backslash = false;
while ( true )
{
ssize_t numread = read(fd, buffer, BUFFER_SIZE);
if ( numread == 0 ) { break; }
if ( numread < 0 ) { perror("read"); return false; }
size_t writefrom = 0;
for ( ssize_t i = 0; i < numread; i++ )
{
if ( constructed == 0 )
{
if ( buffer[i] == '\\' ) { backslash = !backslash; continue; }
if ( buffer[i] == '"' && !backslash ) { quote = !quote; }
if ( buffer[i] == '@' && !quote )
{
if ( i - writefrom > 0 )
{
if ( !writeall(outfd, buffer + writefrom, i - writefrom) ) { return false; }
}
construct[0] = '@'; constructed++;
}
backslash = false;
}
else
{
if ( phase == 0 )
{
if ( ( ('a' <= buffer[i] && buffer[i] <= 'z' ) ||
('A' <= buffer[i] && buffer[i] <= 'Z' ) ) &&
( constructed < CONSTRUCT_SIZE) )
{
construct[constructed] = buffer[i]; constructed++;
}
else if ( buffer[i] == '(' )
{
construct[constructed] = '\0'; constructed++;
command = construct;
parameter = construct + constructed;
phase++;
continue;
}
else
{
construct[constructed] = '\0';
fprintf(stderr, "error: expected '(' after '%s'\n", construct);
return false;
}
}
if ( phase == 1 )
{
if ( buffer[i] == ')' )
{
construct[constructed] = '\0';
if ( !expand(command, parameter) ) { return false; }
phase = 0;
constructed = 0;
writefrom = i + 1;
}
else if ( buffer[i] != '\n' && buffer[i] != '\r' && constructed < CONSTRUCT_SIZE )
{
construct[constructed] = buffer[i]; constructed++;
}
else
{
construct[constructed] = '\0';
fprintf(stderr, "error: expected ')' after '%s'\n", parameter);
return false;
}
}
}
}
if ( constructed == 0 && numread - writefrom > 0 )
{
if ( !writeall(outfd, buffer + writefrom, numread - writefrom) ) { return false; }
}
}
return true;
}
bool process(const char* path)
{
int fd;
if ( strcmp(path, "-") == 0 ) { fd = 0; }
else if ( (fd = open(path, O_RDONLY) ) < 0 )
{
fprintf(stderr, "error: couldn't open file '%s'\n", path); return false;
}
if ( verbose )
{
fprintf(stderr, "info: including file '%s'\n", path);
}
bool result = process(fd);
if ( verbose )
{
fprintf(stderr, "info: end of file '%s'\n", path);
}
if ( close(fd) < 0 )
{
perror("close"); return false;
}
return result;
}
int main(int argc, char* argv[])
{
const char* dest = NULL;
searchpath* lastpath = NULL;
inputfile* lastfile = NULL;
for ( int i = 1; i < argc; i++ )
{
if ( strcmp(argv[i], "-I") == 0 )
{
if ( 2 <= argc - i )
{
searchpath* path = new searchpath();
path->path = argv[i+1];
path->next = NULL;
if ( firstpath == NULL ) { firstpath = path; } else { lastpath->next = path; }
lastpath = path;
i++;
}
}
else if ( strcmp(argv[i], "-o") == 0 )
{
if ( 2 <= argc - i )
{
dest = argv[i+1];
i++;
}
}
else if ( strcmp(argv[i], "-v") == 0 )
{
verbose = true;
}
else if ( strcmp(argv[i], "-q") == 0 )
{
verbose = false;
}
else if ( strcmp(argv[i], "--help") == 0 )
{
usage(argc, argv);
return 0;
}
else if ( strcmp(argv[i], "--usage") == 0 )
{
usage(argc, argv);
return 0;
}
else if ( strcmp(argv[i], "--version") == 0 )
{
version();
return 0;
}
else
{
inputfile* file = new inputfile();
file->path = argv[i];
file->next = NULL;
if ( firstfile == NULL ) { firstfile = file; } else { lastfile->next = file; }
lastfile = file;
}
}
if ( dest == NULL || strcmp(dest, "-") == 0 ) { outfd = 1; }
else if ( (outfd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) ) < 0 )
{
fprintf(stderr, "error: couldn't open file '%s'\n", dest); return 1;
}
if ( firstpath == NULL )
{
firstpath = new searchpath;
firstpath->path = ".";
firstpath->next = NULL;
lastpath = firstpath;
}
if ( firstfile == NULL )
{
firstfile = new inputfile;
firstfile->path = "-";
firstfile->next = NULL;
lastfile = firstfile;
}
inputfile* tmp = firstfile;
while ( tmp != NULL )
{
if ( !process(tmp->path) ) { return 1; }
tmp = tmp->next;
}
if ( close(outfd) < 0 )
{
perror("close"); return 1;
}
return 0;
}

View File

@ -23,7 +23,6 @@ clean:
$(MAKE) -B -C $(SRCDIR)/bench clean
$(MAKE) -B -C $(SRCDIR)/games clean
$(MAKE) -B -C $(SRCDIR)/mkinitrd clean
$(MAKE) -B -C $(SRCDIR)/mxmpp clean
$(MAKE) -B -C $(SRCDIR)/utils clean
$(MAKE) -B -C $(SRCDIR)/ext clean
$(MAKE) -B -C $(SRCDIR)/mbr clean
@ -69,7 +68,6 @@ system:
$(MAKE) -B -C $(SRCDIR)/dispd install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/games install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/mkinitrd install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/mxmpp install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/utils install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/bench install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib
$(MAKE) -B -C $(SRCDIR)/ext install DESTDIR=$(ROOT) C_INCLUDE_PATH=$(ROOT)/include CPLUS_INCLUDE_PATH=$(ROOT)/include LIBRARY_PATH=$(ROOT)/$(cputype)/lib