diff --git a/contrib/src/guile/rules.mak b/contrib/src/guile/rules.mak
index 361704b531307aae5faa0dbb867a352873e9e559..7443a822dca2e139485cdbd5ffb287479e48f479 100644
--- a/contrib/src/guile/rules.mak
+++ b/contrib/src/guile/rules.mak
@@ -7,7 +7,7 @@ ifeq ($(call need_pkg "libguile-3.0 >= 3.0.7"),)
 PKGS_FOUND += guile
 endif
 
-DEPS_guile = gmp iconv
+DEPS_guile = gmp iconv libunistring libffi libgc
 
 $(TARBALLS)/guile-$(GUILE_VERSION).tar.gz:
 	$(call download,$(GUILE_URL))
diff --git a/contrib/src/libffi/SHA512SUMS b/contrib/src/libffi/SHA512SUMS
new file mode 100644
index 0000000000000000000000000000000000000000..497e3960874a6c266342201100640d5726d2088d
--- /dev/null
+++ b/contrib/src/libffi/SHA512SUMS
@@ -0,0 +1 @@
+61513801a156f11420f541d325de697131846487122d6bdcf5491b18b4da788589f5c0bb07e88e396495d3be5830d74e9135595e2b8ddbfe95c448d8597fbd6f  libffi-3.3.tar.gz
diff --git a/contrib/src/libffi/package.json b/contrib/src/libffi/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..46119f09223ad95b7ae906f33264017d65d2eab5
--- /dev/null
+++ b/contrib/src/libffi/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "libffi",
+    "version": "8.0.4",
+    "url": "ftp://sourceware.org/pub/libffi-__VERSION__.tar.gz"
+    "deps": [
+    ],
+    "patches": [],
+    "win_patches": [],
+    "project_paths": [
+    ],
+    "with_env" : "",
+    "custom_scripts": {
+        "pre_build": [],
+        "build": [],
+        "post_build": []
+    }
+}
diff --git a/contrib/src/libffi/rules.mak b/contrib/src/libffi/rules.mak
new file mode 100644
index 0000000000000000000000000000000000000000..b106268c995d7dcd43de0df50fe92e33b545cb27
--- /dev/null
+++ b/contrib/src/libffi/rules.mak
@@ -0,0 +1,24 @@
+# libffi
+
+LIBFFI_VERSION := 3.3
+LIBFFI_URL     := ftp://sourceware.org/pub/libffi/libffi-${LIBFFI_VERSION}.tar.gz
+
+DEPS_libffi=
+
+$(TARBALLS)/libffi-$(LIBFFI_VERSION).tar.gz:
+	$(call download,$(LIBFFI_URL))
+
+.sum-libffi: libffi-$(LIBFFI_VERSION).tar.gz
+
+libffi: libffi-$(LIBFFI_VERSION).tar.gz .sum-libffi
+	$(UNPACK)
+	$(UPDATE_AUTOCONFIG)
+	$(MOVE)
+
+LIBFFI_CONF := \
+	$(HOSTCONF)
+
+.libffi: libffi
+	cd $< && $(HOSTVARS) ./configure $(LIBFFI_CONF)
+	cd $< && $(MAKE) install
+	touch $@
diff --git a/contrib/src/libgc/SHA512SUMS b/contrib/src/libgc/SHA512SUMS
new file mode 100644
index 0000000000000000000000000000000000000000..41a8ef745d8fcac6d8e22bfedd35d99d1de3a63a
--- /dev/null
+++ b/contrib/src/libgc/SHA512SUMS
@@ -0,0 +1 @@
+57ccca15c6e50048d306a30de06c1a844f36103a84c2d1c17cbccbbc0001e17915488baec79737449982da99ce5d14ce527176afae9ae153cbbb5a19d986366e  libgc-8.0.4.tar.gz
diff --git a/contrib/src/libgc/package.json b/contrib/src/libgc/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d935a10dfea6a6aaef297842d90cfca62ac0b776
--- /dev/null
+++ b/contrib/src/libgc/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "libgc",
+    "version": "3.3",
+    "url": "https://github.com/ivmai/bdwgc/releases/download/v__VERSION__/gc-__VERSION__.tar.gz"
+    "deps": [
+    ],
+    "patches": [],
+    "win_patches": [],
+    "project_paths": [
+    ],
+    "with_env" : "",
+    "custom_scripts": {
+        "pre_build": [],
+        "build": [],
+        "post_build": []
+    }
+}
diff --git a/contrib/src/libgc/rules.mak b/contrib/src/libgc/rules.mak
new file mode 100644
index 0000000000000000000000000000000000000000..94a0c8467306ae97689ec13c654b270be3ca1a14
--- /dev/null
+++ b/contrib/src/libgc/rules.mak
@@ -0,0 +1,28 @@
+# libgc
+
+LIBGC_VERSION := 8.0.4
+LIBGC_URL     := https://github.com/ivmai/bdwgc/releases/download/v${LIBGC_VERSION}/gc-${LIBGC_VERSION}.tar.gz
+
+DEPS_libgc=
+
+$(TARBALLS)/libgc-$(LIBGC_VERSION).tar.gz:
+	$(call download,$(LIBGC_URL))
+
+.sum-libgc: libgc-$(LIBGC_VERSION).tar.gz
+
+libgc: libgc-$(LIBGC_VERSION).tar.gz .sum-libgc
+	$(UNPACK)
+	mv gc-$(LIBGC_VERSION) libgc-$(LIBGC_VERSION)
+	$(UPDATE_AUTOCONFIG)
+	$(MOVE)
+
+LIBGC_CONF :=            \
+	$(HOSTCONF)      \
+	--disable-static \
+	--enable-shared
+
+
+.libgc: libgc
+	cd $< && $(HOSTVARS) ./configure $(LIBGC_CONF)
+	cd $< && $(MAKE) install
+	touch $@
diff --git a/contrib/src/libunistring/SHA512SUMS b/contrib/src/libunistring/SHA512SUMS
new file mode 100644
index 0000000000000000000000000000000000000000..90672c3ef48e5b1afb7d19ff5fa8234cf831d742
--- /dev/null
+++ b/contrib/src/libunistring/SHA512SUMS
@@ -0,0 +1 @@
+690082732fbbd47ab4ffbd6f21d85afece0f8e2ded24982f949f4ae52bf0a981b75ea9bc14ab289e0954cde07f31a7a4c2bb65615a8eb5b2bfa65720310b6fc9  libunistring-0.9.10.tar.gz
diff --git a/contrib/src/libunistring/package.json b/contrib/src/libunistring/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6225a40e9e195db0f3843cda0176e08a5acb0d97
--- /dev/null
+++ b/contrib/src/libunistring/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "libunistring",
+    "version": "0.9.10",
+    "url": "https://ftp.gnu.org/gnu/libunistring/libunistring-__VERSION__.tar.gz"
+    "deps": [
+    ],
+    "patches": [],
+    "win_patches": [],
+    "project_paths": [
+    ],
+    "with_env" : "",
+    "custom_scripts": {
+        "pre_build": [],
+        "build": [],
+        "post_build": []
+    }
+}
diff --git a/contrib/src/libunistring/rules.mak b/contrib/src/libunistring/rules.mak
new file mode 100644
index 0000000000000000000000000000000000000000..5bbbb3338a07550868702be2bc8f9e2814341037
--- /dev/null
+++ b/contrib/src/libunistring/rules.mak
@@ -0,0 +1,24 @@
+# libunistring
+
+LIBUNISTRING_VERSION := 0.9.10
+LIBUNISTRING_URL     := https://ftp.gnu.org/gnu/libunistring/libunistring-${LIBUNISTRING_VERSION}.tar.gz
+
+DEPS_libunistring=
+
+$(TARBALLS)/libunistring-$(LIBUNISTRING_VERSION).tar.gz:
+	$(call download,$(LIBUNISTRING_URL))
+
+.sum-libunistring: libunistring-$(LIBUNISTRING_VERSION).tar.gz
+
+libunistring: libunistring-$(LIBUNISTRING_VERSION).tar.gz .sum-libunistring
+	$(UNPACK)
+	$(UPDATE_AUTOCONFIG)
+	$(MOVE)
+
+LIBUNISTRING_CONF := \
+	$(HOSTCONF)
+
+.libunistring: libunistring
+	cd $< && $(HOSTVARS) ./configure $(LIBUNISTRING_CONF)
+	cd $< && $(MAKE) install
+	touch $@