diff mbox series

package/libchicken: the chicken scheme programming environment

Message ID 20230118122840.19885-1-wdouglass@carnegierobotics.com
State New
Headers show
Series package/libchicken: the chicken scheme programming environment | expand

Commit Message

Woodrow Douglass Jan. 18, 2023, 12:28 p.m. UTC
This package includes the runtime library and interpreter. In the
future I plan on packaging a cross-compiler for the host as well

Signed-off-by: Woodrow Douglass <wdouglass@carnegierobotics.com>
---
 DEVELOPERS                       |  3 ++
 package/Config.in                |  1 +
 package/libchicken/Config.in     | 12 ++++++
 package/libchicken/libchicken.mk | 71 ++++++++++++++++++++++++++++++++
 4 files changed, 87 insertions(+)
 create mode 100644 package/libchicken/Config.in
 create mode 100644 package/libchicken/libchicken.mk
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index e8e0dffcd3..64d21ce2c5 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -3015,6 +3015,9 @@  F:	package/python-pyusb/
 N:	Wojciech NiziƄski <niziak@spox.org>
 F:	package/fwup/
 
+N:	Woodrow Douglass <wdouglass@carnegierobotics.com>
+F:	package/libchicken
+
 N:	Xuanhao Shi <X15000177@gmail.com>
 F:	boot/ti-k3-r5-loader/
 
diff --git a/package/Config.in b/package/Config.in
index 995dae2c57..c605abb6be 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -641,6 +641,7 @@  menu "Interpreter languages and scripting"
 	source "package/4th/Config.in"
 	source "package/enscript/Config.in"
 	source "package/erlang/Config.in"
+	source "package/libchicken/Config.in"
 if BR2_PACKAGE_ERLANG
 menu "Erlang libraries/modules"
 	source "package/erlang-base64url/Config.in"
diff --git a/package/libchicken/Config.in b/package/libchicken/Config.in
new file mode 100644
index 0000000000..173215cbef
--- /dev/null
+++ b/package/libchicken/Config.in
@@ -0,0 +1,12 @@ 
+config BR2_PACKAGE_LIBCHICKEN
+	bool "chicken-scheme-runtime"
+	depends on BR2_USE_MMU
+	help
+	  libchicken is the runtime library for chicken
+	  scheme. https://call-cc.org
+
+config BR2_LIBCHICKEN_INSTALL_INTERPRETER
+       bool "chicken-scheme-interpreter"
+       depends on BR2_PACKAGE_LIBCHICKEN
+       help
+         csi is an interpreter for the Chicken Scheme dialect
diff --git a/package/libchicken/libchicken.mk b/package/libchicken/libchicken.mk
new file mode 100644
index 0000000000..a402706c73
--- /dev/null
+++ b/package/libchicken/libchicken.mk
@@ -0,0 +1,71 @@ 
+################################################################################
+#
+# libchicken
+#
+################################################################################
+
+LIBCHICKEN_VERSION = 5.3.0
+LIBCHICKEN_SITE = https://code.call-cc.org/releases/$(LIBCHICKEN_VERSION)
+LIBCHICKEN_SOURCE = chicken-$(LIBCHICKEN_VERSION).tar.gz
+LIBCHICKEN_LICENSE = BSD
+LIBCHICKEN_LICENSE_FILES = LICENSE
+LIBCHICKEN_INSTALL_STAGING = YES
+LIBCHICKEN_INSTALL_TARGET = YES
+
+LIBCHICKEN_MAKE_ARGUMENTS=ARCH= \
+	PREFIX=/usr \
+	PLATFORM=linux \
+	C_COMPILER=${TARGET_CC} \
+	CXX_COMPILER=${TARGET_CXX} \
+	LIBRARIAN=${TARGET_AR} \
+	DESTDIR=$(STAGING_DIR)
+
+# MAKE1 is used here because the install step will fail without it. Perhaps this'll be fixed upstream someday...
+LIBCHICKEN_MAKE = $(MAKE1)
+
+ifneq ($(BR2_ARCH),x86)
+	LIBCHICKEN_MAKE_ARGUMENTS += TARGET_FEATURES="-no-feature x86 -feature ${BR2_ARCH}"
+endif
+
+ifeq ($(BR2_STATIC_LIBS),y)
+	LIBCHICKEN_MAKE_ARGUMENTS += STATICBUILD=1
+endif
+
+
+define LIBCHICKEN_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(LIBCHICKEN_MAKE) -C $(@D) ${LIBCHICKEN_MAKE_ARGUMENTS} all
+endef
+
+define LIBCHICKEN_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(LIBCHICKEN_MAKE) -C $(@D) ${LIBCHICKEN_MAKE_ARGUMENTS} install
+endef
+
+define LIBCHICKEN_INSTALL_TARGET_LIBS_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/libchicken.so.11 $(TARGET_DIR)/usr/lib
+	ln -srT $(TARGET_DIR)/usr/lib/libchicken.so.11 $(TARGET_DIR)/usr/lib/libchicken.so
+endef
+
+define LIBCHICKEN_INSTALL_TARGET_INTERPRETER_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/csi $(TARGET_DIR)/usr/bin
+endef
+
+ifeq ($(BR2_LIBCHICKEN_INSTALL_INTERPRETER),y)
+ifneq ($(BR2_STATIC_LIBS),y)
+define LIBCHICKEN_INSTALL_TARGET_CMDS
+	$(LIBCHICKEN_INSTALL_TARGET_LIBS_CMDS)
+	$(LIBCHICKEN_INSTALL_TARGET_INTERPRETER_CMDS)
+endef
+else
+define LIBCHICKEN_INSTALL_TARGET_CMDS
+	$(LIBCHICKEN_INSTALL_TARGET_INTERPRETER_CMDS)
+endef
+endif
+else
+ifneq ($(BR2_STATIC_LIBS),y)
+define LIBCHICKEN_INSTALL_TARGET_CMDS
+	$(LIBCHICKEN_INSTALL_TARGET_LIBS_CMDS)
+endef
+endif
+endif
+
+$(eval $(generic-package))