Automatically generate syscalls.h and syscalls.c as well
[monolithium.git] / library / Makefile
1 #
2 # Makefile
3 #
4 # Copyright (C) 2016 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 AR = i686-elf-ar
26
27 # Directories
28 SRCDIR = src
29 OBJDIR = obj
30 DEPDIR = dep
31
32 # Flags
33 CFLAGS = -Wall -Werror -ffreestanding -nostdlib -fPIC -I ..
34 ASMFLAGS = -felf
35
36 ifeq ($(DEBUG), yes)
37     CFLAGS += -g
38 else
39     CFLAGS += -O3
40 endif
41
42 # Input and output files
43 SOURCES =  $(wildcard $(SRCDIR)/*.c)
44 SOURCES += $(wildcard $(SRCDIR)/*.asm)
45
46 DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
47 OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $(OBJDIR)/%.o, $(SOURCES)))
48
49 .PHONY: all clean
50
51 all: $(WRAPPERS) $(OBJDIR) $(DEPDIR) libmlsys.a
52
53 -include $(DEPENDS)
54
55 $(OBJDIR):
56         mkdir -p $(OBJDIR)
57
58 $(DEPDIR):
59         mkdir -p $(DEPDIR)
60
61 $(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
62         mkdir -p $(dir $@)
63         mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
64         $(CC) $(CFLAGS) -MMD -MP -MF $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d) -o $@ -c $<
65
66 $(OBJDIR)/%.o: $(SRCDIR)/%.asm Makefile
67         $(ASM) $(ASMFLAGS) -o $@ $<
68
69 libmlsys.a: $(OBJECTS)
70         $(AR) rcs $@ $^
71
72 clean:
73         rm -f libmlsys.a
74         find $(OBJDIR) -name \*.o -delete
75         find $(DEPDIR) -name \*.d -delete