diff --git a/platformio.ini b/platformio.ini
index cb1cbced5b92421ebb6cbf96928183e64713488c..c49439586e038e2e35810c2a6e68533fd88b206c 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -8,19 +8,33 @@ platform = https://github.com/Community-PIO-CH32V/platform-ch32v.git
 ; or genericCH32V003A4M6 or whatever, see platform link
 board = ch32v003f4p6_evt_r0
 monitor_speed = 115200
+; use a source filter to only build certain folders / files
+
+; for examples that use ch32v003evt as their base
+[evt_base]
 board_build.ldscript = ch32v003evt/ch32v003.ld
 build_flags = -flto -Ich32v003evt -lgcc
-; use a source filter to only build certain folders / files
+build_src_filter = +<ch32v003evt>
+
+; for examples that use ch32v003fun as their base
+[fun_base]
+board_build.ldscript = ch32v003fun/ch32v003fun.ld
+build_flags = -flto -Ich32v003fun -I/usr/include/newlib -lgcc
+build_src_filter = +<ch32v003fun>
 
 [env:blink]
-build_src_filter = +<ch32v003evt> +<examples/blink>
+extends = fun_base
+build_src_filter = ${fun_base.build_src_filter} +<examples/blink>
 
 [env:fulldemo]
-build_src_filter = +<ch32v003evt> +<examples/fulldemo>
+extends = evt_base
+build_src_filter = ${evt_base.build_src_filter} +<examples/fulldemo>
 
 ; sandbox demo does currently not compile (undefined reference to `__get_dscratch0')
 ;[env:sandbox]
-;build_src_filter = +<ch32v003evt> +<examples/sandbox>
+;extends = evt_base
+;build_src_filter = ${evt_base.build_src_filter} +<examples/sandbox>
 
 [env:ws2812demo]
-build_src_filter = +<ch32v003evt> +<examples/ws2812demo>
+extends = evt_base
+build_src_filter = ${evt_base.build_src_filter} +<examples/ws2812demo>