Skip to content

Instantly share code, notes, and snippets.

@royratcliffe
Last active October 21, 2023 20:22
Show Gist options
  • Save royratcliffe/27aca7cbdc40381eecfd2b9e893f7250 to your computer and use it in GitHub Desktop.
Save royratcliffe/27aca7cbdc40381eecfd2b9e893f7250 to your computer and use it in GitHub Desktop.
package-swipl
# swipl supports arch for which libc fenv.h provides all four macros:
# FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD
# See for example in glibc https://sourceware.org/git/glibc.git
# git grep -E '^[[:space:]]*#[[:space:]]*define[[:space:]]+FE_(TONEAREST|UPWARD|DOWNWARD|TOWARDZERO)' sysdeps/
config BR2_PACKAGE_SWIPL_ARCH_SUPPORTS
bool
default y if BR2_aarch64 || BR2_aarch64_be
default y if BR2_arceb || BR2_arcle
default y if BR2_arm || BR2_armeb
default y if BR2_i386
default y if BR2_m68k
# BR2_microblaze has only FE_TONEAREST
default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
# BR2_nios2 has only FE_TONEAREST
default y if BR2_or1k
default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
default y if BR2_riscv
default y if BR2_s390x
# BR2_sh has only FE_{TONEAREST,TOWARDZERO}
default y if BR2_sparc || BR2_sparc64
default y if BR2_x86_64
# BR2_xtensa supports only uclibc which does not have fenv.h
config BR2_PACKAGE_SWIPL
bool "SWI-Prolog"
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # __has_attribute()
depends on BR2_PACKAGE_SWIPL_ARCH_SUPPORTS
# swipl needs fenv.h which is not provided by uclibc
depends on !BR2_TOOLCHAIN_USES_UCLIBC
select BR2_PACKAGE_ZLIB
help
SWI-Prolog offers a comprehensive free Prolog
environment. Since its start in 1987, SWI-Prolog development
has been driven by the needs of real world
applications. SWI-Prolog is widely used in research and
education as well as commercial applications.
https://swi-prolog.org
# From https://www.swi-prolog.org/download/stable
sha256 33b5de34712d58f14c1e019bd1613df9a474f5e5fd024155a0f6e67ebb01c307 swipl-9.0.2.tar.gz
# Locally calculated
sha256 770594d0f4463b71f1485f00e4bc5cf4b6f667d62ef6bc9bde2fee236541992a LICENSE
################################################################################
#
# swipl
#
################################################################################
SWIPL_VERSION = 9.1.16
SWIPL_SITE = https://www.swi-prolog.org/download/devel/src
SWIPL_LICENSE = BSD-2-Clause
SWIPL_LICENSE_FILES = LICENSE
SWIPL_DEPENDENCIES = host-swipl zlib
# A host-swipl is needed to compile the target prolog boot
# boot.prl file.
HOST_SWIPL_CONF_OPTS = \
-DBUILD_PDF_DOCUMENTATION=OFF \
-DINSTALL_DOCUMENTATION=OFF \
-DSWIPL_PACKAGES=ON \
-DUSE_GMP=ON \
-DUSE_TCMALLOC=OFF
# swipl uses cmake macros try_run() and check_c_source_runs(), which
# are not suitable for cross compilation. We add results in cache to
# avoid running those tests. The SWIPL_NATIVE_FRIEND variable, is
# meant to point to build directory of a host native swipl, rather
# than the binary itself. The Cmake macro will append "src/swipl" to
# the path set to this variable. Therefore, we cannot use the host
# "swipl" binary installed in $(HOST_DIR)/usr/bin.
SWIPL_CONF_OPTS = \
-DBUILD_PDF_DOCUMENTATION=OFF \
-DINSTALL_DOCUMENTATION=OFF \
-DHAVE_WEAK_ATTRIBUTE=1 \
-DLLROUND_OK=1 \
-DMODF_OK=1 \
-DQSORT_R_GNU=1 \
-DSWIPL_PACKAGES=OFF \
-DSWIPL_PACKAGE_LIST="clib;pengines" \
-DTHREADS_PTHREAD_ARG=0 \
-DSWIPL_NATIVE_FRIEND=$(BUILD_DIR)/host-swipl-$(SWIPL_VERSION) \
-DUSE_TCMALLOC=OFF
ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
SWIPL_CONF_OPTS += -DCMAKE_EXE_LINKER_FLAGS=-latomic
endif
ifeq ($(BR2_PACKAGE_GMP),y)
SWIPL_CONF_OPTS += -DUSE_GMP=ON
SWIPL_DEPENDENCIES += gmp
else
SWIPL_CONF_OPTS += -DUSE_GMP=OFF
endif
ifeq ($(BR2_PACKAGE_NCURSES),y)
SWIPL_DEPENDENCIES += ncurses
endif
$(eval $(cmake-package))
$(eval $(host-cmake-package))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment