srcdir := @abs_top_srcdir@ builddir := @abs_top_builddir@ INSTALL_DIR := @prefix@ PACKAGES := DISTDIR ?= /var/cache/distfiles GNU_MIRROR := http://mirrors.kernel.org/gnu gcc_url := $(GNU_MIRROR)/gcc/gcc-$(gcc_version)/gcc-$(gcc_version).tar.gz glibc_url := $(GNU_MIRROR)/glibc/glibc-$(glibc_version).tar.gz newlib_url := ftp://sourceware.org/pub/newlib/newlib-$(newlib_version).tar.gz WITH_ARCH ?= @WITH_ARCH@ WITH_ABI ?= @WITH_ABI@ SYSROOT := $(INSTALL_DIR)/sysroot SHELL := /bin/sh AWK := @GAWK@ SED := @GSED@ PATH := $(INSTALL_DIR)/bin:$(PATH) # Check to see if we need wrapper scripts for awk/sed (which point to # gawk/gsed on platforms where these aren't the default), otherwise # don't override these as the wrappers don't always work. ifneq (@GSED@,/bin/sed) PATH := $(base_dir)/sed:$(PATH) endif ifneq (@GAWK@,/usr/bin/gawk) PATH := $(base_dir)/awk:$(PATH) endif export PATH AWK SED MULTILIB_FLAGS := @multilib_flags@ NEWLIB_MULTILIB_NAMES := @newlib_multilib_names@ GLIBC_MULTILIB_NAMES := @glibc_multilib_names@ GCC_CHECKING_FLAGS := @gcc_checking@ XLEN := $(shell echo $(WITH_ARCH) | tr A-Z a-z | sed 's/.*rv\([0-9]*\).*/\1/') ifneq ($(XLEN),32) XLEN := 64 endif make_tuple = riscv$(1)-unknown-$(2) LINUX_TUPLE ?= $(call make_tuple,$(XLEN),linux-gnu) NEWLIB_TUPLE ?= $(call make_tuple,$(XLEN),elf) CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA) @cmodel@ ASFLAGS_FOR_TARGET := $(ASFLAGS_FOR_TARGET_EXTRA) @cmodel@ GLIBC_TARGET_FLAGS := $(GLIBC_TARGET_FLAGS_EXTRA) GLIBC_CC_FOR_TARGET ?= $(LINUX_TUPLE)-gcc GLIBC_CXX_FOR_TARGET ?= $(LINUX_TUPLE)-g++ GLIBC_TARGET_BOARDS ?= $(shell echo "$(GLIBC_MULTILIB_NAMES)" | sed 's!\([a-z0-9]*\)-\([a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g') NEWLIB_CC_FOR_TARGET ?= $(NEWLIB_TUPLE)-gcc NEWLIB_CXX_FOR_TARGET ?= $(NEWLIB_TUPLE)-g++ NEWLIB_TARGET_BOARDS ?= $(shell echo "$(NEWLIB_MULTILIB_NAMES)" | sed 's!\([a-z0-9]*\)-\([a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g') CONFIGURE_HOST = @configure_host@ all: @default_target@ newlib: stamps/build-gcc-newlib-stage2 linux: stamps/build-gcc-linux-stage2 linux-native: stamps/build-gcc-linux-native .PHONY: build-binutils build-gcc1 build-libc build-gcc2 build-qemu build-binutils: stamps/build-binutils-@default_target@ build-gcc%: stamps/build-gcc-@default_target@-stage% ifeq (@default_target@,linux) build-libc: $(patsubst %,stamps/build-glibc-linux-%,$(MULTLIB_NAMES)) else build-libc: build-newlib endif build-qemu: stamps/build-qemu REGRESSION_TEST_LIST = gcc .PHONY: check check: check-@default_target@ .PHONY: check-linux check-newlib check-linux: $(patsubst %,check-%-linux,$(REGRESSION_TEST_LIST)) check-newlib: $(patsubst %,check-%-newlib,$(REGRESSION_TEST_LIST)) .PHONY: check-gcc check-gcc-linux check-gcc-newlib check-gcc: check-gcc-@default_target@ check-gcc-linux: stamps/check-gcc-linux check-gcc-newlib: stamps/check-gcc-newlib .PHONY: check-dhrystone check-dhrystone-linux check-dhrystone-newlib check-dhrystone: check-dhrystone-@default_target@ check-dhrystone-linux: stamps/check-dhrystone-linux check-dhrystone-newlib: stamps/check-dhrystone-newlib .PHONY: check-binutils check-binutils-linux check-binutils-newlib check-binutils: check-binutils-@default_target@ check-binutils-linux: stamps/check-binutils-linux check-binutils-newlib: stamps/check-binutils-newlib .PHONY: check-gdb check-gdb-linux check-gdb-newlib check-gdb: check-gdb-@default_target@ check-gdb-linux: stamps/check-gdb-linux check-gdb-newlib: stamps/check-gdb-newlib .PHONY: report report: report-@default_target@ .PHONY: report-linux report-newlib report-linux: $(patsubst %,report-%-linux,$(REGRESSION_TEST_LIST)) report-newlib: $(patsubst %,report-%-newlib,$(REGRESSION_TEST_LIST)) .PHONY: report-gcc report-gcc: report-gcc-@default_target@ .PHONY: report-dhrystone report-dhrystone: report-dhrystone-@default_target@ .PHONY: report-binutils report-binutils: report-binutils-@default_target@ .PHONY: report-gdb report-gdb: report-gdb-@default_target@ $(addprefix src/original-,$(PACKAGES)): mkdir -p src rm -rf $@ $(subst original-,,$@)-* cd src && (cat $(DISTDIR)/$(subst src/original-,,$@)-$($(subst src/original-,,$@)_version).tar.gz || @FETCHER@ $($(subst src/original-,,$@)_url)) | tar zxf - mv $(subst original-,,$@)-$($(subst src/original-,,$@)_version) $@ $(addprefix src/,$(PACKAGES)): src/%: src/original-% rm -rf $@ $@.tmp cp -a $< $@.tmp $(srcdir)/scripts/cp_s $(srcdir)/$(notdir $@) $@.tmp cd $@.tmp && patch -p1 < $(srcdir)/patches/$(notdir $@) if test -f $@.tmp/contrib/download_prerequisites && test "@NEED_GCC_EXTERNAL_LIBRARIES@" == "true"; then cd $@.tmp && ./contrib/download_prerequisites; fi mv $@.tmp $@ .PHONY: patches $(addprefix $(srcdir)/patches/,$(PACKAGES)) $(addprefix $(srcdir)/patches/,$(PACKAGES)): $(srcdir)/patches/%: src/% -cd src/$(notdir $@) && rm `cd $(srcdir)/$(notdir $@) && find . -type f` -cd src && diff --exclude=manual --exclude=autom4te.cache -rupN original-$(notdir $@) $(notdir $@) | filterdiff --remove-timestamps > $@ $(srcdir)/scripts/cp_s $(srcdir)/$(notdir $@) $< patches: $(addprefix $(srcdir)/patches/,$(PACKAGES)) stamps/build-binutils-linux: $(srcdir)/riscv-binutils-gdb rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $ $@ stamps/build-dejagnu: $(srcdir)/riscv-dejagnu rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $ $@ stamps/check-gcc-newlib: stamps/build-gcc-newlib-stage2 stamps/build-qemu stamps/build-dejagnu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" mkdir -p $(dir $@) date > $@ stamps/check-gcc-linux: stamps/build-gcc-linux-stage2 stamps/build-qemu stamps/build-dejagnu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gcc-linux-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" mkdir -p $(dir $@) date > $@ .PHONY: check-dhrystone-newlib check-dhrystone-newlib: $(patsubst %,stamps/check-dhrystone-newlib-%,$(NEWLIB_MULTILIB_NAMES)) stamps/check-dhrystone-newlib-%: \ stamps/build-gcc-newlib-stage2 \ stamps/build-qemu \ $(wildcard $(srcdir)/test/benchmarks/dhrystone/*) $(eval $@_ARCH := $(word 4,$(subst -, ,$@))) $(eval $@_ABI := $(word 5,$(subst -, ,$@))) $(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH)))) PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true .PHONY: check-dhrystone-linux check-dhrystone-linux: $(patsubst %,stamps/check-dhrystone-linux-%,$(GLIBC_MULTILIB_NAMES)) stamps/check-dhrystone-linux-%: \ stamps/build-gcc-linux-stage2 \ stamps/build-qemu \ $(wildcard $(srcdir)/test/benchmarks/dhrystone/*) $(eval $@_ARCH := $(word 4,$(subst -, ,$@))) $(eval $@_ABI := $(word 5,$(subst -, ,$@))) $(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH)))) PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true stamps/check-binutils-newlib: stamps/build-gcc-newlib-stage2 stamps/build-qemu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-newlib check-{binutils,gas,ld} -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true date > $@ stamps/check-binutils-linux: stamps/build-gcc-linux-stage2 stamps/build-qemu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-linux check-{binutils,gas,ld} -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true date > $@ stamps/check-gdb-newlib: stamps/build-gcc-newlib-stage2 stamps/build-qemu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true date > $@ stamps/check-gdb-linux: stamps/build-gcc-linux-stage2 stamps/build-qemu PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" DEJAGNULIBS="$(srcdir)/riscv-dejagnu" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-linux check-gdb -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true date > $@ .PHONY: report-gcc-newlib report-gcc-newlib: stamps/check-gcc-newlib stat $(patsubst %,$(srcdir)/test/gcc-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)) || exit 1 if find build-gcc-newlib-stage2/gcc/testsuite/ -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gcc-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)); then false; else true; fi .PHONY: report-gcc-linux report-gcc-linux: stamps/check-gcc-linux stat $(patsubst %,$(srcdir)/test/gcc-linux/%.log,$(GLIBC_MULTILIB_NAMES)) || exit 1 if find build-gcc-linux-stage2/gcc/testsuite/ -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gcc-linux/%.log,$(GLIBC_MULTILIB_NAMES)); then false; else true; fi .PHONY: report-dhrystone-newlib report-dhrystone-newlib: $(patsubst %,stamps/check-dhrystone-newlib-%,$(NEWLIB_MULTILIB_NAMES)) if cat $^ | grep -v '^PASS'; then false; else true; fi .PHONY: report-dhrystone-linux report-dhrystone-linux: $(patsubst %,stamps/check-dhrystone-linux-%,$(GLIBC_MULTILIB_NAMES)) if cat $^ | grep -v '^PASS'; then false; else true; fi .PHONY: report-binutils-newlib report-binutils-newlib: stamps/check-binutils-newlib stat $(patsubst %,$(srcdir)/test/binutils-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)) || exit 1 if find build-binutils-newlib -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/binutils-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)); then false; else true; fi .PHONY: report-binutils-linux report-binutils-linux: stamps/check-binutils-linux stat $(patsubst %,$(srcdir)/test/binutils-linux/%.log,$(GLIBC_MULTILIB_NAMES)) || exit 1 if find build-binutils-linux -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/binutils-linux/%.log,$(GLIBC_MULTILIB_NAMES)); then false; else true; fi clean: rm -rf build-* $(addprefix src/,$(PACKAGES)) stamps .PHONY: report-gdb-newlib report-gdb-newlib: stamps/check-gdb-newlib stat $(patsubst %,$(srcdir)/test/gdb-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)) || exit 1 if find build-binutils-newlib -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gdb-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)); then false; else true; fi .PHONY: report-gdb-linux report-gdb-linux: stamps/check-gdb-linux stat $(patsubst %,$(srcdir)/test/gdb-linux/%.log,$(GLIBC_MULTILIB_NAMES)) || exit 1 if find build-binutils-linux -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gdb-linux/%.log,$(GLIBC_MULTILIB_NAMES)); then false; else true; fi distclean: clean rm -rf src # All of the packages install themselves, so our install target does nothing. install: