diff --git a/ch32v003fun/ch32v003fun.ld b/ch32v003fun/ch32v003fun.ld
index c05071e2ada788b4533d19785be284211b3a2f1a..982bd857ebd59b8313f522d840b822662e080b68 100644
--- a/ch32v003fun/ch32v003fun.ld
+++ b/ch32v003fun/ch32v003fun.ld
@@ -2,10 +2,10 @@ ENTRY( InterruptVector )
 
 MEMORY
 {
-#if TARGET_MCU == CH32V003
+#if TARGET_MCU_LD == 0
 	FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K
 	RAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 2K
-#elif TARGET_MCU == CH32V10x
+#elif TARGET_MCU_LD == 1
 	#if MCU_PACKAGE == 1
 		FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
 		RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
@@ -15,7 +15,7 @@ MEMORY
 	#else
 		#error "Unknown MCU package"
 	#endif
-#elif TARGET_MCU == CH32V20x
+#elif TARGET_MCU_LD == 2
 	#if MCU_PACKAGE == 1
 		FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
 		RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
@@ -28,7 +28,7 @@ MEMORY
 	#else
 		#error "Unknown MCU package"
 	#endif
-#elif TARGET_MCU == CH32V30x
+#elif TARGET_MCU_LD == 3
 	#if MCU_PACKAGE == 1
 		FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K
 		RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk
index 7173808fa15db04603bceda83aadc44609f1f9d2..90fba970373b70390df16b7110ed2f984d47ef4d 100644
--- a/ch32v003fun/ch32v003fun.mk
+++ b/ch32v003fun/ch32v003fun.mk
@@ -42,6 +42,7 @@ ifeq ($(TARGET_MCU),CH32V003)
 		-I. -Wall $(EXTRA_CFLAGS)
 
 	GENERATED_LD_FILE?=$(CH32V003FUN)/generated_ch32v003.ld
+	TARGET_MCU_LD:=0
 	LINKER_SCRIPT?=$(GENERATED_LD_FILE)
 else
 	ifeq ($(findstring CH32V10,$(TARGET_MCU)),CH32V10)
@@ -99,10 +100,10 @@ clangd_clean :
 FLASH_COMMAND?=$(MINICHLINK)/minichlink -w $< $(WRITE_SECTION) -b
 
 $(GENERATED_LD_FILE) :
-	$(PREFIX)-gcc -E -P -x c -DTARGET_MCU=$(TARGET_MCU) $(CH32V003FUN)/ch32v003fun.ld > $(GENERATED_LD_FILE)
+	$(PREFIX)-gcc -E -P -x c -DTARGET_MCU=$(TARGET_MCU) -DMCU_PACKAGE=$(MCU_PACKAGE) -DTARGET_MCU_LD=$(TARGET_MCU_LD) $(CH32V003FUN)/ch32v003fun.ld > $(GENERATED_LD_FILE)
 
 
-$(TARGET).elf : $(FILES_TO_COMPILE) $(LINKER_SCRIPT)
+$(TARGET).elf : $(FILES_TO_COMPILE) $(LINKER_SCRIPT) $(EXTRA_ELF_DEPENDENCIES)
 	$(PREFIX)-gcc -o $@ $(FILES_TO_COMPILE) $(CFLAGS) $(LDFLAGS)
 
 cv_flash : $(TARGET).bin
diff --git a/ch32v003fun/ch32v10xfun.mk b/ch32v003fun/ch32v10xfun.mk
index aaa1e4dd11e315b0ec5f30ac0997bd5ea55108d0..b5a073a0f4500cf96fd979e7c5c1ecee333f00a4 100644
--- a/ch32v003fun/ch32v10xfun.mk
+++ b/ch32v003fun/ch32v10xfun.mk
@@ -25,6 +25,8 @@ else ifeq ($(findstring C6, $(TARGET_MCU_PACKAGE)), C6)
 	MCU_PACKAGE:=2
 endif
 
+TARGET_MCU_LD:=1
+
 GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld
 LINKER_SCRIPT:=$(GENERATED_LD_FILE)
 FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES)
diff --git a/ch32v003fun/ch32v20xfun.mk b/ch32v003fun/ch32v20xfun.mk
index f88a9c36d6cc2a6c30862b0035fb1b2d37d42d8d..eb9e8fee42896e976597cdf3ce8ecb5988fc0cb0 100644
--- a/ch32v003fun/ch32v20xfun.mk
+++ b/ch32v003fun/ch32v20xfun.mk
@@ -52,6 +52,8 @@ else
 	CFLAGS+=-DCH32V20x_D6
 endif
 
+TARGET_MCU_LD:=2
+
 GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld
 LINKER_SCRIPT:=$(GENERATED_LD_FILE)
 FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES)
diff --git a/ch32v003fun/ch32v30xfun.mk b/ch32v003fun/ch32v30xfun.mk
index a937bc0418fb2570ab4b8cd805febd6d58377f75..0b1600c1c7da18c8ed87aa871bfc6d93690196c3 100644
--- a/ch32v003fun/ch32v30xfun.mk
+++ b/ch32v003fun/ch32v30xfun.mk
@@ -38,6 +38,8 @@ else
 	CFLAGS+=-DCH32V30x_D8C
 endif
 
+TARGET_MCU_LD:=3
+
 GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld
 LINKER_SCRIPT:=$(GENERATED_LD_FILE)
 FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES)