Fixed our newlib_backend to use the systems unistd for func decls.
[akaros.git] / GNUmakefile
index c763ae6..3de15e1 100644 (file)
 #
 OBJDIR := obj
 
-ifdef LAB
-SETTINGLAB := true
-else
--include conf/lab.mk
-endif
-
--include conf/env.mk
-
-ifndef SOL
-SOL := 0
-endif
-ifndef LABADJUST
-LABADJUST := 0
-endif
-
-ifndef LABSETUP
-LABSETUP := ./
-endif
-
-
-TOP = .
+TOP_DIR := .
+INCLUDE_DIR := $(TOP_DIR)/include
+UNAME=$(shell uname -m)
+V = @
 
-# Cross-compiler jos toolchain
+# Cross-compiler ros toolchain
 #
 # This Makefile will automatically use the cross-compiler toolchain
-# installed as 'i386-jos-elf-*', if one exists.  If the host tools ('gcc',
+# installed as 'i386-ros-elf-*', if one exists.  If the host tools ('gcc',
 # 'objdump', and so forth) compile for a 32-bit x86 ELF target, that will
 # be detected as well.  If you have the right compiler toolchain installed
 # using a different name, set GCCPREFIX explicitly in conf/env.mk
 
 # try to infer the correct GCCPREFIX
 ifndef GCCPREFIX
