diff --git a/software/Makefile b/software/Makefile
index 662aa38c83b89b88f0cbedef0076dd4abf0e98cd..c75b380ff4dace74bcca60b33d8f220e67b59d50 100644
--- a/software/Makefile
+++ b/software/Makefile
@@ -11,14 +11,5 @@ DIRS += htvic
 
 .PHONY: all clean modules install modules_install $(DIRS)
 
-all clean: $(DIRS)
-
-clean:
-	$(MAKE)
-clean: TARGET = clean
-modules: TARGET = modules
-install: TARGET = install
-modules_install: TARGET = modules_install
-
-$(DIRS):
-	$(MAKE) -C $@ $(TARGET)
+all clean modules install modules_install:
+	for D in $(DIRS); do $(MAKE) -C $$D $@; done
diff --git a/software/i2c-ocores/Makefile b/software/i2c-ocores/Makefile
index 031104c2710d6ff298ed7e6a401f5acbe2782844..27082da2e82a5454d845ccb1f9b65a802b248c07 100644
--- a/software/i2c-ocores/Makefile
+++ b/software/i2c-ocores/Makefile
@@ -6,8 +6,8 @@ REPO_PARENT ?= $(shell /bin/pwd)/../..
 
 all: modules
 
-modules clean:
-	export CONFIG_I2C_OCORES=m
+install: modules_install
+clean modules modules_install:
 	make -C $(shell pwd)/drivers/i2c/busses $@
 
-.PHONY: all modules clean
+.PHONY: modules modules_install clean all
diff --git a/software/i2c-ocores/drivers/i2c/busses/Makefile b/software/i2c-ocores/drivers/i2c/busses/Makefile
index 86659486780f8891a3a56b09c80eb3d3e6c15882..5947198ded76aa54a4eca5f1a4dedb605777d9b4 100644
--- a/software/i2c-ocores/drivers/i2c/busses/Makefile
+++ b/software/i2c-ocores/drivers/i2c/busses/Makefile
@@ -8,12 +8,7 @@ LINUX ?= /lib/modules/$(shell uname -r)/build
 
 all: modules
 
-modules: i2c-ocores
+clean modules help modules_install:
+	$(MAKE) -C $(LINUX) M=$(shell /bin/pwd) CONFIG_I2C_OCORES=m $@
 
-clean:
-	rm -f *.o *.ko *.mod.o *.mod.c Module.symvers modules.order
-
-i2c-ocores:
-	make -C $(LINUX) M=$(shell pwd) CONFIG_I2C_OCORES=m modules
-
-.PHONY: all modules clean
+.PHONY: all modules clean help install modules_install
diff --git a/software/spi-ocores/Makefile b/software/spi-ocores/Makefile
index 41ad078ee1b9680408b0aaa9af7edd448d41364b..d385f287dbd7426d35a1ac8fd9e0f6f876224b42 100644
--- a/software/spi-ocores/Makefile
+++ b/software/spi-ocores/Makefile
@@ -6,7 +6,8 @@ REPO_PARENT ?= $(shell /bin/pwd)/../..
 
 all: modules
 
-modules clean:
+install: modules_install
+clean modules modules_install:
 	make -C $(shell pwd)/drivers/spi $@
 
-.PHONY: all modules clean
+.PHONY: modules modules_install clean all
diff --git a/software/spi-ocores/drivers/spi/Makefile b/software/spi-ocores/drivers/spi/Makefile
index f5fca937ef36e4a9a2c3325e2bc2a2dc7adfe2ab..023b6bba65a65ef745ad9b215d63e9df27e6a2fd 100644
--- a/software/spi-ocores/drivers/spi/Makefile
+++ b/software/spi-ocores/drivers/spi/Makefile
@@ -8,13 +8,7 @@ LINUX ?= /lib/modules/$(shell uname -r)/build
 
 all: modules
 
-modules: spi-ocores
+clean modules help modules_install:
+	$(MAKE) -C $(LINUX) M=$(shell /bin/pwd) CONFIG_SPI_OCORES=m $@
 
-clean:
-	rm -f *.o *.ko *.mod.o *.mod.c Module.symvers modules.order
-
-spi-ocores:
-	make -C $(LINUX) M=$(shell pwd) CONFIG_SPI_OCORES=m modules
-
-
-.PHONY: all modules clean
+.PHONY: all modules clean help install modules_install