7fd43577920b433dbcc0e733e2a27cc359dd1095
[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 WRAPPERS = $(SRCDIR)/wrappers.c
44
45 SOURCES =  $(wildcard $(SRCDIR)/*.c)
46 SOURCES += $(WRAPPERS)
47 SOURCES += $(wildcard $(SRCDIR)/*.asm)
48
49 DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
50 OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $(OBJDIR)/%.o, $(SOURCES)))
51
52 .PHONY: all clean
53
54 all: $(WRAPPERS) $(OBJDIR) $(DEPDIR) libmlsys.a
55
56 -include $(DEPENDS)
57
58 $(OBJDIR):
59         mkdir -p $(OBJDIR)
60
61 $(DEPDIR):
62         mkdir -p $(DEPDIR)
63
64 $(WRAPPERS): $(wildcard ../sdk/*.h)
65         sort $^ | awk -f gen_wrappers.awk > $@
66
67 $(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
68         mkdir -p $(dir $@)
69         mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
70         $(CC) $(CFLAGS) -MMD -MP -MF $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d) -o $@ -c $<
71
72 $(OBJDIR)/%.o: $(SRCDIR)/%.asm Makefile
73         $(ASM) $(ASMFLAGS) -o $@ $<
74
75 libmlsys.a: $(OBJECTS)
76         $(AR) rcs $@ $^
77
78 clean:
79         rm -f libmlsys.a
80         rm -f $(SRCDIR)/wrappers.c
81         find $(OBJDIR) -name \*.o -delete
82         find $(DEPDIR) -name \*.d -delete