diff --git a/esp8266/Makefile b/esp8266/Makefile
index c57206c4dca92bb17d7b88953877fe0ee38bae69..5f0044df0569776a86bcd0e618be41671b5be137 100644
--- a/esp8266/Makefile
+++ b/esp8266/Makefile
@@ -7,14 +7,15 @@ MICROPY_PY_USSL = 1
 MICROPY_SSL_AXTLS = 1
 MICROPY_PY_BTREE = 1
 
+FROZEN_DIR = scripts
+FROZEN_MPY_DIR = modules
+
 # include py core make definitions
 include ../py/py.mk
 
 MPY_CROSS = ../mpy-cross/mpy-cross
 MPY_TOOL = ../tools/mpy-tool.py
 
-FROZEN_DIR = scripts
-FROZEN_MPY_DIR = modules
 PORT ?= /dev/ttyACM0
 BAUD ?= 115200
 FLASH_MODE ?= qio
@@ -90,7 +91,6 @@ SRC_C = \
 	modmachine.c \
 	modonewire.c \
 	ets_alt_task.c \
-	$(BUILD)/frozen.c \
 	fatfs_port.c \
 	axtls_helpers.c \
 	hspi.c \
diff --git a/py/py.mk b/py/py.mk
index 8caa37f8aa04a0dd4bda48612a481e3e246272a4..ab07bbbdec647afc527bdb14af8b40038dc02468 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -237,6 +237,10 @@ PY_O_BASENAME = \
 # prepend the build destination prefix to the py object files
 PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
 
+ifneq ($(FROZEN_DIR),)
+PY_O += $(BUILD)/$(BUILD)/frozen.o
+endif
+
 # Sources that may contain qstrings
 SRC_QSTR_IGNORE = nlr% emitnx% emitnthumb% emitnarm%
 SRC_QSTR = $(SRC_MOD) $(addprefix py/,$(filter-out $(SRC_QSTR_IGNORE),$(PY_O_BASENAME:.o=.c)) emitnative.c)
diff --git a/zephyr/Makefile b/zephyr/Makefile
index 1db84cb320361a1bfeb9d647a7f24709b9f3b631..9682dc5ccf6cc80b8c332cd84c0dabdb8161ca31 100644
--- a/zephyr/Makefile
+++ b/zephyr/Makefile
@@ -41,7 +41,6 @@ SRC_C = main.c \
 	lib/utils/interrupt_char.c \
 	lib/utils/pyhelp.c \
 	lib/mp-readline/readline.c \
-	$(BUILD)/frozen.c \
 	$(SRC_MOD)
 
 # List of sources for qstr extraction