aboutsummaryrefslogtreecommitdiff
path: root/src/makefile
blob: 1d85f4bad8d04995a0d53f9b3975d1e70f4c4e17 (plain)
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
AS_OBJ = boot.o idt/stubs.o
AS_OBJ := $(addprefix $(OBJ_DIR)/, $(AS_OBJ))

CXX_OBJ = kernel.o \
	  kernel/dump_gdt.o kernel/dump_multiboot.o kernel/multiboot.o \
	  cpu/cpu.o \
	  gdt.o \
	  gdt/segmentdescriptor.o \
	  idt.o \
	  idt/exception.o idt/interruptgate.o idt/interrupthandler.o \
	  vmm.o \
	  allocator.o \
	  scheduler.o scheduler/task.o
CXX_OBJ := $(addprefix $(OBJ_DIR)/, $(CXX_OBJ))
CXX_DEP = $(CXX_OBJ:%.o=%.d)
CXX_JSON = $(CXX_OBJ:.o=.json)

cpu/irq.h: $(OBJ_DIR)/idt/stubs.o
	@echo "  GEN  $@"
	@echo '#pragma once' > $@
	@echo 'extern "C" {' >> $@
	@echo '/* interrupt map */' >> $@
	@for x in $^; do $(NM) $$x -g | $(SED) -nr 's/[0-9a-f]{8} T (.+)/void \1();/p'; done >> $@
	@echo '}' >> $@

autogen := $(autogen) cpu/irq.h

.PHONY: all test clean
all: $(OBJ_DIR)/kernel.a
test: $(TEST_CXX_OBJ)

$(AS_OBJ): $(OBJ_DIR)/%.o: %.S
	@mkdir -p $(@D)
	@echo "  AS   $<"
	@$(AS) -target $(TARGET) $(AS_FLAGS) $(CXX_INCLUDE) -c $^ -o $@

-include $(CXX_DEP)
$(CXX_OBJ) : $(OBJ_DIR)/%.o : %.cc
	@mkdir -p $(@D)
	@echo "  CXX  $<"
	@$(CXX) -target $(TARGET) $(CXX_FLAGS) $(CXX_INCLUDE) -MMD -MJ$(subst .o,.json,$@) -c $< -o $@

$(OBJ_DIR)/glitch.elf: $(autogen) $(AS_OBJ) $(CXX_OBJ) linker.ld
	@echo "  LD   $(@F)"
	@$(LD) $(LD_FLAGS) -o $@ $(AS_OBJ) $(CXX_OBJ) -lk -ld

# constexpr tests
-include $(TEST_CXX_DEP)
$(TEST_CXX_OBJ): $(OBJ_DIR)/%.o : %.cc
	@mkdir -p $(@D)
	@echo "  TEST $<"
	@$(TEST_CXX) -target $(TARGET) $(TEST_CXX_FLAGS) $(CXX_INCLUDE) -MMD -c $< -o $@

compile_commands.json: $(CXX_JSON)
	@echo [ > $@
	@cat $(CXX_JSON) >> $@
	@echo ] >> $@

clean:
	@rm -f $(AS_OBJ) $(CXX_OBJ) $(CXX_TEST_OBJ) $(OBJ_DIR)/glitch.elf