-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMakefile.edk
89 lines (66 loc) · 3.15 KB
/
Makefile.edk
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
######################
# Basic Configuration
####################
# Running UEFI applications with qemu requires an OVMF image. You can either download it or build it with edk2
# (see vagrant/Vagrantfile on how to do that).
# Either way, OVMF_IMAGE needs to point to the image for the "run" target to work.
OVMF_IMAGE = /usr/share/qemu/OVMF.fd
# The build process generates a FAT32 file system that's accessed via loopback device.
# Set LOOP_DEVICE to an available device.
LOOP_DEVICE = /dev/loop0
#########################
# Detailed Configuration
#######################
PROJECT_NAME = UEFIStarter
PROJECT_DIR = UEFIStarter
VERSIONFILE = .version
IMAGE_FILENAME = UEFIStarter.img
ISO_FILENAME = UEFIStarter.iso
MOUNT_POINT := $(shell readlink -f $(PROJECT_DIR))/tmp
BUILD_DIR = $(PROJECT_DIR)/target
SHELL_BINARY = ShellBinPkg/UefiShell/X64/Shell.efi
CURRENT_USER := $(shell whoami)
SRCFILES := $(shell find $(PROJECT_DIR)/ -name '*.c' -or -name '*.h')
STATICS := $(shell find $(PROJECT_DIR)/static -type f ! -name '.*.swp')
##########
# Targets
########
all: build $(BUILD_DIR)/$(IMAGE_FILENAME)
build:
mkdir -p $(BUILD_DIR)
$(PROJECT_DIR)/tools/generate_test_runner.sh
build
free:
mount | grep "$(MOUNT_POINT) " && sudo umount $(MOUNT_POINT) || true
losetup | grep $(LOOP_DEVICE) && sudo losetup -d $(LOOP_DEVICE) || true
clean:
find $(PROJECT_DIR)/ -name '*.o' -or -name '*.so' -or -name '*.efi' | xargs -r rm
rm -f $(BUILD_DIR)/$(IMAGE_FILENAME) $(BUILD_DIR)/$(ISO_FILENAME)
$(BUILD_DIR)/$(IMAGE_FILENAME): free $(SRCFILES) $(STATICS) FORCE
mkdir -p $(BUILD_DIR) $(MOUNT_POINT)
test -f $(BUILD_DIR)/$(IMAGE_FILENAME) || dd if=/dev/zero of=$(BUILD_DIR)/$(IMAGE_FILENAME) bs=512 count=93750
sgdisk -o -n 1:2048:93716 -t 1:ef00 $(BUILD_DIR)/$(IMAGE_FILENAME) >/dev/null
sudo losetup --offset 1048576 --sizelimit 46934528 $(LOOP_DEVICE) $(BUILD_DIR)/$(IMAGE_FILENAME)
sudo mkdosfs -F 32 $(LOOP_DEVICE) >/dev/null
sudo mount -o uid=$(CURRENT_USER) $(LOOP_DEVICE) $(MOUNT_POINT)
echo "$(PROJECT_NAME)" > $(MOUNT_POINT)/$(VERSIONFILE)
date +"%Y-%m-%d %H:%M:%S UTC%:::z (%Z)" >> $(MOUNT_POINT)/$(VERSIONFILE)
cp Build/$(PROJECT_NAME)/DEBUG_GCC5/X64/*.efi $(MOUNT_POINT)/
cp -R $(PROJECT_DIR)/static/* $(MOUNT_POINT)/
mkdir -p $(MOUNT_POINT)/tests
mv $(MOUNT_POINT)/test*.efi $(MOUNT_POINT)/tests/
$(PROJECT_DIR)/tools/generate_runall_tests_script.sh $(PROJECT_DIR)/tests/suites >> $(MOUNT_POINT)/tests/run.nsh
mkdir -p $(MOUNT_POINT)/EFI/Boot
cp $(SHELL_BINARY) $(MOUNT_POINT)/EFI/Boot/bootx64.efi
mkisofs -quiet -J -input-charset utf8 -o $(BUILD_DIR)/$(ISO_FILENAME) $(MOUNT_POINT)/
sudo umount $(MOUNT_POINT)
sudo losetup -d $(LOOP_DEVICE)
img: $(BUILD_DIR)/$(IMAGE_FILENAME)
FORCE:
run: $(BUILD_DIR)/$(IMAGE_FILENAME)
qemu-system-x86_64 -cpu qemu64 -bios $(OVMF_IMAGE) -nographic -drive file=$(BUILD_DIR)/$(IMAGE_FILENAME),format=raw,if=ide -net none -soundhw ac97 -no-reboot
check:
@echo checking for TAB characters...
@! echo $(SRCFILES) | xargs grep -P '\x09'
@echo checking for duplicate GUIDs...
@! grep -hE '_GUID.*=' `find $(PROJECT_DIR)/ -name '*.inf' -or -name '*.d[es]c'` | sed 's/.*= *//' | sort | uniq -c | grep -vE '^ *1 '