sortix-mirror/libmaxsi/Makefile

218 lines
4.2 KiB
Makefile
Raw Normal View History

2011-08-05 12:25:00 +00:00
ifndef CPU
CPU=x86
endif
ifeq ($(CPU),x86)
CPUDEFINES=-DPLATFORM_X86
CPUFLAGS=-m32
CPULDFLAGS=-melf_i386
CPUASFLAGS=-32
CPUNASMFLAGS=-felf32
endif
ifeq ($(CPU),x64)
CPU=x64
CPUDEFINES=-DPLATFORM_X64
CPUFLAGS=-fPIC -m64
CPULDFLAGS=-melf_x86_64
CPUASFLAGS=-64
CPUNASMFLAGS=-felf64
LIBMAXSI_NO_SHARED=1 # This doesn't work yet
2011-08-05 12:25:00 +00:00
endif
DEFINES=-DLIBMAXSI_LIBRARY -DSORTIX -U_GNU_SOURCE $(CPUDEFINES)
2011-08-05 12:25:00 +00:00
FLAGSRELEASE=-O2
FLAGSDEBUG=-O2
FLAGS=$(CPUFLAGS) -std=gnu++0x -Wall -Wextra -nostdlib -fno-builtin -nostartfiles -nodefaultlibs -fno-exceptions -fno-stack-protector -nostdinc $(FLAGSRELEASE) $(DEFINES)
LDFLAGS=$(CPULDFLAGS)
ASFLAGS=$(CPUASFLAGS)
NASMFLAGS=$(CPUNASMFLAGS)
COBJS=\
c/ctype.o \
c/file.o \
c/fdio.o \
c/stdio.o \
c/dir.o \
c/fddir-sortix.o \
2011-08-05 12:25:00 +00:00
CHEADERS=\
c/h/ctype.h \
2011-08-05 12:25:00 +00:00
c/h/unistd.h \
c/h/stdlib.h \
c/h/wchar.h \
c/h/stddef.h \
c/h/fcntl.h \
c/h/stdarg.h \
c/h/wctype.h \
c/h/features.h \
c/h/string.h \
c/h/errno.h \
c/h/error.h \
c/h/dirent.h \
c/h/sys/keycodes.h \
c/h/sys/termmode.h \
c/h/sys/readdirents.h \
2011-08-05 12:25:00 +00:00
c/h/sys/stat.h \
c/h/sys/types.h \
c/h/sys/wait.h \
c/h/stdio.h \
c/h/signal.h \
c/h/stdint.h \
2011-08-05 12:25:00 +00:00
COMMONOBJS=c++.o memory.o heap.o string.o error.o format.o
2011-08-05 12:25:00 +00:00
SORTIXOBJS:=$(addprefix sortix/,$(COMMONOBJS))
LIBMAXSIOBJS:=$(COMMONOBJS) \
sortix-sound.o \
process.o \
thread.o \
io.o \
terminal.o \
init.o \
signal.o \
$(CPU)/signal.o \
start.o \
2011-11-28 15:28:56 +00:00
time.o \
2011-11-10 11:27:31 +00:00
random.o \
2011-12-16 15:49:27 +00:00
integer.o
MAXSIHEADERS=\
error.h \
io.h \
memory.h \
platform.h \
string.h \
syscall.h \
thread.h \
2011-08-27 18:57:39 +00:00
process.h \
types.h \
format.h \
sortedlist.h \
signal.h \
signalnum.h \
sortix-vga.h \
2011-08-21 22:25:28 +00:00
sortix-sound.h \
2011-08-05 12:25:00 +00:00
OBJS:=$(LIBMAXSIOBJS)
BINS:=
ifndef LIBMAXSI_SHARED
LIBMAXSI_NO_SHARED=1
endif
ifndef LIBMAXSI_NO_SHARED
BINS:=$(BINS) libmaxsi.so
endif
2011-08-05 12:25:00 +00:00
ifndef LIBMAXSI_NO_STATIC
BINS:=$(BINS) libmaxsi.a
endif
ifndef LIBMAXSI_NO_SORTIX
BINS:=$(BINS) libmaxsi-sortix.a
2011-08-05 12:25:00 +00:00
endif
ifndef LIBMAXSI_NO_LIBC
OBJS:=$(OBJS) $(COBJS)
ifndef LIBMAXSI_NO_SHARED
BINS:=$(BINS) libc.so libg.so
endif
2011-08-05 12:25:00 +00:00
ifndef LIBMAXSI_NO_STATIC
BINS:=$(BINS) libc.a libg.a
2011-08-05 12:25:00 +00:00
endif
HEADERS:=$(MAXSIHEADERS) $(CHEADERS)
2011-08-05 12:25:00 +00:00
else
DEFINES:=$(DEFINES) -DLIBMAXSI_NO_LIBC
endif
CFLAGS:=$(FLAGS) -std=c99 -Ic/h -I..
CXXFLAGS:=$(FLAGS) -nostdinc++ -fno-rtti -I.. -Ic/h
SORTIXFLAGS:=$(CXXFLAGS) -DSORTIX_KERNEL -I.. -I../..
all: $(BINS)
libmaxsi.a: $(OBJS)
ar rcs libmaxsi.a $(OBJS)
libmaxsi.so: $(OBJS)
ld $(LDFLAGS) -shared -o $@ $(OBJS)
libmaxsi-sortix.a: $(SORTIXOBJS)
ar rcs libmaxsi-sortix.a $(SORTIXOBJS)
libc.a: libmaxsi.a
ln -sf $< $@
libc.so: libmaxsi.so
ln -sf $< $@
libg.a: libc.a
ln -sf $< $@
libg.so: libc.so
ln -sf $< $@
start.o: $(CPU)/start.o
ln -sf $< $@
2011-08-05 12:25:00 +00:00
# libmaxsi
*.cpp: $(HEADERS)
%.o: %.cpp
g++ -c $< -o $@ $(CXXFLAGS)
%.h: hsrc/%.h
echo "/* WARNING: This header is generated - edits will be lost! */" > $@
mxmpp -I decl $< >> $@
%.o: %.s
as $(ASFLAGS) $< -o $@
%.o: %.asm
nasm $(CPUNASMFLAGS) $< -o $@
# libc
c/*.c: $(CHEADERS)
c/%.o: c/%.c
gcc -c $< -o $@ $(CFLAGS)
c/h/%.h: c/hsrc/%.h
mkdir -p c/h
2011-08-06 23:37:43 +00:00
mkdir -p c/h/sys
2011-08-05 12:25:00 +00:00
echo "/* WARNING: This header is generated - edits will be lost! */" > $@
mxmpp -I decl -I c/decl $< >> $@
# libmaxsi-sortix
sortix/*.cpp: $(HEADERS)
sortix/%.o: %.cpp $(HEADERS)
g++ -c $< -o $@ $(SORTIXFLAGS)
sortix/%.o: sortix/%.cpp
g++ -c $< -o $@ $(SORTIXFLAGS)
clean:
rm -f *.o sortix/*.o c/*.o x86/*.o x64/*.o *.a *.so $(CHEADERS) $(HEADERS)
2011-08-05 12:25:00 +00:00
# Installation into sysroot
install:
mkdir -p $(SYSROOT)/usr/lib
for F in $(BINS); do cp -P $$F $(SYSROOT)/usr/lib || exit $?; done
mkdir -p $(SYSROOT)/usr/include
for F in $(CHEADERS); do F=`echo $$F | sed 's/c\/h\///g'`; mkdir -p $(SYSROOT)/usr/include/`dirname $$F`; cp c/h/$$F $(SYSROOT)/usr/include/$$F || exit $?; done
mkdir -p $(SYSROOT)/usr/include/libmaxsi
for F in $(MAXSIHEADERS); do cp $$F $(SYSROOT)/usr/include/libmaxsi || exit $?; done
cp start.o $(SYSROOT)/usr/lib/crtbegin.o
touch deleteme.cpp
g++ $(CPUFLAGS) -c deleteme.cpp -o deleteme.o
for F in crt0.o crtn.o crt1.o crtend.o crtbeginT.o crti.o; do cp deleteme.o $(SYSROOT)/usr/lib/$$F; done
for F in libgcc.so libm.so libstdc++.so; do ld $(CPULDFLAGS) -shared deleteme.o -o $(SYSROOT)/usr/lib/$$F; done
rm -f deleteme.o deleteme.cpp