From 52d573e68a741ff0cb6af42b3faee9bd23d1f75e Mon Sep 17 00:00:00 2001 From: chyyuu Date: Mon, 28 Jul 2014 00:31:56 +0800 Subject: [PATCH] add LLVM/clang-3.5+ support --- README | 7 +++++++ labcodes/lab1/Makefile | 20 +++++++++++++++----- labcodes/lab2/Makefile | 25 +++++++++++++++++-------- labcodes/lab3/Makefile | 27 ++++++++++++++++++--------- labcodes/lab4/Makefile | 27 ++++++++++++++++++--------- labcodes/lab5/Makefile | 27 ++++++++++++++++++--------- labcodes/lab6/Makefile | 27 ++++++++++++++++++--------- labcodes/lab7/Makefile | 27 ++++++++++++++++++--------- labcodes/lab8/Makefile | 29 +++++++++++++++++++---------- 9 files changed, 148 insertions(+), 68 deletions(-) diff --git a/README b/README index 079a120..abb67fa 100644 --- a/README +++ b/README @@ -86,6 +86,13 @@ OR 6 handin your code $make handin +OPTION +============== +Now, ucore suuport LLVM/Clang-3.5 + +in step4: + $ USELLVM=1 make +then you will use clang to compile ucore + GRADE/RANK ========== Superman: Finish all OS labs in one month by yourself diff --git a/labcodes/lab1/Makefile b/labcodes/lab1/Makefile index c051b3b..3835884 100644 --- a/labcodes/lab1/Makefile +++ b/labcodes/lab1/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ - then echo 'qemu'; exit; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ elif which i386-elf-qemu > /dev/null; \ then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ + then echo 'qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,13 +44,20 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab2/Makefile b/labcodes/lab2/Makefile index 793967b..26e1731 100644 --- a/labcodes/lab2/Makefile +++ b/labcodes/lab2/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab3/Makefile b/labcodes/lab3/Makefile index 68dec5f..f28d899 100644 --- a/labcodes/lab3/Makefile +++ b/labcodes/lab3/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab4/Makefile b/labcodes/lab4/Makefile index 64a0637..71bee4c 100644 --- a/labcodes/lab4/Makefile +++ b/labcodes/lab4/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab5/Makefile b/labcodes/lab5/Makefile index 698d35c..43a32c5 100644 --- a/labcodes/lab5/Makefile +++ b/labcodes/lab5/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab6/Makefile b/labcodes/lab6/Makefile index 9299494..53dec45 100644 --- a/labcodes/lab6/Makefile +++ b/labcodes/lab6/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab7/Makefile b/labcodes/lab7/Makefile index 0724d86..052b8fd 100644 --- a/labcodes/lab7/Makefile +++ b/labcodes/lab7/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc HOSTCFLAGS := -g -Wall -O2 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld diff --git a/labcodes/lab8/Makefile b/labcodes/lab8/Makefile index 3f2de0e..4621ecc 100644 --- a/labcodes/lab8/Makefile +++ b/labcodes/lab8/Makefile @@ -4,7 +4,8 @@ SPACE := $(EMPTY) $(EMPTY) SLASH := / V := @ - +#need llvm/cang-3.5+ +#USELLVM := 1 # try to infer the correct GCCPREFX ifndef GCCPREFIX GCCPREFIX := $(shell if i386-ucore-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \ @@ -23,10 +24,12 @@ endif # try to infer the correct QEMU ifndef QEMU -QEMU := $(shell if which qemu > /dev/null; \ +QEMU := $(shell if which qemu-system-i386 > /dev/null; \ + then echo 'qemu-system-i386'; exit; \ + elif which i386-elf-qemu > /dev/null; \ + then echo 'i386-elf-qemu'; exit; \ + elif which qemu > /dev/null; \ then echo 'qemu'; exit; \ - elif which i386-ucore-elf-qemu > /dev/null; \ - then echo 'i386-ucore-elf-qemu'; exit; \ else \ echo "***" 1>&2; \ echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \ @@ -41,15 +44,21 @@ endif .DELETE_ON_ERROR: # define compiler and flags - +ifndef USELLVM HOSTCC := gcc -HOSTCFLAGS := -g -Wall -O2 -D_FILE_OFFSET_BITS=64 - -GDB := $(GCCPREFIX)gdb - -CC ?= $(GCCPREFIX)gcc +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)gcc CFLAGS := -fno-builtin -Wall -ggdb -m32 -gstabs -nostdinc $(DEFS) CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +else +HOSTCC := clang +HOSTCFLAGS := -g -Wall -O2 +CC := $(GCCPREFIX)clang +CFLAGS := -fno-builtin -Wall -g -m32 -mno-sse -nostdinc $(DEFS) +CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) +endif + +GDB := $(GCCPREFIX)gdb CTYPE := c S LD := $(GCCPREFIX)ld