-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
130 lines (103 loc) · 4.01 KB
/
Makefile
File metadata and controls
130 lines (103 loc) · 4.01 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Makefile pour ACE Micro-Kernel
# Compilateur et assembleur (version macOS compatible)
CC = gcc
AS = as
LD = ld
OBJCOPY = objcopy
# Flags de compilation (version simplifiée pour macOS)
CFLAGS = -fno-builtin -fno-stack-protector \
-Wall -Wextra -c
ASFLAGS =
LDFLAGS =
# Répertoires
KERNEL_DIR = kernel
BOOT_DIR = boot
DRIVERS_DIR = drivers
MM_DIR = mm
INCLUDE_DIR = include
BUILD_DIR = build
# Fichiers sources
KERNEL_SOURCES = $(wildcard kernel/*.c)
DRIVER_SOURCES = $(wildcard drivers/*.c)
MM_SOURCES = $(wildcard mm/*.c)
FS_SOURCES = $(wildcard fs/*.c)
LIB_SOURCES = $(wildcard lib/*.c)
BOOT_SOURCES = $(wildcard boot/*.s)
# Fichiers objets pour macOS
KERNEL_OBJECTS = $(filter-out $(BUILD_DIR)/kernel_qemu.o, $(KERNEL_SOURCES:kernel/%.c=$(BUILD_DIR)/%.o))
DRIVER_OBJECTS = $(DRIVER_SOURCES:drivers/%.c=$(BUILD_DIR)/%.o)
MM_OBJECTS = $(MM_SOURCES:mm/%.c=$(BUILD_DIR)/%.o)
FS_OBJECTS = $(FS_SOURCES:fs/%.c=$(BUILD_DIR)/%.o)
LIB_OBJECTS = $(LIB_SOURCES:lib/%.c=$(BUILD_DIR)/%.o)
# Fichiers objets pour QEMU
QEMU_KERNEL_OBJECTS = $(BUILD_DIR)/kernel_qemu.o $(DRIVER_OBJECTS) $(MM_OBJECTS) $(FS_OBJECTS) $(LIB_OBJECTS)
BOOT_OBJECTS = $(BOOT_SOURCES:boot/%.s=$(BUILD_DIR)/%.o)
ALL_OBJECTS = $(KERNEL_OBJECTS) $(DRIVER_OBJECTS) $(MM_OBJECTS) $(FS_OBJECTS) $(LIB_OBJECTS)
# Cibles principales
.PHONY: all clean kernel kernel-qemu bootloader qemu run info help
all: kernel
# Créer le répertoire de build
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
# Compiler les fichiers du kernel
$(BUILD_DIR)/%.o: $(KERNEL_DIR)/%.c | $(BUILD_DIR)
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) $< -o $@
# Compiler les drivers
$(BUILD_DIR)/%.o: $(DRIVERS_DIR)/%.c | $(BUILD_DIR)
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) $< -o $@
# Compiler la gestion mémoire
$(BUILD_DIR)/%.o: $(MM_DIR)/%.c | $(BUILD_DIR)
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) $< -o $@
# Objets pour QEMU
$(BUILD_DIR)/kernel_qemu.o: kernel/kernel_qemu.c | $(BUILD_DIR)
x86_64-elf-gcc $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@
$(BUILD_DIR)/vga.o: drivers/vga.c | $(BUILD_DIR)
x86_64-elf-gcc $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@
$(BUILD_DIR)/memory.o: mm/memory.c | $(BUILD_DIR)
x86_64-elf-gcc $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $@
# Créer le kernel (version simplifiée)
kernel: $(ALL_OBJECTS) | $(BUILD_DIR)
$(CC) $(ALL_OBJECTS) -o $(BUILD_DIR)/kernel.bin
# Assembler le bootloader
$(BUILD_DIR)/boot.o: boot/boot.s | $(BUILD_DIR)
x86_64-elf-as --32 $< -o $@
# Créer le kernel pour QEMU
kernel-qemu: $(QEMU_KERNEL_OBJECTS) | $(BUILD_DIR)
x86_64-elf-gcc -m32 -nostdlib -T linker.ld $(QEMU_KERNEL_OBJECTS) -o $(BUILD_DIR)/kernel_qemu.bin
# Créer le bootloader
bootloader: $(BUILD_DIR)/boot.o | $(BUILD_DIR)
x86_64-elf-objcopy -O binary $(BUILD_DIR)/boot.o $(BUILD_DIR)/boot.bin
# Compiler le kernel simple pour QEMU
$(BUILD_DIR)/kernel_simple.o: kernel/kernel_simple.c | $(BUILD_DIR)
x86_64-elf-gcc -m32 -fno-builtin -fno-stack-protector -nostdlib -c $< -o $@
$(BUILD_DIR)/kernel_simple.elf: $(BUILD_DIR)/kernel_simple.o | $(BUILD_DIR)
x86_64-elf-ld -m elf_i386 -T multiboot.ld -o $@ $<
# Lancer QEMU avec le kernel simple
qemu: $(BUILD_DIR)/kernel_simple.elf
qemu-system-i386 -kernel $< -m 32M
# Version simplifiée - exécuter directement sur macOS
run: kernel
$(BUILD_DIR)/kernel.bin
# Nettoyer les fichiers générés
clean:
rm -rf $(BUILD_DIR)
# Afficher les informations de build
info:
@echo "=== ACE Micro-Kernel Build Info ==="
@echo "Compilateur: $(CC)"
@echo "Flags: $(CFLAGS)"
@echo "Sources kernel: $(KERNEL_SOURCES)"
@echo "Sources drivers: $(DRIVERS_SOURCES)"
@echo "Sources MM: $(MM_SOURCES)"
@echo "Objets: $(ALL_OBJECTS)"
# Aide
help:
@echo "Cibles disponibles:"
@echo " all - Compiler le kernel et le bootloader"
@echo " kernel - Compiler seulement le kernel"
@echo " bootloader - Compiler seulement le bootloader"
@echo " iso - Créer une image disque bootable"
@echo " run - Exécuter avec QEMU (si disponible)"
@echo " clean - Nettoyer les fichiers générés"
@echo " info - Afficher les informations de build"
@echo " help - Afficher cette aide"