mirror of
				https://gitlab.com/sortix/sortix.git
				synced 2023-02-13 20:55:38 -05:00 
			
		
		
		
	Use cross compiler in build system.
This commit is contained in:
		
							parent
							
								
									81530bc58c
								
							
						
					
					
						commit
						9cf092d32e
					
				
					 13 changed files with 469 additions and 235 deletions
				
			
		
							
								
								
									
										136
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										136
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,36 +1,48 @@
 | 
			
		|||
BITS:=$(shell getconf LONG_BIT)
 | 
			
		||||
ifndef CPU
 | 
			
		||||
    ifeq ($(BITS),64)
 | 
			
		||||
        CPU:=x64
 | 
			
		||||
    else
 | 
			
		||||
        CPU:=x86
 | 
			
		||||
    endif
 | 
			
		||||
    MFLAGS:=$(MFLAGS) CPU=$(CPU)
 | 
			
		||||
endif
 | 
			
		||||
include compiler.mak
 | 
			
		||||
include version.mak
 | 
			
		||||
 | 
			
		||||
ifndef O
 | 
			
		||||
    O=-O2
 | 
			
		||||
    MFLAGS:=$(MFLAGS) 0=$(O)
 | 
			
		||||
ifneq ($(BUILD_LIBC),0)
 | 
			
		||||
  MODULES:=$(MODULES) libmaxsi
 | 
			
		||||
endif
 | 
			
		||||
ifndef BENCH
 | 
			
		||||
    BENCH:=1
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) libmaxsi
 | 
			
		||||
 | 
			
		||||
ifneq ($(BUILD_GAMES),0)
 | 
			
		||||
  MODULES:=$(MODULES) games
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(BENCH),1)
 | 
			
		||||
    EXTRAMODULES:=$(EXTRAMODULES) bench
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) games
 | 
			
		||||
 | 
			
		||||
ifneq ($(BUILD_MKINITRD),0)
 | 
			
		||||
  MODULES:=$(MODULES) mkinitrd
 | 
			
		||||
endif
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) mkinitrd
 | 
			
		||||
 | 
			
		||||
ifneq ($(BUILD_UTILS),0)
 | 
			
		||||
  MODULES:=$(MODULES) utils
 | 
			
		||||
endif
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) utils
 | 
			
		||||
 | 
			
		||||
ifneq ($(BUILD_BENCH),0)
 | 
			
		||||
  MODULES:=$(MODULES) bench
 | 
			
		||||
endif
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) bench
 | 
			
		||||
 | 
			
		||||
ifneq ($(BUILD_KERNEL),0)
 | 
			
		||||
  MODULES:=$(MODULES) sortix
 | 
			
		||||
endif
 | 
			
		||||
ALLMODULES:=$(ALLMODULES) sortix
 | 
			
		||||
 | 
			
		||||
ifndef SYSROOT
 | 
			
		||||
    SYSROOT:=$(shell pwd)/sysroot
 | 
			
		||||
    MFLAGS:=$(MFLAGS) SYSROOT=$(SYSROOT)
 | 
			
		||||
  SYSROOT:=$(shell pwd)/sysroot
 | 
			
		||||
  MFLAGS:=$(MFLAGS) SYSROOT=$(SYSROOT)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
REMOTE=192.168.2.6
 | 
			
		||||
REMOTEUSER=sortie
 | 
			
		||||
REMOTECOPYDIR:=/home/$(REMOTEUSER)/Desktop/MaxsiOS
 | 
			
		||||
MODULES=libmaxsi games mkinitrd utils $(EXTRAMODULES) sortix
 | 
			
		||||
ALLMODULES=libmaxsi games mkinitrd utils bench sortix
 | 
			
		||||
ifndef PREFIXNAME
 | 
			
		||||
  PREFIXNAME:=/
 | 
			
		||||
  MFLAGS:=$(MFLAGS) PREFIXNAME=$(PREFIXNAME)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include dirs.mak
 | 
			
		||||
 | 
			
		||||
VERSION=0.8dev
 | 
			
		||||
DEBNAME:=sortix_$(VERSION)_$(CPU)
 | 
			
		||||
DEBSRCNAME:=sortix_$(VERSION)
 | 
			
		||||
DEBDIR:=builds/$(DEBNAME)
 | 
			
		||||
| 
						 | 
				
			
			@ -39,42 +51,63 @@ DEBFILE:=builds/$(DEBNAME).deb
 | 
			
		|||
PACKAGENAME:=sortix
 | 
			
		||||
ISODIR:=builds/$(DEBNAME)-iso
 | 
			
		||||
ISOFILE:=builds/$(DEBNAME).iso
 | 
			
		||||
INITRDDIR:=initrd
 | 
			
		||||
INITRD=sortix/sortix.initrd
 | 
			
		||||
INITRD=$(INSTALLBOOTDIR)/$(HOST)/sortix.initrd
 | 
			
		||||
 | 
			
		||||
MFLAGS:=$(MFLAGS) VERSION=$(VERSION)
 | 
			
		||||
 | 
			
		||||
all: $(INITRD)
 | 
			
		||||
 | 
			
		||||
suball:
 | 
			
		||||
	(for D in $(MODULES); do ($(MAKE) all $(MFLAGS) --directory $$D && $(MAKE) install $(MFLAGS) --directory $$D) || exit $?; done)
 | 
			
		||||
.PHONY: all suball sysroot-base-headers sysroot-fsh clean distclean \
 | 
			
		||||
        everything everything-all-archs all-archs linecount install uninstall \
 | 
			
		||||
        deb debfile debsource iso run-virtualbox run-virtualbox-debug \
 | 
			
		||||
        clean-builds clean-sysroot
 | 
			
		||||
 | 
			
		||||
sysroot-base-headers:
 | 
			
		||||
	(for D in libmaxsi sortix; do ($(MAKE) install-headers $(MFLAGS) --directory $$D) || exit $?; done)
 | 
			
		||||
suball: sysroot-base-headers
 | 
			
		||||
	(for D in $(MODULES); do ($(MAKE) all $(MFLAGS) --directory $$D && $(MAKE) install $(MFLAGS) --directory $$D) || exit $$?; done)
 | 
			
		||||
 | 
			
		||||
sysroot-base-headers: sysroot-fsh
 | 
			
		||||
	(for D in libmaxsi sortix; do ($(MAKE) install-headers $(MFLAGS) --directory $$D) || exit $$?; done)
 | 
			
		||||
 | 
			
		||||
