aboutsummaryrefslogtreecommitdiffstats
path: root/libc/makefile
blob: aec21efad459fb9a7abd2aaf1d50c9652cdafbaa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# libc makefile

ifndef AR
	AR = i686-elf-ar
endif

ifndef CFLAGS
	CFLAGS = -ffreestanding -Wall -Wextra -g -std=gnu11 -O2 -Iinclude
	CFLAGS += --sysroot=$(SYSROOT)
	CFLAGS += -isystem $(SYSROOT)/usr/include
endif

ifndef CXXFLAGS
	CXXFLAGS = -ffreestanding -Wall -Wextra -fno-exceptions -fno-rtti -D__is_kernel -g -O2 -Iinclude
	CXXFLAGS += -Iinclude
	CXXFLAGS += --sysroot=$(SYSROOT)
	CXXFLAGS += -isystem $(SYSROOT)/usr/include
endif

ifndef LDFLAGS
	LDFLAGS = -T arch/$(ARCH)/linker.ld -ffreestanding -g -O2 -Iinclude
	LDFLAGS += --sysroot=$(SYSROOT)
	LDFLAGS += -isystem $(SYSROOT)/usr/include
endif

ifndef SYSROOT
	$(error No sysroot specified)
endif


LIBS = -nostdlib -lgcc

#Find all the source files
C_SOURCES := $(shell find $(PWD) -type f -name '*.c')
#CPP_SOURCES := $(shell find $(PWD)/kernel -type f -name '*.cpp')
HEADERS := $(shell find $(PWD) -type f -name '*.h')
#ASMFILES := $(shell find $(PWD) -type f -name '*.asm')

OBJECTS := $(patsubst %.c,%.o,$(C_SOURCES))
# OBJECTS += $(patsubst %.cpp,%.o,$(CPP_SOURCES))
# OBJECTS += $(patsubst %.asm,%.o,$(ASMFILES))

DEPFILES := $(patsubst %.c,%.d,$(C_SOURCES))
# DEPFILES += $(patsubst %.cpp,%.d,$(CPP_SOURCES))

LINKLST += $(OBJECTS)
LINKLST += $(LIBS)

-include $(DEPFILES)

.PHONY: all install-headers install-lib clean

all: libc.a install-lib

libc.a: ${OBJECTS}
	$(info [INFO] Linking $<)
	$(AR) rcs $@ $(OBJECTS)

%.o: %.cpp
	$(info [INFO] Compiling $<)
	$(CXX) ${CXXFLAGS} -MMD -MP -c $< -o $@

%.o: %.c
	$(info [INFO] Compiling $<)
	$(CC) $(CFLAGS) -MMD -MP -c $< -o $@

%.o: %.asm
	$(info [INFO] Assembling $<)
	$(NASM) $< -felf32 -o $@ -g

install-headers:
	cp -r --preserve=timestamps include/. $(SYSROOT)/usr/include

install-lib: libc.a
	cp -r $< $(SYSROOT)/usr/lib/.

clean:
	$(info [INFO] Cleaning)
	$(RM) ${OBJECTS} $(DEPFILES) libc.a