-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
66 lines (44 loc) · 1.82 KB
/
Makefile
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
PATH := /u/wbcowan/gnuarm-4.0.2/libexec/gcc/arm-elf/4.0.2:/u/wbcowan/gnuarm-4.0.2/arm-elf/bin:${PATH}
CC = gcc
CFLAGS = -c -fPIC -Wall -Wextra -Werror -I. -Iinclude -mcpu=arm920t -msoft-float -std=gnu99 -fno-omit-frame-pointer -mapcs -mpoke-function-name
AS = as
ASFLAGS = -mcpu=arm920t -mapcs-32
LD = ld
LDFLAGS = -init main -Map kernel.map -N -T linker.ld -L/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2
.SUFFIXES:
.DEFAULT:
.PRECIOUS: %.s
.PHONY: clean
srcdirs = kernel user
vpath %.h include include/kernel include/user
vpath %.c $(srcdirs)
generated_sources = user/track_data.c
generated_headers = include/user/track_data.h
sources := $(foreach sdir,$(srcdirs),$(wildcard $(sdir)/*.c)) $(generated_sources)
assembled_sources := $(patsubst %c,%s,$(sources))
hand_assemblies := $(filter-out $(assembled_sources),$(wildcard *.s))
objects := $(patsubst %.c,%.o,$(sources)) $(patsubst %.s,%.o,$(hand_assemblies))
deploy: kernel.elf
install -m 664 -g cs452_05 kernel.elf /u/cs452/tftp/ARM/cs452_05/`whoami`.elf
kernel.elf: $(objects) linker.ld
$(LD) $(LDFLAGS) -o $@ $(filter-out linker.ld,$^) -lgcc
user/track_data.c: data/parse_track.py data/tracka data/trackb
data/parse_track.py -C user/track_data.c -H include/user/track_data.h -S 77 data/tracka data/trackb
%.cpp: %.c
$(CC) -o $@ -E $(CFLAGS) $<
%.s: %.c
$(CC) -o $@ -S $(CFLAGS) $<
%.o: %.s
$(AS) $(ASFLAGS) -o $@ $<
%.d : %.c
@set -e; rm -f $@; \
$(CC) -MM $(CFLAGS) $< | sed 's,\($*\)\.o[ :]*,\1.s $@ : ,g' > $@;
clean:
-rm -f kernel.elf $(objects) $(assembled_sources) $(sources:.c=.d) kernel.map $(generated_sources) $(generated_headers)
submit: prod
mkdir -p ~/cs452/$(DIR)/src/
mv kernel.elf ~/cs452/$(DIR)/
git archive HEAD --format=tar | tar -x -C ~/cs452/$(DIR)/src/
prod: clean
make CFLAGS="$(CFLAGS) -DPRODUCTION -Wno-error"
-include $(sources:.c=.d)