Start implementing the system manager.
[monolithium.git] / manager / Makefile
1 #
2 # Makefile
3 #
4 # Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU Affero General Public License as
8 # published by the Free Software Foundation, either version 3 of the
9 # License, or (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU Affero General Public License for more details.
15 #
16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19
20 DEBUG = yes
21
22 # Compilers and tools
23 CC = i686-elf-gcc
24 ASM = nasm
25 LINK = i686-aout-ld
26 OBJCOPY = i686-elf-objcopy
27
28 # Directories
29 SRCDIR = src
30 OBJDIR = obj
31 DEPDIR = dep
32
33 LIBGCC_DIR = $(shell $(CC) -print-file-name=)
34
35 # Flags
36 CFLAGS = -Wall -Werror -ffreestanding -nostdlib -I../kernel/include
37 ASMFLAGS = -felf
38 LDFLAGS = -mi386aout -e process_startup -L $(LIBGCC_DIR) -lgcc -L ../library -lmlsys
39
40 ifeq ($(DEBUG), yes)
41     CFLAGS += -g
42 else
43     CFLAGS += -O3
44 endif
45
46 # Input and output files
47 SOURCES =  $(wildcard $(SRCDIR)/*.c)
48 SOURCES += $(wildcard $(SRCDIR)/*.asm)
49
50 DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
51 OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $(OBJDIR)/%.o, $(SOURCES)))
52
53 .PHONY: all clean
54
55 all: $(OBJDIR) $(DEPDIR) manager
56
57 -include $(DEPENDS)
58
59 $(OBJDIR):
60         mkdir -p $(OBJDIR)
61
62 $(DEPDIR):
63         mkdir -p $(DEPDIR)
64
65 $(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
66         mkdir -p $(dir $@)
67         mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
68         $(CC) $(CFLAGS) -MMD -MP -MF $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d) -o $@ -c $<
69         $(OBJCOPY) --keep-file-symbols -j .text -j .data -j .bss $@ $@
70
71 $(OBJDIR)/%.o: $(SRCDIR)/%.asm Makefile
72         $(ASM) $(ASMFLAGS) -o $@ $<
73
74 manager: $(OBJECTS)
75         $(LINK) $(LDFLAGS) -o $@ $^
76
77 clean:
78         rm -f manager
79         find $(OBJDIR) -name \*.o -delete
80         find $(DEPDIR) -name \*.d -delete