sysroot-fsh:
 | 
			
		||||
	mkdir -p "$(SYSROOT)"
 | 
			
		||||
	for DIRNAME in bin boot lib include; do (\
 | 
			
		||||
	  mkdir -p "$(SYSROOT)/$$DIRNAME" &&\
 | 
			
		||||
	  mkdir -p "$(SYSROOT)/$$DIRNAME/$(HOST)" \
 | 
			
		||||
	) || exit $$?; done;
 | 
			
		||||
	if [ ! -e "$(SYSROOT)/usr" ]; then ln -s . "$(SYSROOT)/usr"; fi
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(SYSROOT)
 | 
			
		||||
	rm -f $(INITRD)
 | 
			
		||||
	rm -f initrd/*
 | 
			
		||||
	(for D in $(ALLMODULES); do $(MAKE) clean $(MFLAGS) --directory $$D || exit $?; done)
 | 
			
		||||
	rm -f "$(INITRD)"
 | 
			
		||||
	rm -f sortix/sortix.initrd # Backwards compatibility, not needed for newer builds.
 | 
			
		||||
	rm -f initrd/* # Backwards compatibility, not needed for newer builds.
 | 
			
		||||
	(for D in $(ALLMODULES); do $(MAKE) clean $(MFLAGS) --directory $$D || exit $$?; done)
 | 
			
		||||
 | 
			
		||||
distclean: clean cleanbuilds
 | 
			
		||||
 | 
			
		||||
cleanbuilds:
 | 
			
		||||
clean-builds:
 | 
			
		||||
	rm -rf builds/
 | 
			
		||||
	rm -f sortix.iso
 | 
			
		||||
 | 
			
		||||
clean-sysroot:
 | 
			
		||||
	rm -rf "$(SYSROOT)"
 | 
			
		||||
 | 
			
		||||
distclean: clean clean-builds clean-sysroot
 | 
			
		||||
 | 
			
		||||
everything: all deb iso
 | 
			
		||||
 | 
			
		||||
everything-all-archs:
 | 
			
		||||
	$(MAKE) clean $(MFLAGS)
 | 
			
		||||
	$(MAKE) everything $(MFLAGS) CPU=x86
 | 
			
		||||
	$(MAKE) everything $(MFLAGS) HOST=i486-sortix
 | 
			
		||||
	$(MAKE) clean $(MFLAGS)
 | 
			
		||||
	$(MAKE) everything $(MFLAGS) CPU=x64
 | 
			
		||||
	$(MAKE) everything $(MFLAGS) HOST=x86_64-sortix
 | 
			
		||||
 | 
			
		||||
all-archs:
 | 
			
		||||
	$(MAKE) clean $(MFLAGS)
 | 
			
		||||
	$(MAKE) all $(MFLAGS) HOST=i486-sortix
 | 
			
		||||
	$(MAKE) clean $(MFLAGS)
 | 
			
		||||
	$(MAKE) all $(MFLAGS) HOST=x86_64-sortix
 | 
			
		||||
 | 
			
		||||
# Initializing RamDisk
 | 
			
		||||
$(INITRD): suball
 | 
			
		||||
	mkinitrd/mkinitrd initrd -o $(INITRD)
 | 
			
		||||
	mkinitrd/mkinitrd $(SYSROOT)/bin/$(HOST) -o $(INITRD)
 | 
			
		||||
 | 
			
		||||
# Statistics
 | 
			
		||||
linecount:
 | 
			
		||||
| 
						 | 
				
			
			@ -92,18 +125,6 @@ install: all
 | 
			
		|||
uninstall:
 | 
			
		||||
	rm -f /boot/sortix.bin
 | 
			
		||||
	rm -f /etc/grub.d/42_sortix
 | 
			
		||||
	update-grub
 | 
			
		||||
 | 
			
		||||
# Remote machine
 | 
			
		||||
 | 
			
		||||
install-remote: all
 | 
			
		||||
	scp -r ./ $(REMOTE):$(REMOTECOPYDIR)
 | 
			
		||||
	scp sortix/sortix.bin root@$(REMOTE):/boot
 | 
			
		||||
	scp $(INITRD) root@$(REMOTE):/boot
 | 
			
		||||
	ssh root@$(REMOTE) "init 6"
 | 
			
		||||
 | 
			
		||||
uninstall-remote:
 | 
			
		||||
	ssh root@$(REMOTE) "rm /boot/sortix.bin"
 | 
			
		||||
 | 
			
		||||
# Packaging
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +135,7 @@ debfile: all
 | 
			
		|||
	mkdir -p $(DEBDIR)
 | 
			
		||||
	mkdir -p $(DEBDIR)/boot
 | 
			
		||||
	cp sortix/sortix.bin $(DEBDIR)/boot
 | 
			
		||||
	cp sortix/sortix.initrd $(DEBDIR)/boot
 | 
			
		||||
	cp $(INITRD) $(DEBDIR)/boot
 | 
			
		||||
	expr \( `stat --printf="%s" $(DEBDIR)/boot/sortix.bin` \
 | 
			
		||||
	      + `stat --printf="%s" $(DEBDIR)/boot/sortix.initrd` \
 | 
			
		||||
	      + 1023 \) / 1024 > $(DEBDIR)/boot/deb.size
 | 
			
		||||
| 
						 | 
				
			
			@ -137,14 +158,14 @@ debsource: all
 | 
			
		|||
	rm -rf $(DEBSRCDIR)
 | 
			
		||||
	mkdir -p $(DEBSRCDIR)
 | 
			
		||||
	for D in `ls | grep -v builds | grep -v sysroot`; do cp -r $$D $(DEBSRCDIR); done
 | 
			
		||||
	(cd $(DEBSRCDIR) && make distclean)
 | 
			
		||||
	(cd $(DEBSRCDIR) && make distclean SYSROOT=$(shell pwd)/$(DEBSRCDIR)/sysroot)
 | 
			
		||||
	rm -rf $(DEBSRCDIR)/sysroot
 | 
			
		||||
	(cd builds && tar cfz $(DEBSRCNAME)-src.tar.gz $(DEBSRCNAME)-src)
 | 
			
		||||
	rm -rf $(DEBSRCDIR)
 | 
			
		||||
 | 
			
		||||
# Bootable images
 | 
			
		||||
 | 
			
		||||
iso: all debsource
 | 
			
		||||
$(ISOFILE): all debsource
 | 
			
		||||
	rm -rf $(ISODIR)
 | 
			
		||||
	mkdir -p builds
 | 
			
		||||
	mkdir -p $(ISODIR)
 | 
			
		||||
| 
						 | 
				
			
			@ -155,8 +176,10 @@ iso: all debsource
 | 
			
		|||
	grub-mkrescue -o $(ISOFILE) $(ISODIR)
 | 
			
		||||
	rm -rf $(ISODIR)
 | 
			
		||||
 | 
			
		||||
iso: $(ISOFILE)
 | 
			
		||||
 | 
			
		||||
sortix.iso: iso
 | 
			
		||||
	cp $(ISOFILE) sortix.iso
 | 
			
		||||
	cp $(ISOFILE) $@
 | 
			
		||||
 | 
			
		||||
# Virtualization
 | 
			
		||||
run-virtualbox: sortix.iso
 | 
			
		||||
| 
						 | 
				
			
			@ -165,4 +188,3 @@ run-virtualbox: sortix.iso
 | 
			
		|||
run-virtualbox-debug: sortix.iso
 | 
			
		||||
	virtualbox --debug --start-running --startvm sortix
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								bench/.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								bench/.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1 +1,3 @@
 | 
			
		|||
*.o
 | 
			
		||||
benchctxswitch
 | 
			
		||||
benchsyscall
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,29 +1,40 @@
 | 
			
		|||
# Set up variables such that we can easily cross-compile.
 | 
			
		||||
OSROOT=..
 | 
			
		||||
include ../crosscompilemakefile.mak
 | 
			
		||||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra
 | 
			
		||||
ifndef OPTLEVEL
 | 
			
		||||
  OPTLEVEL=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
INITRDDIR:=../initrd
 | 
			
		||||
LOCALBINARIES:=\
 | 
			
		||||
ifndef CXXFLAGS
 | 
			
		||||
  CXXFLAGS:=$(OPTLEVEL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARIES:=\
 | 
			
		||||
benchsyscall \
 | 
			
		||||
benchctxswitch \
 | 
			
		||||
 | 
			
		||||
BINARIES:=$(addprefix $(INITRDDIR)/,$(LOCALBINARIES))
 | 
			
		||||
all: $(BINARIES)
 | 
			
		||||
 | 
			
		||||
all: install
 | 
			
		||||
.PHONY: all install uninstall clean
 | 
			
		||||
 | 
			
		||||
install: $(LOCALBINARIES)
 | 
			
		||||
	cp $(LOCALBINARIES) $(INITRDDIR)
 | 
			
		||||
	rm -f $(LOCALBINARIES)
 | 
			
		||||
install: all
 | 
			
		||||
	mkdir -p $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
	install $(BINARIES) $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	for FILE in $(INSTALLBINDIR); do \
 | 
			
		||||
		rm -f $(INSTALLBINDIR)/$(HOST)/$$FILE; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
%: %.cpp
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -O2 -c $< -o $@.o
 | 
			
		||||
	$(LD) $(LDFLAGS) $@.o -o $@ $(LIBS)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
sh: mxsh
 | 
			
		||||
	cp $< $@
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(BINARIES) $(LOCALBINARIES) *.o
 | 
			
		||||
	rm -f $(BINARIES) *.o
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										65
									
								
								compiler.mak
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								compiler.mak
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
ifndef BITS
 | 
			
		||||
  BITS:=$(shell getconf LONG_BIT)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef HOST
 | 
			
		||||
  ifeq ($(BITS),64)
 | 
			
		||||
    HOST:=x86_64-sortix
 | 
			
		||||
  else
 | 
			
		||||
    HOST:=i486-sortix
 | 
			
		||||
  endif
 | 
			
		||||
  MFLAGS:=$(MFLAGS) HOST=$(HOST)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(HOST),i486-sortix)
 | 
			
		||||
    CPU:=x86
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(HOST),x86_64-sortix)
 | 
			
		||||
    CPU:=x64
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef BUILDCC
 | 
			
		||||
  BUILDCC:=gcc
 | 
			
		||||
endif
 | 
			
		||||
ifndef BUILDCXX
 | 
			
		||||
  BUILDCXX:=g++
 | 
			
		||||
endif
 | 
			
		||||
ifndef BUILDAR
 | 
			
		||||
  BUILDAR:=ar
 | 
			
		||||
endif
 | 
			
		||||
ifndef BUILDAS
 | 
			
		||||
  BUILDAS:=as
 | 
			
		||||
endif
 | 
			
		||||
ifndef BUILDLD
 | 
			
		||||
  BUILDAS:=ld
 | 
			
		||||
endif
 | 
			
		||||
ifndef BUILDOBJCOPY
 | 
			
		||||
  BUILDOBJCOPY:=objcopy
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef HOSTCC
 | 
			
		||||
  HOSTCC:=$(HOST)-gcc
 | 
			
		||||
endif
 | 
			
		||||
ifndef HOSTCXX
 | 
			
		||||
  HOSTCXX:=$(HOST)-g++
 | 
			
		||||
endif
 | 
			
		||||
ifndef HOSTAR
 | 
			
		||||
  HOSTAR:=$(HOST)-ar
 | 
			
		||||
endif
 | 
			
		||||
ifndef HOSTAS
 | 
			
		||||
  HOSTAS:=$(HOST)-as
 | 
			
		||||
endif
 | 
			
		||||
ifndef HOSTLD
 | 
			
		||||
  HOSTLD:=$(HOST)-ld
 | 
			
		||||
endif
 | 
			
		||||
ifndef HOSTOBJCOPY
 | 
			
		||||
  HOSTOBJCOPY:=$(HOST)-objcopy
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CC:=$(HOSTCC)
 | 
			
		||||
CXX:=$(HOSTCXX)
 | 
			
		||||
AR=:$(HOSTAR)
 | 
			
		||||
AS:=$(HOSTAS)
 | 
			
		||||
LD:=$(HOSTLD)
 | 
			
		||||
OBJCOPY:=$(HOSTOBJCOPY)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +0,0 @@
 | 
			
		|||
ifndef CPU
 | 
			
		||||
    CPU=x86
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x86)
 | 
			
		||||
	X86FAMILY=1
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X86
 | 
			
		||||
    CPUFLAGS=-m32
 | 
			
		||||
    CPULDFLAGS=-melf_i386
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x64)
 | 
			
		||||
	X86FAMILY=1
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X64
 | 
			
		||||
    CPUFLAGS=-m64
 | 
			
		||||
    CPULDFLAGS=-melf_x86_64
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LIBMAXSIROOT:=$(OSROOT)/libmaxsi
 | 
			
		||||
SORTIXROOT:=$(OSROOT)/sortix
 | 
			
		||||
 | 
			
		||||
LIBC:=$(LIBMAXSIROOT)/start.o $(LIBMAXSIROOT)/libc.a
 | 
			
		||||
LIBS:=$(LIBC)
 | 
			
		||||
 | 
			
		||||
CPPFLAGS:=$(CPUDEFINES) -U_GNU_SOURCE -Ulinux -Dsortix
 | 
			
		||||
FLAGS:=-nostdinc -nostdlib -nostartfiles -nodefaultlibs
 | 
			
		||||
INCLUDES:=-I $(LIBMAXSIROOT)/preproc -I $(SORTIXROOT)/include
 | 
			
		||||
 | 
			
		||||
LD:=ld
 | 
			
		||||
LDFLAGS:=$(CPULDFLAGS)
 | 
			
		||||
CC:=gcc
 | 
			
		||||
CFLAGS:=$(CPUFLAGS) $(FLAGS) $(INCLUDES)
 | 
			
		||||
CXX:=g++
 | 
			
		||||
CXXFLAGS:=$(CPUFLAGS) $(FLAGS) $(INCLUDES) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										119
									
								
								dirs.mak
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								dirs.mak
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,119 @@
 | 
			
		|||
ifndef SYSROOT
 | 
			
		||||
  SYSROOT:=/
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# The locations from where the program will be invoked/run on the host machine.
 | 
			
		||||
# For instance, on Sortix programs are normally run from the /bin union
 | 
			
		||||
# directory, even though they are actually installed somewhere else.
 | 
			
		||||
ifndef RUNPREFIXNAME
 | 
			
		||||
  RUNPREFIXNAME:=/
 | 
			
		||||
endif
 | 
			
		||||
RUNPREFIXNAME:=$(shell echo "$(RUNPREFIXNAME)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef RUNPREFIX
 | 
			
		||||
  RUNPREFIX:=/$(RUNPREFIXNAME)
 | 
			
		||||
endif
 | 
			
		||||
RUNPREFIX:=$(shell echo "$(RUNPREFIX)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef RUNBINDIR
 | 
			
		||||
  RUNBINDIR:=$(RUNPREFIX)/bin
 | 
			
		||||
endif
 | 
			
		||||
RUNBINDIR:=$(shell echo "$(RUNBINDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef RUNLIBDIR
 | 
			
		||||
  RUNLIBDIR:=$(RUNPREFIX)/lib
 | 
			
		||||
endif
 | 
			
		||||
RUNLIBDIR:=$(shell echo "$(RUNLIBDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef RUNINCLUDEDIR
 | 
			
		||||
  RUNINCLUDEDIR:=$(RUNPREFIX)/include
 | 
			
		||||
endif
 | 
			
		||||
RUNINCLUDEDIR:=$(shell echo "$(RUNINCLUDEDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef RUNBOOTDIR
 | 
			
		||||
  RUNBOOTDIR:=$(RUNPREFIX)/boot
 | 
			
		||||
endif
 | 
			
		||||
RUNBOOTDIR:=$(shell echo "$(RUNBOOTDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
# Where the program will be really installed on the host machine. For instance,
 | 
			
		||||
# on Sortix programs are run from the /bin union directory, but they are
 | 
			
		||||
# installed somewhere else, these variables tells where. Note that programs must
 | 
			
		||||
# not depend on being installed here, they should detect the proper directories
 | 
			
		||||
# at (preferably) runtime, or during the install configuration step when
 | 
			
		||||
# installed through package management.
 | 
			
		||||
ifndef PREFIXNAME
 | 
			
		||||
  PREFIXNAME:=/data/local
 | 
			
		||||
endif
 | 
			
		||||
PREFIXNAME:=$(shell echo "$(PREFIXNAME)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef PREFIX
 | 
			
		||||
  PREFIX:=$(SYSROOT)/$(PREFIXNAME)
 | 
			
		||||
endif
 | 
			
		||||
PREFIX:=$(shell echo "$(PREFIX)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef BINDIR
 | 
			
		||||
  BINDIR:=$(PREFIX)/bin
 | 
			
		||||
endif
 | 
			
		||||
BINDIR:=$(shell echo "$(BINDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef LIBDIR
 | 
			
		||||
  LIBDIR:=$(PREFIX)/lib
 | 
			
		||||
endif
 | 
			
		||||
LIBDIR:=$(shell echo "$(LIBDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef INCLUDEDIR
 | 
			
		||||
  INCLUDEDIR:=$(PREFIX)/include
 | 
			
		||||
endif
 | 
			
		||||
INCLUDEDIR:=$(shell echo "$(INCLUDEDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef BOOTDIR
 | 
			
		||||
  BOOTDIR:=$(PREFIX)/boot
 | 
			
		||||
endif
 | 
			
		||||
BOOTDIR:=$(shell echo "$(BOOTDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
# Where the program will be installed on the build machine. This is mostly
 | 
			
		||||
# useful if cross compiling or producing a software distribution image. By
 | 
			
		||||
# default programs will be installed in the same location as the host machine.
 | 
			
		||||
ifdef INSTALLPREFIX
 | 
			
		||||
  INSTALLPREFIX_WAS_SPECIFIED=1
 | 
			
		||||
endif
 | 
			
		||||
ifndef INSTALLPREFIX
 | 
			
		||||
    INSTALLPREFIX:=$(PREFIX)
 | 
			
		||||
endif
 | 
			
		||||
INSTALLPREFIX:=$(shell echo "$(INSTALLPREFIX)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef INSTALLBINDIR
 | 
			
		||||
  ifdef INSTALLPREFIX_WAS_SPECIFIED
 | 
			
		||||
    INSTALLBINDIR:=$(INSTALLPREFIX)/bin
 | 
			
		||||
  else
 | 
			
		||||
    INSTALLBINDIR:=$(BINDIR)
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
INSTALLBINDIR:=$(shell echo "$(INSTALLBINDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef INSTALLLIBDIR
 | 
			
		||||
  ifdef INSTALLPREFIX_WAS_SPECIFIED
 | 
			
		||||
    INSTALLLIBDIR:=$(INSTALLPREFIX)/lib
 | 
			
		||||
  else
 | 
			
		||||
    INSTALLLIBDIR:=$(LIBDIR)
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
INSTALLLIBDIR:=$(shell echo "$(INSTALLLIBDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef INSTALLINCLUDEDIR
 | 
			
		||||
  ifdef INSTALLPREFIX_WAS_SPECIFIED
 | 
			
		||||
    INSTALLINCLUDEDIR:=$(INSTALLPREFIX)/include
 | 
			
		||||
  else
 | 
			
		||||
    INSTALLINCLUDEDIR:=$(INCLUDEDIR)
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
INSTALLINCLUDEDIR:=$(shell echo "$(INSTALLINCLUDEDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
 | 
			
		||||
ifndef INSTALLBOOTDIR
 | 
			
		||||
  ifdef INSTALLPREFIX_WAS_SPECIFIED
 | 
			
		||||
    INSTALLBOOTDIR:=$(INSTALLPREFIX)/boot
 | 
			
		||||
  else
 | 
			
		||||
    INSTALLBOOTDIR:=$(BOOTDIR)
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
INSTALLBOOTDIR:=$(shell echo "$(INSTALLBOOTDIR)" | sed 's/\/\/*/\//g')
 | 
			
		||||
							
								
								
									
										2
									
								
								games/.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								games/.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -6,3 +6,5 @@
 | 
			
		|||
