-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile.1
175 lines (141 loc) · 5.88 KB
/
Makefile.1
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
ARCH = loongarch64
QEMU = qemu-system-loongarch64
CROSS_COMPILE = loongarch64-unknown-linux-gnu-
CROSS_GDB = loongarch64-linux-gnu-gdb
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
READELF = $(CROSS_COMPILE)readelf
# OBJDUMP = rust-objdump
MODE = debug
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
BUILD_DIR = ./build
DEBUG_DIR = ./debug
INCLUDE_DIR = ./include
# Direct .o files to ./build directory
# OBJS = $(patsubst src/%.c, $(BUILD_DIR)/%.o, $(wildcard src/*.c)) $(BUILD_DIR)/kernel.o $(BUILD_DIR)/resources.o $(BUILD_DIR)/switch.o
OBJS = $(patsubst src/%.c,$(BUILD_DIR)/%.o,$(wildcard src/*.c)) \
$(patsubst src/%.S,$(BUILD_DIR)/%.o,$(wildcard src/*.S))
TARGET = hvisor.efi
WORKDIR = $(shell pwd)/./
ELF_TARGET = $(WORKDIR)/../hvisor/target/loongarch64-unknown-none/debug/hvisor
GNU_EFI = $(WORKDIR)/lib/gnu-efi
EFIINC = $(GNU_EFI)/inc
EFIINCS = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol
hvisor_C_INC = $(WORKDIR)/include
LIB = $(GNU_EFI)/$(ARCH)/gnuefi
LIB_2 = $(GNU_EFI)/$(ARCH)/lib
RUST_INC = $(WORKDIR)/../rust_src
RUST_LIB = $(WORKDIR)/../rust_src/target/$(ARCH)/debug
EFI_CRT_OBJS = $(LIB)/crt0-efi-$(ARCH).o
EFI_LDS = $(GNU_EFI)/gnuefi/elf_$(ARCH)_efi.lds
CFLAGS = $(EFIINCS) -I $(RUST_INC) -fno-stack-protector -fpic \
-fshort-wchar -Wall -march=loongarch64 -mabi=lp64d -g -Os \
-Wextra -fno-strict-aliasing \
-ffreestanding -fno-stack-check \
$(if $(findstring gcc,$(CC)),-fno-merge-all-constants,) \
-I $(WORKDIR)/../extras/font8x8
CFLAGS += -I $(hvisor_C_INC)
LDFLAGS = -nostdlib --warn-common --no-undefined -shared \
--build-id=sha1 -Bsymbolic --defsym=EFI_SUBSYSTEM=0xa -T $(EFI_LDS) -L $(LIB) -L $(LIB_2) -L $(RUST_LIB) $(EFI_CRT_OBJS) \
LIGHTGREEN_S := \033[1;32m
LIGHTGREEN_E := \033[0m
LIGHTYELLOW_S := \033[1;33m
LIGHTYELLOW_E := \033[0m
F_QEMU ?=
# append QEMU definition as -DQEMU to CFLAGS
ifeq ($(F_QEMU), 1)
CFLAGS += -DQEMU
endif
all: pre clean $(TARGET)
LOG ?= info
pre:
make -C ../hvisor ARCH=loongarch64 LOG=$(LOG)
make -C ../hvisor disa ARCH=loongarch64
hvisor.so: $(OBJS)
$(LD) $(LDFLAGS) $^ -o $@ -lefi -lgnuefi
# dump elf
$(OBJDUMP) -x $@ > hvisor.txt
$(OBJDUMP) -d $@ > hvisor.asm
%.efi: %.so
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* \
-j .rela.* -j .rel* -j .rela* -j .reloc -O binary $^ $@
cp $@ BOOTLOONGARCH64.EFI
@echo "ok"
$(BUILD_DIR)/%.o: src/%.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: src/%.S
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c $< -o $@
create_dir:
@mkdir -p $(BUILD_DIR)
clean:
@rm -rf $(BUILD_DIR) $(DEBUG_DIR) *.efi *.so *.txt *.asm
$(foreach dir,$(GUEST_OS_DIRS),$(MAKE) -C $(GUEST_OS_DIRS_PREFIX)$(dir) clean;)
QEMU_CMD = $(QEMU) -bios firmware/QEMU_EFI.fd -kernel $(TARGET) -m 4G -smp 1 -nographic -serial mon:stdio
run:
$(QEMU_CMD)
run-debug:
$(QEMU_CMD) -s -S
debug:
$(CROSS_GDB) -ex "file $(ELF_TARGET)" -ex "target remote localhost:1234" -ex "layout asm"
USB_STICK=HVISOR_LA64
USER=$(shell whoami)
DEV_PATH=/media/${USER}/${USB_STICK}
copy:
@echo "Copying to USB stick"
rm -rf $(DEV_PATH)/EFI
mkdir -p $(DEV_PATH)/EFI/BOOT
cp BOOTLOONGARCH64.EFI $(DEV_PATH)/EFI/BOOT/BOOTLOONGARCH64.EFI
sync
# unmount USB stick
@echo "Unmounting USB stick"
umount $(DEV_PATH)
@echo "Done"
world:
unset LD_LIBRARY_PATH
# @echo "$(LIGHTGREEN_S)building world$(LIGHTGREEN_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building world"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
# @echo "$(LIGHTYELLOW_S)building hvisor kernel module and cmd tool$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building hvisor kernel module and cmd tool"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cd ../hvisor-tool && ./__loongarch_build.sh
# @echo "$(LIGHTYELLOW_S)copying hvisor kernel module and cmd tool$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> copying hvisor kernel module and cmd tool"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cd ../buildroot-loongarch64/board/loongson/ls3a5000/rootfs_ramdisk_overlay/tool && ./copy
# @echo "$(LIGHTYELLOW_S)building guest os 1$(LIGHTYELLOW_E)"
# cd ../guest_os_1 && make
# cp ../guest_os_1/build/guest_os_1.bin ../buildroot-loongarch64/board/loongson/ls3a5000/rootfs_ramdisk_overlay/tool/guest_os_1.bin
cd ../hvisor-la64-linux/rootfs && make
# @echo "$(LIGHTYELLOW_S)building nonroot linux kernel$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building nonroot linux kernel"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cd ../hvisor-la64-linux && ./build nonroot
# @echo "$(LIGHTYELLOW_S)copying nonroot vmlinux.bin to buildroot$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> copying nonroot vmlinux.bin to buildroot"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cp ../hvisor-la64-linux/nr_tmp/vmlinux.bin ../buildroot-loongarch64/board/loongson/ls3a5000/rootfs_ramdisk_overlay/tool/vmlinux.bin
# @echo "$(LIGHTYELLOW_S)building buildroot$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building buildroot"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cd ../buildroot-loongarch64 && make -j$(nproc)
# @echo "$(LIGHTYELLOW_S)building root linux kernel$(LIGHTYELLOW_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building root linux kernel"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
cd ../hvisor-la64-linux && ./build def && ./build kernel
# @echo "$(LIGHTGREEN_S)building world done$(LIGHTGREEN_E)"
@echo ">>>>>>>>>>>>>>>>>>>>>>"
@echo ">>>>>>>>>>>>>>>>>>>>>> building world done"
@echo ">>>>>>>>>>>>>>>>>>>>>>"