diff --git a/ch32v003fun/ch32v003fun.c b/ch32v003fun/ch32v003fun.c
index 9fbd93d1fc53ceb6afa2302960e2d1896647258a..cd0d32ec31e1cc5408824bfeb7d80385a55da4f2 100644
--- a/ch32v003fun/ch32v003fun.c
+++ b/ch32v003fun/ch32v003fun.c
@@ -71,6 +71,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 typedef void * mbstate_t;
 
+#ifdef UNICODE
 size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st)
 {
 	if (!s) return 1;
@@ -108,6 +109,7 @@ int wctomb(char *s, wchar_t wc)
 	if (!s) return 0;
 	return wcrtomb(s, wc, 0);
 }
+#endif
 size_t strlen(const char *s) { const char *a = s;for (; *s; s++);return s-a; }
 size_t strnlen(const char *s, size_t n) { const char *p = memchr(s, 0, n); return p ? p-s : n;}
 void *memset(void *dest, int c, size_t n) { unsigned char *s = dest; for (; n; n--, s++) *s = c; return dest; }
diff --git a/ch32v003fun/ch32v003fun.h b/ch32v003fun/ch32v003fun.h
index a32e339ed4fc7f31f06a9f7eae5e5f9d84f705d2..4b33a1b1c8fb51cb8dc0c689c6e1ef68c40e0fc1 100644
--- a/ch32v003fun/ch32v003fun.h
+++ b/ch32v003fun/ch32v003fun.h
@@ -4822,7 +4822,7 @@ extern "C" {
 #define DELAY_US_TIME ((SYSTEM_CORE_CLOCK)/8000000)
 #define DELAY_MS_TIME ((SYSTEM_CORE_CLOCK)/8000)
 
-#if defined(__riscv) || defined(__riscv__)
+#if defined(__riscv) || defined(__riscv__) || defined( CH32V003FUN_BASE )
 
 // Stuff that can only be compiled on device (not for the programmer, or other host programs)
 
diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk
index 6beb3fc9f2ba3dba9b9e70a7193e418a6a560906..756acc64c68c09897c545816969b570e15aec1a5 100644
--- a/ch32v003fun/ch32v003fun.mk
+++ b/ch32v003fun/ch32v003fun.mk
@@ -31,6 +31,9 @@ $(TARGET).bin : $(TARGET).elf
 monitor : 
 	$(MINICHLINK)/minichlink -T
 
+gdbserver : 
+	$(MINICHLINK)/minichlink -G || true
+
 cv_flash : $(TARGET).bin
 	make -C $(MINICHLINK) all
 	$(MINICHLINK)/minichlink -w $< flash -b