*.a
 | 
			
		||||
pong
 | 
			
		||||
conway
 | 
			
		||||
snake
 | 
			
		||||
asteroids
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,31 +1,42 @@
 | 
			
		|||
# Set up variables such that we can easily cross-compile.
 | 
			
		||||
OSROOT=..
 | 
			
		||||
include ../crosscompilemakefile.mak
 | 
			
		||||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra
 | 
			
		||||
ifndef OPTLEVEL
 | 
			
		||||
  OPTLEVEL=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
INITRDDIR:=../initrd
 | 
			
		||||
LOCALBINARIES:=\
 | 
			
		||||
ifndef CXXFLAGS
 | 
			
		||||
  CXXFLAGS:=$(OPTLEVEL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARIES:=\
 | 
			
		||||
pong \
 | 
			
		||||
conway \
 | 
			
		||||
snake \
 | 
			
		||||
asteroids \
 | 
			
		||||
 | 
			
		||||
BINARIES:=$(addprefix $(INITRDDIR)/,$(LOCALBINARIES))
 | 
			
		||||
all: $(BINARIES)
 | 
			
		||||
 | 
			
		||||
all: install
 | 
			
		||||
.PHONY: all install uninstall clean
 | 
			
		||||
 | 
			
		||||
install: $(LOCALBINARIES)
 | 
			
		||||
	cp $(LOCALBINARIES) $(INITRDDIR)
 | 
			
		||||
	rm -f $(LOCALBINARIES)
 | 
			
		||||
install: all
 | 
			
		||||
	mkdir -p $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
	install $(BINARIES) $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	for FILE in $(INSTALLBINDIR); do \
 | 
			
		||||
		rm -f $(INSTALLBINDIR)/$(HOST)/$$FILE; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
%: %.cpp
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -O2 -c $< -o $@.o
 | 
			
		||||
	$(LD) $(LDFLAGS) $@.o -o $@ $(LIBS)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
sh: mxsh
 | 
			
		||||
	cp $< $@
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(BINARIES) $(LOCALBINARIES) *.o
 | 
			
		||||
	rm -f $(BINARIES) *.o
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,29 +1,32 @@
 | 
			
		|||
ifndef CPU
 | 
			
		||||
    CPU=x86
 | 
			
		||||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
ifndef OPTLEVEL
 | 
			
		||||
    OPTLEVEL:=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x86)
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X86
 | 
			
		||||
    CPUFLAGS=-m32
 | 
			
		||||
    CPULDFLAGS=-melf_i386
 | 
			
		||||
    CPUASFLAGS=-32
 | 
			
		||||
