Advertisement
Guest User

Untitled

a guest
May 9th, 2012
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 4.10 KB | None | 0 0
  1. # Building system script (for 'make')
  2.  
  3. #------------------------------------------------------------------------------
  4. # Common configuration that affects both kernel and user programs
  5. #------------------------------------------------------------------------------
  6.  
  7. OS_NAME = "OSEER"
  8. NAME_MAJOR := $(shell basename "`cd ..; pwd -P`")
  9. NAME_MINOR := $(shell basename "`pwd -P`")
  10. PROJECT := $(NAME_MINOR)
  11.  
  12. PLATFORM = i386
  13. VERSION = 1.0
  14. AUTHOR = leonardo@zemris.fer.hr
  15.  
  16. # Intermediate and output files are placed into BUILDDIR
  17. BUILDDIR = build
  18.  
  19. BINFILE = $(BUILDDIR)/$(PROJECT).elf
  20. CDIMAGE = $(BUILDDIR)/$(PROJECT).iso
  21.  
  22. CMACROS = OS_NAME="\"$(OS_NAME)\"" PROJECT="\"$(PROJECT)\"" \
  23.       NAME_MAJOR="\"$(NAME_MAJOR)\"" NAME_MINOR="\"$(NAME_MINOR)\"" \
  24.       PLATFORM="\"$(PLATFORM)\"" AUTHOR="\"$(AUTHOR)\"" \
  25.       VERSION="\"$(VERSION)\""
  26.  
  27. CC = gcc
  28. CFLAGS = -O3 -m32 -Wall -ffreestanding -nostdlib -fno-stack-protector \
  29.     -fdata-sections -ffunction-sections
  30.  
  31. LINK = ld
  32. LDSCRIPT = arch/$(PLATFORM)/ldscript.ld
  33. LDFLAGS = -O3 -melf_i386 -T $(LDSCRIPT) --gc-sections -s
  34.  
  35.  
  36. #------------------------------------------------------------------------------
  37. # Devices
  38.  
  39. DEVICES = VGA_TEXT
  40.  
  41. CMACROS += $(DEVICES)
  42.  
  43. #------------------------------------------------------------------------------
  44. # Stack
  45.  
  46. CMACROS += STACK_SIZE=0x1000
  47.  
  48. #------------------------------------------------------------------------------
  49. all: $(CDIMAGE)
  50. #------------------------------------------------------------------------------
  51.  
  52. DIRS_K := arch/$(PLATFORM)/arch arch/$(PLATFORM)/arch/devices kernel
  53. DIRS_P := programs/api programs/hello_world
  54. LIBS = lib
  55.  
  56. DIRS := $(DIRS_K) $(DIRS_P) $(LIBS)
  57.  
  58. INCLUDES := . programs arch/$(PLATFORM)
  59.  
  60. FILES := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.c $(DIR)/*.S))
  61. OBJS := $(addprefix $(BUILDDIR)/,$(FILES:.c=.o))
  62. OBJS := $(OBJS:.S=.asm.o)
  63. DEPS := $(OBJS:.o=.d)
  64.  
  65. # dummy file that indicate directories for kernel objects are created
  66. DIRS_CREATED = $(BUILDDIR)/.null
  67.  
  68. # create required directories in $(BUILDDIR) directory (including $(BUILDDIR))
  69. $(DIRS_CREATED):
  70.     @-if [ ! -e $(BUILDDIR) ]; then mkdir -p $(BUILDDIR); fi;
  71.     @-$(foreach DIR,$(DIRS), if [ ! -e $(BUILDDIR)/$(DIR) ]; \
  72.         then mkdir -p $(BUILDDIR)/$(DIR); fi; )
  73.     @touch $(DIRS_CREATED)
  74.  
  75. # define how to compile .c files
  76. $(BUILDDIR)/%.o: %.c $(DIRS_CREATED) Makefile
  77.     @echo [compiling] $< ...
  78.     @$(CC) -c $< -o $@ -MMD $(CFLAGS) \
  79.         $(foreach INC,$(INCLUDES),-I $(INC)) \
  80.         $(foreach MACRO,$(CMACROS),-D $(MACRO))
  81.  
  82. # define how to compile .S files (assembler)
  83. $(BUILDDIR)/%.asm.o: %.S $(DIRS_CREATED) Makefile
  84.     @echo [compiling] $< ...
  85.     @$(CC) -c $< -o $@ -MMD $(CFLAGS) \
  86.         $(foreach INC,$(INCLUDES),-I$(INC)) \
  87.         $(foreach MACRO,$(CMACROS),-D $(MACRO))
  88.  
  89.  
  90. # OS image
  91. $(BINFILE): $(OBJS)
  92.     @echo [linking $@]
  93.     @$(LINK) $(LDFLAGS) $(OBJS) -o$@
  94.  
  95.  
  96. BOOTCD := $(BUILDDIR)/cd
  97. GRUBMENU := $(BOOTCD)/boot/grub/menu.lst
  98. GRUBFILE := $(BOOTCD)/boot/grub/stage2_eltorito
  99. GRUBFILE_ORIG := arch/$(PLATFORM)/grub_file
  100.  
  101. $(GRUBFILE):
  102.     @-if [ ! -e $(BOOTCD) ]; then mkdir -p $(BOOTCD)/boot/grub ; fi;
  103.     @cp -a $(GRUBFILE_ORIG) $(GRUBFILE)
  104.  
  105. $(GRUBMENU):
  106.     @-if [ ! -e $(BOOTCD) ]; then mkdir -p $(BOOTCD)/boot/grub ; fi;
  107.     @echo "default 0" > $(GRUBMENU)
  108.     @echo "timeout=0" >> $(GRUBMENU)
  109.     @echo "title $(PROJECT)" >> $(GRUBMENU)
  110.     @echo "root (cd)" >> $(GRUBMENU)
  111.     @echo "kernel /boot/$(PROJECT).elf" >> $(GRUBMENU)
  112.     @echo "boot" >> $(GRUBMENU)
  113.  
  114. # ISO CD image for booting (with grub as boot loader and $(KERNEL) as OS image)
  115. $(CDIMAGE): $(BINFILE) $(GRUBFILE) $(GRUBMENU)
  116.     @cp $(BINFILE) $(BOOTCD)/boot/$(PROJECT).elf
  117.     @mkisofs -m '.svn' -J -R -b boot/grub/stage2_eltorito       \
  118.     -no-emul-boot -boot-load-size 4 -boot-info-table -V $(PROJECT)  \
  119.     -A $(PROJECT) -o $(CDIMAGE) $(BOOTCD) 2> /dev/null
  120.     @echo
  121.     @echo ISO CD image: $(CDIMAGE)
  122.     @echo
  123.  
  124. clean:
  125.     @echo Cleaning.
  126.     @-rm -f $(OBJECTS) $(DEPS) $(CDIMAGE) $(BINFILE)
  127.  
  128. clean_all cleanall:
  129.     @echo Removing build directory!
  130.     @-rm -rf $(BUILDDIR)
  131.  
  132. # starting compiled system in 'qemu' emulator
  133. qemu: $(CDIMAGE)
  134.     @echo Starting...
  135.     @qemu -m 4 -no-kvm -cdrom $(CDIMAGE)
  136.  
  137. -include $(DEPS)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement