--- /dev/null
+AFLAGS=-felf64
+AS=yasm $(AFLAGS)
+CFLAGS= -ffreestanding -mno-red-zone -mcmodel=large
+CFLAGS= -Wall -Iinclude -Ipci -Iklib -I. -std=c99 -nostdlibinc -Wno-parentheses -ffreestanding -mcmodel=large -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -fomit-frame-pointer
+LDFLAGS= -L. -Tlink64.ld
+CFLAGS32= -ffreestanding -mno-red-zone -mno-mmx -mno-sse -mno-sse2
+OS=$(shell uname -s)
+
+DIS= objdump -M intel -d
+
+LIBSRC=$(wildcard klib/*.c)
+#LIBOBJS:=$(addsuffix .o,$(basename, $(wildcard klib/*.c)))
+LIBOBJS:=$(addsuffix .o, $(basename $(wildcard klib/*.c)))
+#LIBOBJS:=$(addprefix klib/, $(LIBOBJS))
+
+#PATH:=/home/nw/src/kernel/cc/sysroot/bin:$(PATH)
+#export PATH
+
+CC=clang -target amd64-elf-zos
+LD=ld
+OBJCOPY=objcopy
+
+ifeq ($(OS),Darwin)
+# CC=/opt/local/libexec/llvm-3.9/bin/clang
+ LD=x86_64-elf-ld
+ AR=x86_64-elf-ar
+ OBJCOPY=x86_64-elf-objcopy
+endif
+
+zos: zos64
+ $(OBJCOPY) $< -O elf32-i386 $@
+
+usermode.o: usermode.c
+ $(CC) $(CFLAGS) -fpic -c -o $@ $<
+
+include/errno.h: include/errno.in tools/mkerrno
+ tools/mkerrno $< > $@
+
+libklib.a: CFLAGS+=-D_PDCLIB_restrict=restrict
+libklib.a: $(LIBOBJS)
+ $(AR) rcu $@ $(LIBOBJS)
+
+vfs/vfs.o: vfs/vfs.c vfs/vfs.h | include/errno.h
+vfs/pipes.o: vfs/pipes.c vfs/vfs.h | include/errno.h
+
+libvfs.a: vfs/pipes.o vfs/vfs.o
+ $(AR) rcu $@ $+
+
+pci/func.o: pci/func.c
+
+libpci.a: pci/pci.o pci/func.o
+ $(AR) rcu $@ $+
+
+pic.o: pic.h interrupt.h
+
+zos64: libklib.a
+zos64: link64.ld
+
+KOBJS= boot32.o bootz.o kernel.o interrupt.o idt.o \
+ pic.o ioport.o timer.o tty.o mem.o \
+ memx64.o spinlock.o process.o taskx64.o kbd.o \
+ cpu.o syscalls.o smp.o \
+ usermain.o
+KLIBS=libpci.a libklib.a
+
+zos64: $(KOBJS) $(KLIBS) link64.ld
+ $(LD) $(LDFLAGS) -z max-page-size=0x1000 -nostdlib $(KOBJS) $(KLIBS) -o $@
+
+zemu: zos
+ #qemu-system-x86_64 -d in_asm,op -m 512M -kernel $< -vnc :0
+ qemu-system-x86_64 -monitor stdio -m 256MB -kernel $< -vnc :0 -append 'mboot hb' \
+ -drive file=rdisk.img,if=none,id=mydisk \
+ -device ich9-ahci,id=ahci \
+ -device ide-drive,drive=mydisk,bus=ahci.0
+ #-device ide-hd,drive=mydisk
+cemu: zos
+ #qemu-system-x86_64 -d in_asm,op -m 512M -kernel $< -vnc :0
+ qemu-system-x86_64 -monitor stdio -m 256MB -kernel $< -display curses -append 'mboot hb' \
+ -drive file=rdisk.img,if=none,id=mydisk \
+ -device ich9-ahci,id=ahci \
+ -device ide-drive,drive=mydisk,bus=ahci.0
+ #-device ide-hd,drive=mydisk
+
+rdisk.img:
+ qemu-img create -f qcow2 $@ 1G
+
+mem.o: mem.c mem.h multiboot.h
+interrupt.o: interrupt.c interrupt.h
+process.o: process.c process.h
+
+# -initrd TODO
+memu: zos rdisk.img
+ #qemu-system-x86_64 -d in_asm,op -m 512M -kernel $< -vnc :0
+ qemu-system-x86_64 $(SMP) -d cpu_reset -monitor stdio -m 256MB \
+ -kernel $< -append 'mboot hb' \
+ -drive file=rdisk.img,if=none,id=mydisk \
+ -device ich9-ahci,id=ahci \
+ -device ide-drive,drive=mydisk,bus=ahci.0
+ #-device ide-hd,drive=mydisk
+
+cemu2: zos
+ qemu-system-x86_64 -display curses -m 512M -kernel $< -append 'mboot hb'
+
+kernel.o: kernel.c multiboot.h
+ $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+ rm -f *.o *.a zos64 zos klib/*.o vfs/*.o pci/*.o ahci/*.o
+
+%.o%.s:
+ $(AS) -o $@ $<
+
+%.o%.c:
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+tprintk.o: printk.c
+ cc -Wall -Wno-parentheses -I. -c -o $@ $+
+
+test: t/t_printk tprintk.o
+ t/t_printk
+
+t/t_printk.o: t/t_printk.c
+ cc -Wall -I. -c -o $@ $+
+
+t/t_printk: tprintk.o t/t_printk.o
+ cc -Wall -o $@ $+
+
+%.d%.o:
+ $(DIS) $<