-GCCPREFIX := $(shell if i386-jos-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \
-       then echo 'i386-jos-elf-'; \
+GCCPREFIX := $(shell if i386-ros-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \
+       then echo 'i386-ros-elf-'; \
        elif objdump -i 2>&1 | grep 'elf32-i386' >/dev/null 2>&1; \
        then echo ''; \
        else echo "***" 1>&2; \
        echo "*** Error: Couldn't find an i386-*-elf version of GCC/binutils." 1>&2; \
-       echo "*** Is the directory with i386-jos-elf-gcc in your PATH?" 1>&2; \
+       echo "*** Is the directory with i386-ros-elf-gcc in your PATH?" 1>&2; \
        echo "*** If your i386-*-elf toolchain is installed with a command" 1>&2; \
-       echo "*** prefix other than 'i386-jos-elf-', set your GCCPREFIX" 1>&2; \
+       echo "*** prefix other than 'i386-ros-elf-', set your GCCPREFIX" 1>&2; \
        echo "*** environment variable to that prefix and run 'make' again." 1>&2; \
        echo "*** To turn off this error, run 'gmake GCCPREFIX= ...'." 1>&2; \
        echo "***" 1>&2; exit 1; fi)
 endif
 
-CC     := $(GCCPREFIX)gcc -pipe
-GCC_LIB := $(shell $(CC) -print-libgcc-file-name)
-AS     := $(GCCPREFIX)as
-AR     := $(GCCPREFIX)ar
-LD     := $(GCCPREFIX)ld
+# Default programs for compilation
+CC         := $(GCCPREFIX)ivycc --deputy
+AS         := $(GCCPREFIX)as
+AR         := $(GCCPREFIX)ar
+LD         := $(GCCPREFIX)ld
 OBJCOPY        := $(GCCPREFIX)objcopy
 OBJDUMP        := $(GCCPREFIX)objdump
-NM     := $(GCCPREFIX)nm
-ARCH ?= NONE
+NM         := $(GCCPREFIX)nm
+PERL    := perl
 
-# Native commands
-NCC    := gcc $(CC_VER) -pipe
-TAR    := gtar
-PERL   := perl
+# User defined constants passed on the command line 
+ARCH ?= NONE
 
-# Compiler flags
+# Universal compiler flags
 # -fno-builtin is required to avoid refs to undefined functions in the kernel.
 # Only optimize to -O1 to discourage inlining, which complicates backtraces.
-CFLAGS := $(CFLAGS) $(DEFS) $(LABDEFS) -D$(ARCH) -O -fno-builtin -fno-stack-protector -I$(TOP) -MD -Wall -Wno-format -Wno-unused -gstabs #-save-temps
+CFLAGS := $(CFLAGS) -D$(ARCH) 
+CFLAGS += -O -pipe -MD -fno-builtin -fno-stack-protector -gstabs
+CFLAGS += -Wall -Wno-format -Wno-unused
 
-# 64 Bit machines need these settings to compile and link
-UNAME=$(shell uname -m)
+# Universal loader flags
+LDFLAGS := -nostdlib
+
+# GCC Library path 
+GCC_LIB := $(shell $(CC) -print-libgcc-file-name)
+
+# 64 Bit specific flags / definitions
 ifeq ($(UNAME),x86_64)
-       LD += -melf_i386
        CFLAGS += -m32
+       LDFLAGS += -melf_i386
        GCC_LIB = $(shell $(CC) -print-libgcc-file-name | sed 's/libgcc.a/32\/libgcc.a/')
 endif
 
-# Linker flags for ROS user programs
-ULDFLAGS := -T user/user.ld
-
-# Lists that the */Makefrag makefile fragments will add to
+# List of directories that the */Makefrag makefile fragments will add to
 OBJDIRS :=
 
 # Make sure that 'all' is the first target
 all:
 
-# Eliminate default suffix rules
-.SUFFIXES:
-
-# Delete target files if there is an error (or make is interrupted)
-.DELETE_ON_ERROR:
-
-# make it so that no intermediate .o files are ever deleted
-.PRECIOUS: %.o $(OBJDIR)/boot/%.o $(OBJDIR)/kern/%.o \
-       $(OBJDIR)/lib/%.o $(OBJDIR)/fs/%.o $(OBJDIR)/user/%.o
-
-KERN_CFLAGS := $(CFLAGS) -DROS_KERNEL -gstabs
-USER_CFLAGS := $(CFLAGS) -DROS_USER -gstabs
-
-
-
-
 # Include Makefrags for subdirectories
-include boot/Makefrag
-include lib/Makefrag
-include ivylib/Makefrag
-include kern/Makefrag
 include user/Makefrag
+include kern/Makefrag
 -include Makelocal
 
+# Eliminate default suffix rules
+.SUFFIXES:
 
-IMAGES = $(OBJDIR)/kern/bochs.img
-
-# For deleting the build
-clean:
-       rm -rf $(OBJDIR)
-
-realclean: clean
-       rm -rf lab$(LAB).tar.gz bochs.out bochs.log
-
-distclean: realclean
-       rm -rf conf/gcc.mk
-
-grade: $(LABSETUP)grade.sh
-       $(V)$(MAKE) clean >/dev/null 2>/dev/null
-       $(MAKE) all
-       sh $(LABSETUP)grade.sh
-
-handin: tarball
-       turnin --submit porterde cs372h-lab$(LAB) lab$(LAB)-handin.tar.gz
-
-tarball: realclean
-       tar cf - `find . -type f | grep -v '^\.*$$' | grep -v '/CVS/' | grep -v '/\.svn/' | grep -v 'lab[0-9].*\.tar\.gz'` | gzip > lab$(LAB)-handin.tar.gz
-
-# For test runs
-run-%:
-       $(V)rm -f $(OBJDIR)/kern/init.o $(IMAGES)
-       $(V)$(MAKE) "DEFS=-DTEST=_binary_obj_user_$*_start -DTESTSIZE=_binary_obj_user_$*_size" $(IMAGES)
-       bochs -q 'display_library: nogui'
-
-xrun-%:
-       $(V)rm -f $(OBJDIR)/kern/init.o $(IMAGES)
-       $(V)$(MAKE) "DEFS=-DTEST=_binary_obj_user_$*_start -DTESTSIZE=_binary_obj_user_$*_size" $(IMAGES)
-       bochs -q
+# Delete target files if there is an error (or make is interrupted)
+.DELETE_ON_ERROR:
 
 # This magic automatically generates makefile dependencies
 # for header files included from C source files we compile,
@@ -155,12 +92,16 @@ xrun-%:
 # See 'mergedep.pl' for more information.
 $(OBJDIR)/.deps: $(foreach dir, $(OBJDIRS), $(wildcard $(OBJDIR)/$(dir)/*.d))
        @mkdir -p $(@D)
-       @$(PERL) mergedep.pl $@ $^
+       @$(PERL) scripts/mergedep.pl $@ $^
 
 -include $(OBJDIR)/.deps
 
+# For deleting the build
+clean:
+       rm -rf $(OBJDIR)
+
 always:
        @:
 
-.PHONY: all always \
-       handin tarball clean realclean clean-labsetup distclean grade labsetup
+.PHONY: all always clean
+