ifeq ($(DEBUG_LIBC),1)
 | 
			
		||||
    FLAGSDEBUG=-g3
 | 
			
		||||
else
 | 
			
		||||
    FLAGSDEBUG=$(OPTLEVEL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x64)
 | 
			
		||||
    CPU=x64
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X64
 | 
			
		||||
    CPUFLAGS=-fPIC -m64 -mno-red-zone
 | 
			
		||||
    CPULDFLAGS=-melf_x86_64
 | 
			
		||||
    CPUASFLAGS=-64
 | 
			
		||||
CPUDIR:=$(CPU)
 | 
			
		||||
 | 
			
		||||
ifeq ($(HOST),i486-sortix)
 | 
			
		||||
    CPUFLAGS=
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CPPINCLUDES=-I preproc -I ../sortix/include
 | 
			
		||||
CPPFLAGS=-DLIBMAXSI_LIBRARY -DSORTIX -U_GNU_SOURCE $(CPUDEFINES) $(CPPINCLUDES)
 | 
			
		||||
FLAGS=$(CPUFLAGS) -Wall -Wextra -nostdlib -fno-builtin -nostartfiles \
 | 
			
		||||
                  -nodefaultlibs -fno-stack-protector -nostdinc
 | 
			
		||||
ifeq ($(HOST),x86_64-sortix)
 | 
			
		||||
    CPUFLAGS=-fPIC -mno-red-zone
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CPPINCLUDES=-I preproc
 | 
			
		||||
