diff --git a/makefiles/periph.mk b/makefiles/periph.mk
new file mode 100644
index 0000000000000000000000000000000000000000..a35cf69da0fb678b8859e33c15e9940646bb764a
--- /dev/null
+++ b/makefiles/periph.mk
@@ -0,0 +1,12 @@
+MODULE ?= periph
+
+# enable submodules
+SUBMODULES := 1
+
+# don't fail if requested submodule does not have corresponding *.c file
+SUBMODULES_NOFORCE := 1
+
+# in case of e.g., <cpu>_periph_common, use periph_* as submodule prefix
+BASE_MODULE := periph
+
+include $(RIOTBASE)/Makefile.base
diff --git a/makefiles/pseudomodules.inc.mk b/makefiles/pseudomodules.inc.mk
index 8bc25214d1f0da27e0504dc93d606c03a1fbf1ec..72f302ae0a617919a849f063634c643dcd07ccfa 100644
--- a/makefiles/pseudomodules.inc.mk
+++ b/makefiles/pseudomodules.inc.mk
@@ -97,3 +97,7 @@ PSEUDOMODULES += prng_%
 
 # STM32 periph pseudomodules
 PSEUDOMODULES += stm32_periph_%
+
+# declare periph submodules as pseudomodules, but exclude periph_common
+PSEUDOMODULES += periph_%
+NO_PSEUDOMODULES += periph_common