diff --git a/.gitmodules b/.gitmodules index d8dcb4fb2..5c43e010a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "src/libexpat"] path = src/libexpat url = git://github.com/libexpat/libexpat +[submodule "src/riscv-openocd"] + path = src/riscv-openocd + url = git://github.com/riscv/riscv-openocd.git +[submodule "src/libusb"] + path = src/libusb + url = git://github.com/libusb/libusb.git diff --git a/Makefile b/Makefile index 417095940..557df0dee 100644 --- a/Makefile +++ b/Makefile @@ -17,20 +17,30 @@ OBJ_UBUNTU := $(OBJDIR)/$(UBUNTU) OBJ_WIN64 := $(OBJDIR)/$(WIN64) SRC_RGT := $(SRCDIR)/riscv-gnu-toolchain +SRC_ROCD := $(SRCDIR)/riscv-openocd SRC_EXPAT := $(SRCDIR)/libexpat/expat SRC_ZLIB := $(SRCDIR)/zlib +SRC_LIBUSB := $(SRCDIR)/libusb # The version that will be appended to the various tool builds. RGT_VERSION ?= $(shell cd $(SRC_RGT); git describe --tags | sed s/^v//g) +ROCD_VERSION ?= $(shell cd $(SRC_ROCD); git describe --tags | sed s/^v//g) # The actual output of this repository is a set of tarballs. -.PHONY: win64 -win64: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WIN64).zip -win64: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WIN64).tar.gz -win64: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WI64).src.tar.gz -.PHONY: ubuntu -ubuntu: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(UBUNTU).tar.gz -ubuntu: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(UBUNTU).src.tar.gz +.PHONY: windows windows-openocd windows-gcc +win64: win64-openocd win64-gcc +win64-gcc: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WIN64).zip +win64-gcc: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WIN64).tar.gz +win64-gcc: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(WIN64).src.tar.gz +win64-openocd: $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-$(WIN64).zip +win64-openocd: $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-$(WIN64).tar.gz +win64-openocd: $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-$(WIN64).src.tar.gz +.PHONY: ubuntu ubuntu-gcc ubuntu-openocd +ubuntu: ubuntu-gcc ubuntu-openocd +ubuntu-gcc: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(UBUNTU).tar.gz +ubuntu-gcc: $(BINDIR)/riscv64-unknown-elf-gcc-$(RGT_VERSION)-$(UBUNTU).src.tar.gz +ubuntu-openocd: $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-$(UBUNTU).tar.gz +ubuntu-openocd: $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-$(UBUNTU).src.tar.gz # FIXME: Check to see if the Windows tools should be built based on the # presence of the Windows cross compiler. @@ -39,7 +49,7 @@ all: ubuntu # Some special riscv-gnu-toolchain configure flags for specific targets. i686-w64-mingw32-rgt-configure := --without-system-zlib -i686-w64-mingw32-rocd-vars := LIBUSB1_LIBS="-L$(abspath $(OBJ_WIN64)/install/riscv-openocd-$(RGT_VERSION)-$(WIN64))/lib" +i686-w64-mingw32-rocd-vars := LIBUSB1_LIBS="-L$(abspath $(OBJ_WIN64)/install/riscv-openocd-$(ROCD_VERSION)-$(WIN64))/lib" # There's enough % rules that make starts blowing intermediate files away. .SECONDARY: @@ -108,6 +118,69 @@ $(OBJDIR)/%/build/expat/configure: cd $(dir $@); ./buildconf.sh touch -c $@ +# The OpenOCD builds go here +$(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.zip: \ + $(OBJDIR)/%/stamps/riscv-openocd/install.stamp + $(eval $@_TARGET := $(patsubst $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.zip,%,$@)) + mkdir -p $(dir $@) + cd $(OBJDIR)/$($@_TARGET)/install; zip -r $(abspath $@) riscv-openocd-$(ROCD_VERSION)-$($@_TARGET) + +$(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.tar.gz: \ + $(OBJDIR)/%/stamps/riscv-openocd/install.stamp + $(eval $@_TARGET := $(patsubst $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.tar.gz,%,$@)) + mkdir -p $(dir $@) + tar -C $(OBJDIR)/$($@_TARGET)/install -c riscv-openocd-$(ROCD_VERSION)-$($@_TARGET) | gzip > $(abspath $@) + +$(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.src.tar.gz: \ + $(OBJDIR)/%/stamps/riscv-openocd/install.stamp + $(eval $@_TARGET := $(patsubst $(BINDIR)/riscv-openocd-$(ROCD_VERSION)-%.src.tar.gz,%,$@)) + mkdir -p $(dir $@) + tar -C $(OBJDIR)/$($@_TARGET)/build -c . | gzip > $(abspath $@) + +$(OBJDIR)/%/stamps/riscv-openocd/install.stamp: \ + $(OBJDIR)/%/stamps/libusb/install.stamp \ + $(OBJDIR)/%/build/riscv-openocd/configure + $(eval $@_TARGET := $(patsubst $(OBJDIR)/%/stamps/riscv-openocd/install.stamp,%,$@)) + $(eval $@_BUILD := $(patsubst %/stamps/riscv-openocd/install.stamp,%/build/riscv-openocd,$@)) + $(eval $@_INSTALL := $(patsubst %/stamps/riscv-openocd/install.stamp,%/install/riscv-openocd-$(ROCD_VERSION)-$($@_TARGET),$@)) + mkdir -p $($@_BUILD) + cd $($@_BUILD); $($($@_TARGET)-rocd-vars) ./configure --prefix=$(abspath $($@_INSTALL)) --host=$($@_TARGET) --enable-remote-bitbang --disable-werror --enable-ftdi + $(MAKE) -C $($@_BUILD) + $(MAKE) -C $($@_BUILD) install + mkdir -p $(dir $@) + date > $@ + +$(OBJDIR)/%/build/riscv-openocd/configure: + rm -rf $(dir $@) + mkdir -p $(dir $@) + cp -r $(SRC_ROCD)/* $(dir $@) + cd $(dir $@); autoreconf -i + touch -c $@ + +# Use the host libusb unless we expect there to be none +$(OBJ_WIN64)/stamps/riscv-openocd/install.stamp: \ + $(OBJ_WIN64)/stamps/libusb/install.stamp + +# OpenOCD needs libusb +$(OBJDIR)/%/stamps/libusb/install.stamp: \ + $(OBJDIR)/%/build/libusb/configure + $(eval $@_TARGET := $(patsubst $(OBJDIR)/%/stamps/libusb/install.stamp,%,$@)) + $(eval $@_BUILD := $(patsubst %/stamps/libusb/install.stamp,%/build/libusb,$@)) + $(eval $@_INSTALL := $(patsubst %/stamps/libusb/install.stamp,%/install/riscv-openocd-$(ROCD_VERSION)-$($@_TARGET),$@)) + mkdir -p $($@_BUILD) + cd $($@_BUILD); ./configure --prefix=$(abspath $($@_INSTALL)) --host=$($@_TARGET) --disable-udev + $(MAKE) -C $($@_BUILD) + $(MAKE) -C $($@_BUILD) install + mkdir -p $(dir $@) + date > $@ + +$(OBJDIR)/%/build/libusb/configure: + rm -rf $(dir $@) + mkdir -p $(dir $@) + cp -r $(SRC_LIBUSB)/* $(dir $@) + cd $(dir $@); ./autogen.sh --disable-udev + touch -c $@ + # Targets that don't build anything .PHONY: clean clean:: diff --git a/src/libusb b/src/libusb new file mode 160000 index 000000000..448eb4e38 --- /dev/null +++ b/src/libusb @@ -0,0 +1 @@ +Subproject commit 448eb4e38e8e3e1e2f0cd3ba8cefe64fcc6e1326 diff --git a/src/riscv-openocd b/src/riscv-openocd new file mode 160000 index 000000000..11008baee --- /dev/null +++ b/src/riscv-openocd @@ -0,0 +1 @@ +Subproject commit 11008baee3c5e9b10056b28d5b1aac86e7eef37c