~ruther/guix-local

484ccc138a2dcde4da5d1b9a4e62404dc5d32e7c — 宋文武 1 year, 8 months ago 5ff8d20
gnu: Add tic80.

* gnu/packages/game-development.scm (tic80): New variable.

Change-Id: I459d2a3270ac2524f7024d2aac32b954eba15c59
1 files changed, 132 insertions(+), 0 deletions(-)

M gnu/packages/game-development.scm
M gnu/packages/game-development.scm => gnu/packages/game-development.scm +132 -0
@@ 34,6 34,7 @@
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2025 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2025 宋文武 <iyzsong@envs.net>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 76,6 77,7 @@
  #:use-module (gnu packages bison)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages build-tools)
  #:use-module (gnu packages c)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages check)
  #:use-module (gnu packages curl)


@@ 101,7 103,9 @@
  #:use-module (gnu packages haskell-xyz)
  #:use-module (gnu packages icu4c)
  #:use-module (gnu packages image)
  #:use-module (gnu packages javascript)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages lisp)
  #:use-module (gnu packages llvm)
  #:use-module (gnu packages lua)
  #:use-module (gnu packages m4)


@@ 122,12 126,14 @@
  #:use-module (gnu packages python-web)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages ruby)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages sdl)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages speech)
  #:use-module (gnu packages sphinx)
  #:use-module (gnu packages sqlite)
  #:use-module (gnu packages squirrel)
  #:use-module (gnu packages stb)
  #:use-module (gnu packages swig)
  #:use-module (gnu packages texinfo)


@@ 135,6 141,7 @@
  #:use-module (gnu packages tls)
  #:use-module (gnu packages version-control)
  #:use-module (gnu packages video)
  #:use-module (gnu packages vim)
  #:use-module (gnu packages vulkan)
  #:use-module (gnu packages web)
  #:use-module (gnu packages wxwidgets)


@@ 3726,6 3733,131 @@ progresses the level, or you may regenerate tiles as the world changes.")
    (home-page "https://www.raylib.com/")
    (license license:zlib)))

(define-public tic80
  ;; Use an unreleased version for 'PREFER_SYSTEM_LIBRARIES'.
  (let ((commit "fcfd7c9862e9157512bcab53affecd592b320131")
        ;; These C libraries are used in source form by tic80.
        (3rd/jsmn
         (origin                        ;Expat
           (method git-fetch)
           (uri (git-reference
                 (url "https://github.com/zserge/jsmn")
                 (commit "25647e692c7906b96ffd2b05ca54c097948e879c")))
           (file-name "jsmn-checkout")
           (sha256
            (base32
             "19xgrap95a8ziicgd0c3fns51z1g4q06b5lb5pg76ah4ychhgg5p"))))
        (3rd/blip-buf
         (origin                        ;LGPL2.1+
           (method git-fetch)
           (uri (git-reference
                 (url "https://github.com/nesbox/blip-buf")
                 (commit "330226d9b55ecbeea644e17b5e0f096a165ca07e")))
           (file-name "blip-buf-checkout")
           (sha256
            (base32
             "0fycffd6pbh9ilmr032dlrwd6dhvpkjp2r9x98r0kmwqpxc4x90d"))))
        (3rd/msf-gif
         (origin                        ;Expat or Public Domain
           (method url-fetch)
           (uri (string-append
                 "https://github.com/notnullnotvoid/msf_gif/releases/download/"
                 "v2.3/msf_gif.h"))
           (sha256
            (base32
             "1ivjwwqxqjfhm8caz1srkp8wx7fpzvpf7s26ifif7cryvqch8vnf")))))
    (package
      (name "tic80")
      (version (git-version "1.2.0" "1" commit))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://github.com/nesbox/TIC-80")
               (commit commit)))
         (file-name (git-file-name name version))
         (sha256
          (base32
           "17zxfiji6cb9ad7j3l82bdig0k7bz77bzwg7m0vd9ywrwk0kgxjk"))
         (modules '((guix build utils)))
         (snippet
          #~(begin
              (delete-file-recursively "vendor")
              (copy-recursively #$3rd/jsmn "vendor/jsmn")
              (copy-recursively #$3rd/blip-buf "vendor/blip-buf")
              (mkdir "vendor/msf_gif")
              (copy-file #$3rd/msf-gif "vendor/msf_gif/msf_gif.h")))))
      (build-system cmake-build-system)
      (arguments
       (list #:tests? #f                ;no tests
             #:configure-flags
             #~'("-DBUILD_STATIC=ON" ;don't build runtimes as shared libraries
                 "-DPREFER_SYSTEM_LIBRARIES=ON"
                 "-DCMAKE_EXE_LINKER_FLAGS=-lpulse" ;for miniaudio
                 ;; TODO: moon, python, wren
                 "-DBUILD_WITH_FENNEL=ON"
                 "-DBUILD_WITH_JANET=ON"
                 "-DBUILD_WITH_JS=ON"
                 "-DBUILD_WITH_LUA=ON"
                 "-DBUILD_WITH_RUBY=ON"
                 "-DBUILD_WITH_SCHEME=ON"
                 "-DBUILD_WITH_SQUIRREL=ON"
                 "-DBUILD_WITH_WASM=ON")
             #:phases
             #~(modify-phases %standard-phases
                 (add-after 'unpack 'prepare-sources
                   (lambda _
                     (let* ((s7 #$(this-package-input "s7"))
                            (fennel #$(this-package-input "fennel")))
                       (install-file (string-append s7 "/include/s7.h")
                                     "vendor/s7/")
                       (install-file (string-append s7 "/share/s7/s7.c")
                                     "vendor/s7/")
                       (mkdir "vendor/fennel")
                       (copy-file (car (find-files fennel "fennel\\.lua"))
                                  "vendor/fennel/loadfennel.lua")
                       (with-directory-excursion "vendor/fennel"
                         (substitute* "loadfennel.lua"
                           (("return mod") "package.loaded['fennel'] = mod"))
                         (invoke "xxd" "-i" "loadfennel.lua" "fennel.h")))
                     (substitute* "src/api/mruby.c"
                       (("#include <mruby\\.h>" all)
                        (string-append
                         all "\n#include <mruby/internal.h>")))
                     (substitute* "src/ext/fft.c"
                       (("#include \"miniaudio\\.h\"") "
#define MA_NO_RUNTIME_LINKING
#define MA_ENABLE_ONLY_SPECIFIC_BACKENDS
#define MA_ENABLE_PULSEAUDIO
#define MA_ENABLE_NULL
#include \"miniaudio.h\"
")))))))
      (native-inputs
       (list pkg-config xxd))
      (inputs
       (list argparse
             fennel
             giflib
             janet
             kubazip
             libpng
             lua
             mruby
             naett
             pulseaudio
             quickjs
             s7
             sdl2
             squirrel
             wasm3))
      (synopsis "Fantasy tiny computer")
      (home-page "https://tic80.com/")
      (description
       "TIC-80 is a fantasy computer for making, playing and sharing tiny
games.  There are built-in tools for development: code, sprites, maps, sound
editors and the command line, which is enough to create a mini retro game.")
      (license license:expat))))

(define-public bbcsdl
  (package
    (name "bbcsdl")