CPPFLAGS=-DLIBMAXSI_LIBRARY -U_GNU_SOURCE $(CPUDEFINES) $(CPPINCLUDES)
 | 
			
		||||
FLAGS=$(CPUFLAGS) -Wall -Wextra -fno-stack-protector $(FLAGSDEBUG)
 | 
			
		||||
CFLAGS=$(FLAGS) -std=c99
 | 
			
		||||
CXXFLAGS=$(FLAGS) -std=gnu++0x -fno-exceptions -nostdinc++ -fno-rtti
 | 
			
		||||
LDFLAGS=$(CPULDFLAGS)
 | 
			
		||||
CXXFLAGS=$(FLAGS) -std=gnu++0x -fno-exceptions -fno-rtti
 | 
			
		||||
ASFLAGS=$(CPUASFLAGS)
 | 
			
		||||
 | 
			
		||||
OBJS=\
 | 
			
		||||
| 
						 | 
				
			
			@ -48,8 +51,8 @@ isatty.o \
 | 
			
		|||
kernelinfo.o \
 | 
			
		||||
init.o \
 | 
			
		||||
signal.o \
 | 
			
		||||
$(CPU)/signal.o \
 | 
			
		||||
$(CPU)/fork.o \
 | 
			
		||||
$(CPUDIR)/signal.o \
 | 
			
		||||
$(CPUDIR)/fork.o \
 | 
			
		||||
time.o \
 | 
			
		||||
random.o \
 | 
			
		||||
abs.o \
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +191,7 @@ crc32.o \
 | 
			
		|||
SORTIXOBJS:=$(addprefix sortix/,$(SORTIXOBJS))
 | 
			
		||||
