diff --git a/Makefile.example b/Makefile.example index 82ea48a..0012b02 100644 --- a/Makefile.example +++ b/Makefile.example @@ -1,12 +1,14 @@ TERM = xterm TOPDIR = $(shell pwd) ARCH = x86 +BIT = 32 NAME = eduos KERNDIRS = libkern kernel mm fs arch/$(ARCH)/kernel arch/$(ARCH)/mm SUBDIRS = $(KERNDIRS) # Set your own cross compiler tool chain prefix here -CROSSCOMPREFIX = +CROSSCOMPREFIX = +STACKPROT = CC_FOR_TARGET = $(CROSSCOMPREFIX)gcc CXX_FOR_TARGET = $(CROSSCOMPREFIX)g++ @@ -24,7 +26,7 @@ READELF_FOR_TARGET = $(CROSSCOMPREFIX)readelf MAKE = make NASM = nasm -NASMFLAGS = -felf32 -g -i$(TOPDIR)/include/eduos/ +NASMFLAGS = -felf$(BIT) -g -i$(TOPDIR)/include/eduos/ GDB = $(CROSSCOMPREFIX)gdb GDBFLAGS = -x debug.gdb QEMU = qemu-system-i386 @@ -49,7 +51,10 @@ LDFLAGS = -T link.ld -z max-page-size=4096 --defsym __BUILD_DATE=$(shell date +' STRIP_DEBUG = --strip-debug KEEP_DEBUG = --only-keep-debug -CFLAGS_FOR_TOOLS = -m32 -O2 -Wall +CFLAGS_FOR_NEWLIB = -m$(BIT) $(STACKPROT) +LDFLAGS_FOR_NEWLIB = -m$(BIT) +NASMFLAGS_FOR_NEWLIB = -felf$(BIT) +CFLAGS_FOR_TOOLS = -m$(BIT) -O2 -Wall LDFLAGS_FOR_TOOLS = # Prettify output @@ -61,10 +66,28 @@ endif default: all -all: tools $(NAME).elf +all: newlib tools $(NAME).elf + +newlib: + $(MAKE) ARCH=$(ARCH) BIT=$(BIT) \ + LDFLAGS="$(LDFLAGS_FOR_NEWLIB)" \ + CFLAGS="$(CFLAGS_FOR_NEWLIB)" \ + NASMFLAGS="$(NASMFLAGS_FOR_NEWLIB)" \ + CC_FOR_TARGET=$(CC_FOR_TARGET) \ + CXX_FOR_TARGET=$(CXX_FOR_TARGET) \ + GCC_FOR_TARGET=$(GCC_FOR_TARGET) \ + AR_FOR_TARGET=$(AR_FOR_TARGET) \ + AS_FOR_TARGET=$(AS_FOR_TARGET) \ + LD_FOR_TARGET=$(LD_FOR_TARGET) \ + NM_FOR_TARGET=$(NM_FOR_TARGET) \ + OBJDUMP_FOR_TARGET=$(OBJDUMP_FOR_TARGET) \ + OBJCOPY_FOR_TARGET=$(OBJCOPY_FOR_TARGET) \ + RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET) \ + STRIP_FOR_TARGET=$(STRIP_FOR_TARGET) \ + READELF_FOR_TARGET=$(READELF_FOR_TARGET) -C newlib tools: - $(MAKE) ARCH=$(ARCH) CFLAGS="$(CFLAGS_FOR_TOOLS)" LDFLAGS="$(LDFLAGS_FOR_TOOLS)" -C tools + $(MAKE) ARCH=$(ARCH) BIT=$(BIT) CFLAGS="$(CFLAGS_FOR_TOOLS)" LDFLAGS="$(LDFLAGS_FOR_TOOLS)" -C tools $(NAME).elf: $Q$(LD_FOR_TARGET) $(LDFLAGS) -o $(NAME).elf $^ @@ -80,6 +103,7 @@ clean: veryclean: clean $Q$(RM) qemu-vlan0.pcap + $Q$(MAKE) -C newlib veryclean @echo Very cleaned qemu: $(NAME).elf diff --git a/newlib/Makefile b/newlib/Makefile index 2951cfe..66693e3 100644 --- a/newlib/Makefile +++ b/newlib/Makefile @@ -20,7 +20,7 @@ OPT = --disable-shared --disable-multilib --enable-newlib-hw-fp --disable-newlib default: $(ARCH) $(MAKE) ARCH=$(ARCH) BIT=$(BIT) TARGET=$(TARGET) CFLAGS+="-ffreestanding -Wall -I$(NEWLIB)/include -I../../include -I../../arch/$(ARCH)/include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C examples depend - #$(MAKE) ARCH=$(ARCH) BIT=$(BIT) TARGET=$(TARGET) CFLAGS+="-ffreestanding -Wall -I$(NEWLIB)/include -I../../include -I../../arch/$(ARCH)/include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C examples + $(MAKE) ARCH=$(ARCH) BIT=$(BIT) TARGET=$(TARGET) CFLAGS+="-ffreestanding -Wall -I$(NEWLIB)/include -I../../include -I../../arch/$(ARCH)/include" LDFLAGS+="-nostdlib -L$(NEWLIB)/lib" -C examples $(ARCH): $(RM) $(TMP) diff --git a/newlib/src/libgloss/eduos/Makefile.in b/newlib/src/libgloss/eduos/Makefile.in index e787879..eb16a17 100644 --- a/newlib/src/libgloss/eduos/Makefile.in +++ b/newlib/src/libgloss/eduos/Makefile.in @@ -66,8 +66,8 @@ OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` CRT0 = crt0_$(BIT).o -METALSVM_BSP = libgloss.a -METALSVM_OBJS = chown.o fork.o gettod.o kill.o open.o sbrk.o times.o write.o \ +EDUOS_BSP = libgloss.a +EDUOS_OBJS = chown.o errno.o fork.o gettod.o kill.o open.o sbrk.o times.o write.o \ close.o execve.o fstat.o init.o link.o read.o stat.o unlink.o \ environ.o _exit.o getpid.o isatty.o lseek.o readlink.o symlink.o wait.o \ dup.o dup2.o @@ -80,13 +80,14 @@ INCLUDES += -I$(srcdir)/include %.o : %.asm $(NASM) $(NASMFLAGS) -o $@ $< -all: $(CRT0) $(METALSVM_BSP) +all: $(CRT0) $(EDUOS_BSP) -$(METALSVM_BSP): $(METALSVM_OBJS) +$(EDUOS_BSP): $(EDUOS_OBJS) $(AR) $(ARFLAGS) $@ $? $(RANLIB) $@ chown.o: $(srcdir)/chown.c +errno.o: $(srcdir)/errno.c fork.o: $(srcdir)/fork.c gettod.o: $(srcdir)/gettod.c kill.o: $(srcdir)/kill.c @@ -115,7 +116,7 @@ dup2.o: $(srcdir)/dup2.c install: $($(CPU)_INSTALL) $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/crt0.o - $(INSTALL_DATA) $(METALSVM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(METALSVM_BSP) + $(INSTALL_DATA) $(EDUOS_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(EDUOS_BSP) $(INSTALL_DATA) ${srcdir}/link$(BIT).ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/link.ld for i in ${srcdir}/include/sys/*.h; do \ ${INSTALL_DATA} $$i ${DESTDIR}${tooldir}/include/sys/`basename $$i`; \