85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
| DEFAULT_HOST!=../default-host.sh
 | |
| HOST?=DEFAULT_HOST
 | |
| HOSTARCH!=../target-triplet-to-arch.sh $(HOST)
 | |
|  
 | |
| CFLAGS?=-O2 -g
 | |
| CPPFLAGS?=
 | |
| LDFLAGS?=
 | |
| LIBS?=
 | |
|  
 | |
| DESTDIR?=
 | |
| PREFIX?=/usr/local
 | |
| EXEC_PREFIX?=$(PREFIX)
 | |
| BOOTDIR?=$(EXEC_PREFIX)/boot
 | |
| INCLUDEDIR?=$(PREFIX)/include
 | |
|  
 | |
| CFLAGS:=$(CFLAGS) -fstack-protector -ffreestanding -Wall -Wextra
 | |
| CPPFLAGS:=$(CPPFLAGS) -D__is_kernel -Iinclude
 | |
| LDFLAGS:=$(LDFLAGS)
 | |
| LIBS:=$(LIBS) -nostdlib -lk -lgcc
 | |
|  
 | |
| ARCHDIR=arch/$(HOSTARCH)
 | |
|  
 | |
| include $(ARCHDIR)/make.config
 | |
|  
 | |
| CFLAGS:=$(CFLAGS) $(KERNEL_ARCH_CFLAGS)
 | |
| CPPFLAGS:=$(CPPFLAGS) $(KERNEL_ARCH_CPPFLAGS)
 | |
| LDFLAGS:=$(LDFLAGS) $(KERNEL_ARCH_LDFLAGS)
 | |
| LIBS:=$(LIBS) $(KERNEL_ARCH_LIBS)
 | |
|  
 | |
| KERNEL_OBJS=\
 | |
| $(KERNEL_ARCH_OBJS) \
 | |
| kernel/kernel.o \
 | |
| kernel/panic.o \
 | |
| kernel/ssp.o \
 | |
|  
 | |
| OBJS=\
 | |
| $(ARCHDIR)/crti.o \
 | |
| $(ARCHDIR)/crtbegin.o \
 | |
| $(KERNEL_OBJS) \
 | |
| $(ARCHDIR)/crtend.o \
 | |
| $(ARCHDIR)/crtn.o \
 | |
|  
 | |
| LINK_LIST=\
 | |
| $(LDFLAGS) \
 | |
| $(ARCHDIR)/crti.o \
 | |
| $(ARCHDIR)/crtbegin.o \
 | |
| $(KERNEL_OBJS) \
 | |
| $(LIBS) \
 | |
| $(ARCHDIR)/crtend.o \
 | |
| $(ARCHDIR)/crtn.o \
 | |
|  
 | |
| .PHONY: all clean install install-headers install-kernel
 | |
| .SUFFIXES: .o .cpp .S
 | |
|  
 | |
| all: banan-os.kernel
 | |
|  
 | |
| banan-os.kernel: $(OBJS) $(ARCHDIR)/linker.ld
 | |
| 	$(CXX) -T $(ARCHDIR)/linker.ld -o $@ $(CFLAGS) $(CPPFLAGS) $(LINK_LIST)
 | |
| 	grub-file --is-x86-multiboot banan-os.kernel
 | |
|  
 | |
| $(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o:
 | |
| 	OBJ=`$(CXX) $(CFLAGS) $(LDFLAGS) -print-file-name=$(@F)` && cp "$$OBJ" $@
 | |
|  
 | |
| .cpp.o:
 | |
| 	$(CXX) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS)
 | |
|  
 | |
| .S.o:
 | |
| 	$(CXX) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS)
 | |
|  
 | |
| clean:
 | |
| 	rm -f banan-os.kernel
 | |
| 	rm -f $(OBJS) *.o */*.o */*/*.o
 | |
| 	rm -f $(OBJS:.o=.d) *.d */*.d */*/*.d
 | |
|  
 | |
| install: install-headers install-kernel
 | |
|  
 | |
| install-headers:
 | |
| 	mkdir -p $(DESTDIR)$(INCLUDEDIR)
 | |
| 	cp -R --preserve=timestamps include/. $(DESTDIR)$(INCLUDEDIR)/.
 | |
|  
 | |
| install-kernel: banan-os.kernel
 | |
| 	mkdir -p $(DESTDIR)$(BOOTDIR)
 | |
| 	cp banan-os.kernel $(DESTDIR)$(BOOTDIR)
 | |
|  
 | |
| -include $(OBJS:.o=.d) |