SORTIXCPPFLAGS:=-DSORTIX_KERNEL
 | 
			
		||||
 | 
			
		||||
BINS=libc.a libg.a libmaxsi.a libmaxsi-sortix.a $(CRTOBJ)
 | 
			
		||||
BINS=libc.a libg.a libm.a libstdc++.a libmaxsi.a libmaxsi-sortix.a $(CRTOBJ)
 | 
			
		||||
 | 
			
		||||
all: $(BINS)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -196,36 +199,33 @@ all: $(BINS)
 | 
			
		|||
        install-lib-dirs install-libs
 | 
			
		||||
 | 
			
		||||
libmaxsi.a: $(OBJS)
 | 
			
		||||
	ar rcs libmaxsi.a $(OBJS)
 | 
			
		||||
 | 
			
		||||
libmaxsi.so: $(OBJS)
 | 
			
		||||
	ld $(LDFLAGS) -shared -o $@ $(OBJS)
 | 
			
		||||
	$(HOSTAR) rcs libmaxsi.a $(OBJS)
 | 
			
		||||
 | 
			
		||||
libmaxsi-sortix.a: $(SORTIXOBJS)
 | 
			
		||||
	ar rcs libmaxsi-sortix.a $(SORTIXOBJS)
 | 
			
		||||
	$(HOSTAR) 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 $< $@
 | 
			
		||||
libm.a:
 | 
			
		||||
	$(HOSTAR) rcs $@
 | 
			
		||||
 | 
			
		||||
start.o: $(CPU)/start.o
 | 
			
		||||
libstdc++.a:
 | 
			
		||||
	$(HOSTAR) rcs $@
 | 
			
		||||
 | 
			
		||||
start.o: $(CPUDIR)/start.o
 | 
			
		||||
	ln -f $< $@
 | 
			
		||||
 | 
			
		||||
crt1.o: $(CPU)/crt1.o
 | 
			
		||||
crt1.o: $(CPUDIR)/crt1.o
 | 
			
		||||
	ln -f $< $@
 | 
			
		||||
 | 
			
		||||
crti.o: $(CPU)/crti.o
 | 
			
		||||
crti.o: $(CPUDIR)/crti.o
 | 
			
		||||
	ln -f $< $@
 | 
			
		||||
 | 
			
		||||
crtn.o: $(CPU)/crtn.o
 | 
			
		||||
crtn.o: $(CPUDIR)/crtn.o
 | 
			
		||||
	ln -f $< $@
 | 
			
		||||
 | 
			
		||||
# header preprocessing
 | 
			
		||||
| 
						 | 
				
			
			@ -239,20 +239,20 @@ headers: $(HEADERDIRS) $(HEADERS)
 | 
			
		|||
 | 
			
		||||
# standard library
 | 
			
		||||
%.o: %.c headers
 | 
			
		||||
	gcc -c $< -o $@ $(CPPFLAGS) $(CFLAGS)
 | 
			
		||||
	$(HOSTCC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
%.o: %.cpp headers
 | 
			
		||||
	g++ -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
	$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
 | 
			
		||||
%.o: %.s
 | 
			
		||||
	as $(ASFLAGS) $< -o $@
 | 
			
		||||
	$(HOSTAS) $(ASFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
# libmaxsi-sortix
 | 
			
		||||
sortix:
 | 
			
		||||
	mkdir -p sortix
 | 
			
		||||
 | 
			
		||||
sortix/%.o: %.cpp $(HEADERS) sortix
 | 
			
		||||
	g++ -c $< -o $@ $(CPPFLAGS) $(SORTIXCPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
	$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(SORTIXCPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o sortix/*.o c/*.o x86/*.o x64/*.o *.a *.so
 | 
			
		||||
| 
						 | 
				
			
			@ -263,19 +263,26 @@ clean:
 | 
			
		|||
install: install-headers install-libs
 | 
			
		||||
 | 
			
		||||
install-include-dirs: headers
 | 
			
		||||
	mkdir -p $(SYSROOT)/usr/include
 | 
			
		||||
	for D in $(UNPROCHEADERDIRS); do mkdir -p $(SYSROOT)/usr/$$D || exit $?; done
 | 
			
		||||
	mkdir -p $(INSTALLINCLUDEDIR)
 | 
			
		||||
	DIRS=$$(echo $(UNPROCHEADERDIRS) | \
 | 
			
		||||
	        tr ' ' '\n' | \
 | 
			
		||||
	        sed 's/include\/*//'); \
 | 
			
		||||
	for D in $$DIRS; do \
 | 
			
		||||
	  mkdir -p $(INSTALLINCLUDEDIR)/$$D || exit $?; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install-headers: install-include-dirs headers
 | 
			
		||||
	for SRC in $(HEADERS); do DEST=`echo $$SRC | sed 's/preproc/include/'`; cp $$SRC $(SYSROOT)/usr/$$DEST || exit $?; done
 | 
			
		||||
	for SRC in $(HEADERS); do \
 | 
			
		||||
	  DEST=`echo $$SRC | sed 's/preproc\///'`; \
 | 
			
		||||
	  cp -P $$SRC $(INSTALLINCLUDEDIR)/$$DEST || exit $?; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install-lib-dirs: all
 | 
			
		||||
	mkdir -p $(SYSROOT)/usr/lib
 | 
			
		||||
install-lib-dirs:
 | 
			
		||||
	mkdir -p $(INSTALLLIBDIR)
 | 
			
		||||
	mkdir -p $(INSTALLLIBDIR)/$(HOST)
 | 
			
		||||
 | 
			
		||||
install-libs: install-lib-dirs all
 | 
			
		||||
	for F in $(BINS); do cp -P $$F $(SYSROOT)/usr/lib || exit $?; done
 | 
			
		||||
	touch deleteme.cpp
 | 
			
		||||
	g++ $(CPUFLAGS) -c deleteme.cpp -o deleteme.o
 | 
			
		||||
	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
 | 
			
		||||
install-libs: install-lib-dirs
 | 
			
		||||
	for F in $(BINS); do \
 | 
			
		||||
	  cp -P $$F $(INSTALLLIBDIR)/$(HOST) || exit $?; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,31 +1,27 @@
 | 
			
		|||
ifndef O
 | 
			
		||||
    O:=-O3
 | 
			
		||||
endif
 | 
			
		||||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
ifndef CPU
 | 
			
		||||
    CPU=x86
 | 
			
		||||
ifndef OPTLEVEL
 | 
			
		||||
    OPTLEVEL:=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x86)
 | 
			
		||||
    BUILDID=x86
 | 
			
		||||
    X86FAMILY=1
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X86
 | 
			
		||||
    CPUFLAGS=-m32
 | 
			
		||||
    CPULDFLAGS=-melf_i386
 | 
			
		||||
    CPUASFLAGS=-32
 | 
			
		||||
    CPUFLAGS=
 | 
			
		||||
    CPULDFLAGS=
 | 
			
		||||
    CPUNASMFLAGS=-felf32
 | 
			
		||||
    CPUOBJS=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o
 | 
			
		||||
    CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CPU),x64)
 | 
			
		||||
    BUILDID=x64
 | 
			
		||||
    X86FAMILY=1
 | 
			
		||||
    CPUDEFINES=-DPLATFORM_X64
 | 
			
		||||
    CPUFLAGS=-m64 -ffreestanding -mno-red-zone
 | 
			
		||||
    CPULDFLAGS=-melf64-little -z max-page-size=0x1000
 | 
			
		||||
    CPUASFLAGS=-64
 | 
			
		||||
    CPUFLAGS=-ffreestanding -mno-red-zone
 | 
			
		||||
    CPULDFLAGS=-z max-page-size=0x1000
 | 
			
		||||
    CPUNASMFLAGS=-felf64
 | 
			
		||||
    CPUOBJS=$(CPU)/base.o $(CPU)/x64.o
 | 
			
		||||
    CPUOBJS:=$(CPU)/base.o $(CPU)/x64.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifdef X86FAMILY
 | 
			
		||||
| 
						 | 
				
			
			@ -49,11 +45,7 @@ endif
 | 
			
		|||
 | 
			
		||||
DIRS=. x64 x86 x86-family fs kb kb/layout
 | 
			
		||||
 | 
			
		||||
DEFINES:=-DSORTIX_KERNEL -U_GNU_SOURCE $(CPUDEFINES)
 | 
			
		||||
ifeq ($(JSSORTIX),1)
 | 
			
		||||
    DEFINES:=$(DEFINES) -DPLATFORM_SERIAL -DJSSORTIX
 | 
			
		||||
    BUILDID:=$(BUILDID)-js
 | 
			
		||||
endif
 | 
			
		||||
DEFINES:=-DSORTIX_KERNEL -U_GNU_SOURCE
 | 
			
		||||
ifeq ($(PANIC_SHORT),1)
 | 
			
		||||
    DEFINES:=$(DEFINES) -DPANIC_SHORT
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -71,22 +63,22 @@ ifdef VERSION
 | 
			
		|||
    DEFINES:=$(DEFINES) -DVERSIONSTR=\"$(VERSION)\"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
INCLUDES=-I. -Iinclude -I../libmaxsi/preproc
 | 
			
		||||
INCLUDES=-I. -Iinclude
 | 
			
		||||
CPPFLAGS=$(INCLUDES) $(DEFINES)
 | 
			
		||||
ifeq ($(DEBUG_KERNEL),1)
 | 
			
		||||
    FLAGSDEBUG=-g3
 | 
			
		||||
else
 | 
			
		||||
    FLAGSDEBUG=-s $(O)
 | 
			
		||||
    FLAGSDEBUG=$(OPTLEVEL)
 | 
			
		||||
endif
 | 
			
		||||
FLAGS=$(CPUFLAGS) -Wall  -Wall -Wextra -nostdlib -fno-builtin -nostartfiles \
 | 
			
		||||
FLAGS=$(CPUFLAGS) -Wall  -Wall -Wextra -nostdlib -nostartfiles \
 | 
			
		||||
      -nodefaultlibs -fno-stack-protector $(FLAGSDEBUG)
 | 
			
		||||
CFLAGS=$(FLAGS)
 | 
			
		||||
CXXFLAGS=$(FLAGS) -std=gnu++0x -fno-exceptions -fno-rtti
 | 
			
		||||
ASFLAGS=$(CPUASFLAGS)
 | 
			
		||||
ASFLAGS=
 | 
			
		||||
NASMFLAGS=$(CPUNASMFLAGS)
 | 
			
		||||
 | 
			
		||||
STATICLIBS=\
 | 
			
		||||
../libmaxsi/libmaxsi-sortix.a \
 | 
			
		||||
-lmaxsi-sortix \
 | 
			
		||||
 | 
			
		||||
HEADERDIRS:=$(shell find include -type d)
 | 
			
		||||
HEADERS:=$(shell find include -type f)
 | 
			
		||||
| 
						 | 
				
			
			@ -146,10 +138,10 @@ fs/initfs.o \
 | 
			
		|||
fs/ramfs.o \
 | 
			
		||||
fs/videofs.o \
 | 
			
		||||
ata.o \
 | 
			
		||||
$(STATICLIBS) \
 | 
			
		||||
end.o # Must be last, determines kernel size.
 | 
			
		||||
 | 
			
		||||
JSOBJS:=$(subst .o,-js.o,$(OBJS))
 | 
			
		||||
ALLOBJS=\
 | 
			
		||||
$(OBJS) \
 | 
			
		||||
end.o
 | 
			
		||||
 | 
			
		||||
all: sortix.bin
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,26 +149,18 @@ all: sortix.bin
 | 
			
		|||
 | 
			
		||||
headers:
 | 
			
		||||
 | 
			
		||||
# jssortix compilation
 | 
			
		||||
 | 
			
		||||
jssortix: jssortix.bin
 | 
			
		||||
 | 
			
		||||
sortix-x86-js.tmp: $(OBJS)
 | 
			
		||||
	ld -melf_i386 -Ttext 100000 -o sortix-x86-js-internal.out $(OBJS)
 | 
			
		||||
	objcopy -O binary sortix-x86-js-internal.out $@
 | 
			
		||||
 | 
			
		||||
# x64 compilation
 | 
			
		||||
x64/boot.o: x64/boot.s
 | 
			
		||||
	as -64 $< -o $@
 | 
			
		||||
	$(HOSTAS) -64 $< -o $@
 | 
			
		||||
 | 
			
		||||
sortix-x64.tmp: $(OBJS) x64/boot.o
 | 
			
		||||
	ld -N -melf_x86_64 -Ttext 100000 -o sortix-x64-internal.out x64/boot.o $(OBJS)
 | 
			
		||||
	objcopy sortix-x64-internal.out -O elf32-i386 sortix-x64.tmp
 | 
			
		||||
sortix-x64.tmp: $(ALLOBJS) x64/boot.o
 | 
			
		||||
	$(HOSTLD) -N -melf_x86_64_sortix -Ttext 100000 -o sortix-x64-internal.out x64/boot.o $(OBJS) $(STATICLIBS) end.o
 | 
			
		||||
	$(HOSTOBJCOPY) sortix-x64-internal.out -O elf32-i386 sortix-x64.tmp
 | 
			
		||||
 | 
			
		||||
# x86 compilation
 | 
			
		||||
 | 
			
		||||
sortix-x86.tmp: $(OBJS)
 | 
			
		||||
	ld -melf_i386 -Ttext 100000 -o $@ $(OBJS)
 | 
			
		||||
sortix-x86.tmp: $(ALLOBJS)
 | 
			
		||||
	$(HOSTLD) -melf_i386_sortix -Ttext 100000 -o $@ $(OBJS) $(STATICLIBS) end.o
 | 
			
		||||
 | 
			
		||||
# general rules
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,10 +168,10 @@ sortix.bin: sortix-$(BUILDID).tmp
 | 
			
		|||
	cp -vu $< $@
 | 
			
		||||
 | 
			
		||||
%.o: %.cpp
 | 
			
		||||
	g++ -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
	$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
 | 
			
		||||
 | 
			
		||||
%.o: %.s
 | 
			
		||||
	as $(ASFLAGS) $< -o $@
 | 
			
		||||
	$(HOSTAS) $< -o $@ $(ASFLAGS)
 | 
			
		||||
 | 
			
		||||
%.o: %.asm
 | 
			
		||||
	nasm $(NASMFLAGS) $< -o $@
 | 
			
		||||
| 
						 | 
				
			
			@ -196,15 +180,26 @@ clean:
 | 
			
		|||
	for D in $(DIRS); do rm -f $$D/*.o $$D/*.bin $$D/*.out $$D/*.tmp; done
 | 
			
		||||
 | 
			
		||||
# Installation into sysroot
 | 
			
		||||
install: install-headers
 | 
			
		||||
install: install-headers install-kernel
 | 
			
		||||
 | 
			
		||||
install-include-dirs: headers
 | 
			
		||||
	for DIR in $(HEADERDIRS); do \
 | 
			
		||||
		mkdir -p $(SYSROOT)/usr/$$DIR; \
 | 
			
		||||
	mkdir -p $(INSTALLINCLUDEDIR)
 | 
			
		||||
	DIRS=$$(echo $(HEADERDIRS) | \
 | 
			
		||||
	        tr ' ' '\n' | \
 | 
			
		||||
	        sed 's/include\/*//'); \
 | 
			
		||||
	for D in $$DIRS; do \
 | 
			
		||||
	  mkdir -p $(INSTALLINCLUDEDIR)/$$D || exit $?; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install-headers: install-include-dirs headers
 | 
			
		||||
	for FILE in $(HEADERS); do \
 | 
			
		||||
		cp $$FILE $(SYSROOT)/usr/$$FILE; \
 | 
			
		||||
	for SRC in $(HEADERS); do \
 | 
			
		||||
	  DEST=`echo $$SRC | sed 's/include\///'`; \
 | 
			
		||||
	  cp -P $$SRC $(INSTALLINCLUDEDIR)/$$DEST || exit $?; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install-kernel: install-kernel-binary
 | 
			
		||||
 | 
			
		||||
install-kernel-binary:
 | 
			
		||||
	mkdir -p $(INSTALLBOOTDIR)/$(HOST)
 | 
			
		||||
	cp -P sortix.bin $(INSTALLBOOTDIR)/$(HOST)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								utils/.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								utils/.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1 +1,25 @@
 | 
			
		|||
*.o
 | 
			
		||||
init
 | 
			
		||||
calc
 | 
			
		||||
cat
 | 
			
		||||
cp
 | 
			
		||||
echo
 | 
			
		||||
rm
 | 
			
		||||
sh
 | 
			
		||||
mxsh
 | 
			
		||||
clear
 | 
			
		||||
ls
 | 
			
		||||
pwd
 | 
			
		||||
help
 | 
			
		||||
uptime
 | 
			
		||||
memstat
 | 
			
		||||
chvideomode
 | 
			
		||||
uname
 | 
			
		||||
kernelinfo
 | 
			
		||||
editor
 | 
			
		||||
kill
 | 
			
		||||
column
 | 
			
		||||
pager
 | 
			
		||||
head
 | 
			
		||||
tail
 | 
			
		||||
type
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,18 @@
 | 
			
		|||
# Set up variables such that we can easily cross-compile.
 | 
			
		||||
OSROOT=..
 | 
			
		||||
include ../crosscompilemakefile.mak
 | 
			
		||||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra
 | 
			
		||||
ifndef OPTLEVEL
 | 
			
		||||
  OPTLEVEL=-O2
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
INITRDDIR:=../initrd
 | 
			
		||||
LOCALBINARIES:=\
 | 
			
		||||
ifndef CXXFLAGS
 | 
			
		||||
  CXXFLAGS:=$(OPTLEVEL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
BINARIES:=\
 | 
			
		||||
init \
 | 
			
		||||
calc \
 | 
			
		||||
cat \
 | 
			
		||||
| 
						 | 
				
			
			@ -31,21 +38,25 @@ head \
 | 
			
		|||
tail \
 | 
			
		||||
type \
 | 
			
		||||
 | 
			
		||||
BINARIES:=$(addprefix $(INITRDDIR)/,$(LOCALBINARIES))
 | 
			
		||||
all: $(BINARIES)
 | 
			
		||||
 | 
			
		||||
all: install
 | 
			
		||||
.PHONY: all install uninstall clean
 | 
			
		||||
 | 
			
		||||
install: $(LOCALBINARIES)
 | 
			
		||||
	cp $(LOCALBINARIES) $(INITRDDIR)
 | 
			
		||||
	rm -f $(LOCALBINARIES)
 | 
			
		||||
install: all
 | 
			
		||||
	mkdir -p $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
	install $(BINARIES) $(INSTALLBINDIR)/$(HOST)
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	for FILE in $(INSTALLBINDIR); do \
 | 
			
		||||
		rm -f $(INSTALLBINDIR)/$(HOST)/$$FILE; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
%: %.cpp
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -O2 -c $< -o $@.o
 | 
			
		||||
	$(LD) $(LDFLAGS) $@.o -o $@ $(LIBS)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $< -o $@
 | 
			
		||||
 | 
			
		||||
sh: mxsh
 | 
			
		||||
	cp $< $@
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(BINARIES) $(LOCALBINARIES) *.o
 | 
			
		||||
	rm -f $(BINARIES) *.o
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								version.mak
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								version.mak
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
VERSION=0.8dev
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue