gnu: bootloader: Add grub-minimal-bootloader.
[jackhill/guix/guix.git] / gnu / packages / gl.scm
CommitLineData
daca8666 1;;; GNU Guix --- Functional package management for GNU
187731a5 2;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
822efdff 3;;; Copyright © 2013 Joshua Grant <tadni@riseup.net>
432360d7 4;;; Copyright © 2014, 2016 David Thompson <davet@gnu.org>
d0d0f8d1 5;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
47956fa0 6;;; Copyright © 2016 ng0 <ng0@n0.is>
ad1edd03 7;;; Copyright © 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
b4c8c413 8;;; Copyright © 2016 David Thompson <davet@gnu.org>
ba4c0d69 9;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
725d8d2c 10;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
e6a668ec 11;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
8d6813f9 12;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
5c154738 13;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
8ae17933 14;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
daca8666
JG
15;;;
16;;; This file is part of GNU Guix.
17;;;
18;;; GNU Guix is free software; you can redistribute it and/or modify it
19;;; under the terms of the GNU General Public License as published by
20;;; the Free Software Foundation; either version 3 of the License, or (at
21;;; your option) any later version.
22;;;
23;;; GNU Guix is distributed in the hope that it will be useful, but
24;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26;;; GNU General Public License for more details.
27;;;
28;;; You should have received a copy of the GNU General Public License
29;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
30
31(define-module (gnu packages gl)
c4a667bf 32 #:use-module (gnu packages)
b021a2ad 33 #:use-module (gnu packages autotools)
200726ed 34 #:use-module (gnu packages bison)
725d8d2c 35 #:use-module (gnu packages compression)
432360d7 36 #:use-module (gnu packages documentation)
653569e8 37 #:use-module (gnu packages elf)
200726ed 38 #:use-module (gnu packages flex)
3a92a5b3
DC
39 #:use-module (gnu packages fontutils)
40 #:use-module (gnu packages freedesktop)
ce4d7abf 41 #:use-module (gnu packages gettext)
3a92a5b3 42 #:use-module (gnu packages guile)
725d8d2c 43 #:use-module (gnu packages image)
ce4d7abf 44 #:use-module (gnu packages linux)
093c6f8b 45 #:use-module (gnu packages llvm)
bea58fa1 46 #:use-module (gnu packages mono)
3a92a5b3 47 #:use-module (gnu packages pkg-config)
200726ed 48 #:use-module (gnu packages python)
44d10b1f 49 #:use-module (gnu packages python-xyz)
d64f3439 50 #:use-module (gnu packages tls)
7e31978b 51 #:use-module (gnu packages video)
301b2e74 52 #:use-module (gnu packages vulkan)
2b226af1 53 #:use-module (gnu packages xdisorg)
3a92a5b3
DC
54 #:use-module (gnu packages xml)
55 #:use-module (gnu packages xorg)
3a92a5b3 56 #:use-module (guix download)
872ea4eb 57 #:use-module (guix git-download)
5c154738 58 #:use-module (guix hg-download)
3a92a5b3
DC
59 #:use-module (guix build-system gnu)
60 #:use-module (guix build-system cmake)
54d860cc 61 #:use-module (guix build-system meson)
3a92a5b3
DC
62 #:use-module ((guix licenses) #:prefix license:)
63 #:use-module (guix packages)
64 #:use-module (guix utils)
3ee7b4cc 65 #:use-module (ice-9 match)
af403cf0 66 #:use-module ((srfi srfi-1) #:hide (zip)))
daca8666
JG
67
68(define-public glu
69 (package
70 (name "glu")
1dff73ac 71 (version "9.0.1")
daca8666 72 (source (origin
a124bbd2
SB
73 (method url-fetch)
74 (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/glu/glu-"
75 version ".tar.gz"))
76 (sha256
77 (base32
1dff73ac 78 "1xqhk9bn10nbvffw3r4p4rjslwz1l7gaycc0x2pqkr2irp7q9x7n"))))
daca8666 79 (build-system gnu-build-system)
187731a5 80 (propagated-inputs
a124bbd2 81 `(("mesa" ,mesa))) ; according to glu.pc
daca8666
JG
82 (home-page "http://www.opengl.org/archives/resources/faq/technical/glu.htm")
83 (synopsis "Mesa OpenGL Utility library")
84 (description
85 "GLU, or OpenGL Utility Library provides some higher-level functionality
35b9e423 86not provided by just OpenGL itself. Some of GLU's Features
daca8666
JG
87include: Scaling of 2D images and creation of mipmap pyramids,
88Transformation of object coordinates into device coordinates and
89vice versa, Support for NURBS surfaces, Support for tessellation
90of concave or bow tie polygonal primitives, Specialty transformation
91matrices for creating perspective and orthographic projections,
92positioning a camera, and selection/picking, Rendering of disk,
93cylinder, and sphere primitives, Interpreting OpenGL error values
94as ASCII text.")
584f2e1b 95 (license (license:x11-style "http://directory.fsf.org/wiki/License:SGIFreeBv2"))))
daca8666
JG
96
97(define-public freeglut
98 (package
99 (name "freeglut")
64136870 100 (version "3.2.1")
daca8666 101 (source (origin
a124bbd2
SB
102 (method url-fetch)
103 (uri (string-append
0f971a04 104 "mirror://sourceforge/freeglut/freeglut/"
a124bbd2
SB
105 version "/freeglut-" version ".tar.gz"))
106 (sha256
107 (base32
64136870 108 "0s6sk49q8ijgbsrrryb7dzqx2fa744jhx1wck5cz5jia2010w06l"))))
8ce36e81 109 (build-system cmake-build-system)
5f613047
MB
110 (arguments
111 '(#:tests? #f ;no test target
112 #:configure-flags '("-DFREEGLUT_BUILD_STATIC_LIBS=OFF")))
64136870 113 (inputs `(("libx11" ,libx11)
a124bbd2
SB
114 ("libxi" ,libxi)
115 ("libxrandr" ,libxrandr)
64136870 116 ("libxxf86vm" ,libxxf86vm)))
9b5db9be
TUBK
117 (propagated-inputs
118 ;; Headers from Mesa and GLU are needed.
119 `(("glu" ,glu)
120 ("mesa" ,mesa)))
daca8666
JG
121 (home-page "http://freeglut.sourceforge.net/")
122 (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
123 (description
124 "Freeglut is a completely Free/OpenSourced alternative to
35b9e423 125the OpenGL Utility Toolkit (GLUT) library. GLUT was originally
daca8666 126written by Mark Kilgard to support the sample programs in the
36a4366d 127second edition OpenGL @code{RedBook}. Since then, GLUT has been used
daca8666
JG
128in a wide variety of practical applications because it is simple,
129widely available and highly portable.
130
131GLUT (and hence freeglut) allows the user to create and manage windows
132containing OpenGL contexts on a wide range of platforms and also read
35b9e423 133the mouse, keyboard and joystick functions. Freeglut is released under
daca8666 134the X-Consortium license.")
584f2e1b 135 (license license:x11)))
daca8666 136
0da0f434
RW
137;; Needed for "kiki".
138(define-public freeglut-2.8
139 (package (inherit freeglut)
140 (name "freeglut")
141 (version "2.8.1")
142 (source (origin
143 (method url-fetch)
144 (uri (string-append
145 "mirror://sourceforge/freeglut/freeglut/"
146 version "/freeglut-" version ".tar.gz"))
147 (sha256
148 (base32
149 "16lrxxxd9ps9l69y3zsw6iy0drwjsp6m26d1937xj71alqk6dr6x"))))
80921d29
MB
150 (build-system gnu-build-system)
151 (arguments
152 '(#:configure-flags '("--disable-static")))))
0da0f434 153
daca8666
JG
154(define-public ftgl
155 (package
156 (name "ftgl")
c7e31cde
MB
157 (version "2.4.0")
158 (home-page "https://github.com/frankheckenbach/ftgl")
daca8666 159 (source (origin
c7e31cde
MB
160 (method git-fetch)
161 (uri (git-reference (url home-page)
162 (commit (string-append "v" version))))
163 (file-name (git-file-name name version))
a124bbd2
SB
164 (sha256
165 (base32
c7e31cde 166 "0zjs1h9w30gajq9lndzvjsa26rsmr1081lb1fbpbj10yhcdcsc79"))))
daca8666 167 (build-system gnu-build-system)
2e652add
MB
168 (arguments
169 `(#:configure-flags '("--disable-static")))
9e850534
RW
170 ;; The pkg-config file lists "freetype2" as Requires.private.
171 (propagated-inputs `(("freetype" ,freetype)))
172 (inputs `(("libx11" ,libx11)
a124bbd2
SB
173 ("mesa" ,mesa)
174 ("glu" ,glu)))
a53a5b71 175 (native-inputs
c7e31cde
MB
176 `(("pkg-config" ,pkg-config)
177 ("autoconf" ,autoconf)
178 ("automake" ,automake)
179 ("libtool" ,libtool)))
daca8666
JG
180 (synopsis "Font rendering library for OpenGL applications")
181 (description
35b9e423 182 "FTGL is a font rendering library for OpenGL applications. Supported
daca8666 183rendering modes are: Bitmaps, Anti-aliased pixmaps, Texture maps, Outlines,
e881752c 184Polygon meshes, and Extruded polygon meshes.")
584f2e1b 185 (license license:x11)))
200726ed 186
b021a2ad
TUBK
187(define-public s2tc
188 (package
189 (name "s2tc")
190 (version "1.0")
191 (source
192 (origin
872ea4eb
RW
193 (method git-fetch)
194 (uri (git-reference
195 (url "https://github.com/divVerent/s2tc.git")
196 (commit (string-append "v" version))))
197 (file-name (git-file-name name version))
b021a2ad 198 (sha256
872ea4eb 199 (base32 "1fg323fk7wlv2xh6lw66wswgcv6qi8aaadk7c28h2f2lj1s7njnf"))))
b021a2ad
TUBK
200 (build-system gnu-build-system)
201 (native-inputs
202 `(("autoconf" ,autoconf)
203 ("automake" ,automake)
204 ("libtool" ,libtool)))
205 (inputs
206 `(("mesa-headers" ,mesa-headers)))
b021a2ad
TUBK
207 (home-page "https://github.com/divVerent/s2tc")
208 (synopsis "S3 Texture Compression implementation")
209 (description
210 "S2TC is a patent-free implementation of S3 Texture Compression (S3TC,
211also known as DXTn or DXTC) for Mesa.")
584f2e1b 212 (license license:expat)))
b021a2ad 213
7e31978b
TUBK
214;;; Mesa needs LibVA headers to build its Gallium-based VA API implementation;
215;;; LibVA itself depends on Mesa. We use the following to solve the circular
216;;; dependency.
217(define libva-without-mesa
218 ;; Delay to work around circular import problem.
219 (delay
220 (package
221 (inherit libva)
222 (name "libva-without-mesa")
3ee7b4cc
EF
223 (inputs `(,@(fold alist-delete (package-inputs libva)
224 '("mesa" "wayland"))))
7e31978b
TUBK
225 (arguments
226 (strip-keyword-arguments
227 '(#:make-flags)
228 (substitute-keyword-arguments (package-arguments libva)
229 ((#:configure-flags flags)
230 '(list "--disable-glx" "--disable-egl"))))))))
231
200726ed
JD
232(define-public mesa
233 (package
234 (name "mesa")
5edad6c7 235 (version "19.3.4")
200726ed
JD
236 (source
237 (origin
238 (method url-fetch)
57cdc1fa
MB
239 (uri (list (string-append "https://mesa.freedesktop.org/archive/"
240 "mesa-" version ".tar.xz")
241 (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
0315b20a
MB
242 "mesa-" version ".tar.xz")
243 (string-append "ftp://ftp.freedesktop.org/pub/mesa/"
244 version "/mesa-" version ".tar.xz")))
200726ed 245 (sha256
ce4d7abf 246 (base32
5edad6c7 247 "1r4giqq7q7zqbn23lbw7v5vswagxx8qj6ij2w8bsb697mvk6g90x"))
17f2b485 248 (patches
91304b79 249 (search-patches "mesa-skip-disk-cache-test.patch"))))
f6dadee4 250 (build-system meson-build-system)
200726ed 251 (propagated-inputs
70b02a6a 252 `(;; The following are in the Requires.private field of gl.pc.
ce4d7abf 253 ("libdrm" ,libdrm)
4ea1ad91 254 ("libvdpau" ,libvdpau)
8bb1699b 255 ("libx11" ,libx11)
200726ed 256 ("libxdamage" ,libxdamage)
45191970
TUBK
257 ("libxfixes" ,libxfixes)
258 ("libxshmfence" ,libxshmfence)
70b02a6a
MB
259 ("libxxf86vm" ,libxxf86vm)
260 ("xorgproto" ,xorgproto)))
200726ed 261 (inputs
e0b744f1 262 `(("expat" ,expat)
9b3b4c05 263 ("libelf" ,elfutils) ;required for r600 when using llvm
7e31978b 264 ("libva" ,(force libva-without-mesa))
200726ed 265 ("libxml2" ,libxml2)
ce4d7abf 266 ;; TODO: Add 'libxml2-python' for OpenGL ES 1.1 and 2.0 support
aea3ec0f 267 ("libxrandr" ,libxrandr)
0272ee49 268 ("libxvmc" ,libxvmc)
c5e91014
EF
269 ,@(match (%current-system)
270 ((or "x86_64-linux" "i686-linux")
f5eb13b2 271 ;; Note: update the 'clang' input of mesa-opencl when bumping this.
cf4fdbcb 272 `(("llvm" ,llvm-9)))
c5e91014
EF
273 (_
274 `()))
3e71b9ff 275 ("makedepend" ,makedepend)
cb639269
MB
276 ("wayland" ,wayland)
277 ("wayland-protocols" ,wayland-protocols)))
200726ed 278 (native-inputs
f6dadee4
RH
279 `(("bison" ,bison)
280 ("flex" ,flex)
281 ("gettext" ,gettext-minimal)
301b2e74
RH
282 ,@(match (%current-system)
283 ((or "x86_64-linux" "i686-linux")
47406a92 284 `(("glslang" ,glslang)))
301b2e74
RH
285 (_
286 `()))
f6dadee4 287 ("pkg-config" ,pkg-config)
178611c8 288 ("python" ,python-wrapper)
17c3e0d8 289 ("python-mako" ,python-mako)
653569e8 290 ("which" ,(@ (gnu packages base) which))))
200726ed 291 (arguments
ce4d7abf 292 `(#:configure-flags
2a8b89c2 293 '(,@(match (%current-system)
cd9f99f1 294 ((or "armhf-linux" "aarch64-linux")
31c70cce 295 ;; TODO: Fix svga driver for aarch64 and armhf.
688d8f22 296 '("-Dgallium-drivers=etnaviv,freedreno,nouveau,r300,r600,swrast,tegra,v3d,vc4,virgl"))
2a8b89c2 297 (_
688d8f22 298 '("-Dgallium-drivers=iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl")))
3e2570d8
TUBK
299 ;; Enable various optional features. TODO: opencl requires libclc,
300 ;; omx requires libomxil-bellagio
f6dadee4
RH
301 "-Dplatforms=x11,drm,surfaceless,wayland"
302 "-Dglx=dri" ;Thread Local Storage, improves performance
303 ;; "-Dopencl=true"
304 ;; "-Domx=true"
305 "-Dosmesa=gallium"
306 "-Dgallium-xa=true"
307
8ea75f27 308 ;; features required by wayland
f6dadee4
RH
309 "-Dgles2=true"
310 "-Dgbm=true"
311 "-Dshared-glapi=true"
0315b20a 312
abdb97f8 313 ;; Enable Vulkan on i686-linux and x86-64-linux.
6713e9cb 314 ,@(match (%current-system)
3f14c913 315 ((or "i686-linux" "x86_64-linux")
f6dadee4 316 '("-Dvulkan-drivers=intel,amd"))
6713e9cb 317 (_
7d1494d9 318 '("-Dvulkan-drivers=auto")))
6713e9cb 319
301b2e74
RH
320 ;; Enable the Vulkan overlay layer on i686-linux and x86-64-linux.
321 ,@(match (%current-system)
322 ((or "x86_64-linux" "i686-linux")
323 '("-Dvulkan-overlay-layer=true"))
324 (_
93ef8ca6 325 '()))
301b2e74 326
044006f3 327 ;; Also enable the tests.
f6dadee4 328 "-Dbuild-tests=true"
0f481f06
MW
329
330 ;; on non-intel systems, drop i915 and i965
331 ;; from the default dri drivers
332 ,@(match (%current-system)
333 ((or "x86_64-linux" "i686-linux")
f6dadee4
RH
334 '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
335 "-Dllvm=true")) ; default is x86/x86_64 only
0f481f06 336 (_
f6dadee4 337 '("-Ddri-drivers=nouveau,r200,r100"))))
6fe808f4
MB
338
339 ;; XXX: 'debugoptimized' causes LTO link failures on some drivers. The
340 ;; documentation recommends using 'release' for performance anyway.
341 #:build-type "release"
342
dcc00f54
LC
343 #:modules ((ice-9 match)
344 (srfi srfi-1)
345 (guix build utils)
f6dadee4 346 (guix build meson-build-system))
e8a7a180
EF
347 #:phases
348 (modify-phases %standard-phases
349 (add-after
350 'unpack 'patch-create_test_cases
351 (lambda _
e8a7a180 352 (substitute* "src/intel/genxml/gen_pack_header.py"
0315b20a
MB
353 (("/usr/bin/env python2") (which "python")))
354 #t))
ccbc1c5e
PN
355 ,@(if (string-prefix? "i686" (or (%current-target-system)
356 (%current-system)))
4bed3b10
MB
357 ;; Disable new test from Mesa 19 that fails on i686. Upstream
358 ;; report: <https://bugs.freedesktop.org/show_bug.cgi?id=110612>.
359 `((add-after 'unpack 'disable-failing-test
360 (lambda _
361 (substitute* "src/gallium/tests/unit/meson.build"
362 (("'u_format_test',") ""))
363 #t)))
364 '())
e8a7a180 365 (add-before
f6dadee4 366 'configure 'fix-dlopen-libnames
e8a7a180 367 (lambda* (#:key inputs outputs #:allow-other-keys)
db481977 368 (let ((out (assoc-ref outputs "out")))
e8a7a180
EF
369 ;; Remain agnostic to .so.X.Y.Z versions while doing
370 ;; the substitutions so we're future-safe.
e8a7a180
EF
371 (substitute* "src/glx/dri_common.c"
372 (("dlopen\\(\"libGL\\.so")
373 (string-append "dlopen(\"" out "/lib/libGL.so")))
374 (substitute* "src/egl/drivers/dri2/egl_dri2.c"
375 (("\"libglapi\\.so")
376 (string-append "\"" out "/lib/libglapi.so")))
377 (substitute* "src/gbm/main/backend.c"
378 ;; No need to patch the gbm_gallium_drm.so reference;
379 ;; it's never installed since Mesa removed its
380 ;; egl_gallium support.
381 (("\"gbm_dri\\.so")
0315b20a 382 (string-append "\"" out "/lib/dri/gbm_dri.so")))
dcc00f54
LC
383 #t)))
384 (add-after 'install 'symlinks-instead-of-hard-links
385 (lambda* (#:key outputs #:allow-other-keys)
386 ;; All the drivers and gallium targets create hard links upon
387 ;; installation (search for "hardlink each megadriver instance"
388 ;; in the makefiles). This is no good for us since we'd produce
389 ;; nars that contain several copies of these files. Thus, turn
390 ;; them into symlinks, which saves ~124 MiB.
391 (let* ((out (assoc-ref outputs "out"))
392 (lib (string-append out "/lib"))
393 (files (find-files lib
394 (lambda (file stat)
395 (and (string-contains file ".so")
396 (eq? 'regular
397 (stat:type stat))))))
398 (inodes (map (compose stat:ino stat) files)))
399 (for-each (lambda (inode)
400 (match (filter-map (match-lambda
401 ((file ino)
402 (and (= ino inode) file)))
403 (zip files inodes))
404 ((_)
405 #f)
406 ((reference others ..1)
407 (format #t "creating ~a symlinks to '~a'~%"
408 (length others) reference)
409 (for-each delete-file others)
410 (for-each (lambda (file)
411 (if (string=? (dirname file)
412 (dirname reference))
413 (symlink (basename reference)
414 file)
415 (symlink reference file)))
416 others))))
417 (delete-duplicates inodes))
0315b20a
MB
418 #t))))))
419 (home-page "https://mesa3d.org/")
6713e9cb
RH
420 (synopsis "OpenGL and Vulkan implementations")
421 (description "Mesa is a free implementation of the OpenGL and Vulkan
422specifications - systems for rendering interactive 3D graphics. A variety of
423device drivers allows Mesa to be used in many different environments ranging
424from software emulation to complete hardware acceleration for modern GPUs.")
584f2e1b 425 (license license:x11)))
7025a035 426
fae42942
RW
427(define-public mesa-opencl
428 (package
429 (inherit mesa)
430 (name "mesa-opencl")
431 (arguments
432 (substitute-keyword-arguments (package-arguments mesa)
433 ((#:configure-flags flags)
434 `(cons "-Dgallium-opencl=standalone" ,flags))))
435 (inputs
436 `(("libclc" ,libclc)
437 ,@(package-inputs mesa)))
438 (native-inputs
f5eb13b2 439 `(("clang" ,clang-9)
fae42942
RW
440 ,@(package-native-inputs mesa)))))
441
37cb4e5b
RW
442(define-public mesa-opencl-icd
443 (package
444 (inherit mesa-opencl)
445 (name "mesa-opencl-icd")
446 (arguments
447 (substitute-keyword-arguments (package-arguments mesa)
448 ((#:configure-flags flags)
449 `(cons "-Dgallium-opencl=icd"
450 ,(delete "-Dgallium-opencl=standalone" flags)))))))
451
b021a2ad
TUBK
452(define-public mesa-headers
453 (package
454 (inherit mesa)
455 (name "mesa-headers")
456 (propagated-inputs '())
457 (inputs '())
458 (native-inputs '())
459 (arguments
460 '(#:phases
461 (modify-phases %standard-phases
f8503e2b
LC
462 (delete 'configure)
463 (delete 'build)
464 (delete 'check)
465 (replace 'install
51b491b0
MW
466 (lambda* (#:key outputs #:allow-other-keys)
467 (copy-recursively "include" (string-append
468 (assoc-ref outputs "out")
469 "/include"))
470 #t)))))))
b021a2ad 471
c90a50eb
TUBK
472;;; The mesa-demos distribution contains non-free files, many files with no
473;;; clear license information, and many demos that aren't useful for most
474;;; people, so we just use this for the mesa-utils package below, and possibly
475;;; other packages in the future. This is modeled after Debian's solution.
476(define (mesa-demos-source version)
477 (origin
478 (method url-fetch)
18cbba26 479 (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/demos"
c90a50eb 480 "/mesa-demos-" version ".tar.bz2"))
18cbba26 481 (sha256 (base32 "0zgzbz55a14hz83gbmm0n9gpjnf5zadzi2kjjvkn6khql2a9rs81"))))
c90a50eb
TUBK
482
483(define-public mesa-utils
484 (package
485 (name "mesa-utils")
18cbba26 486 (version "8.4.0")
c90a50eb
TUBK
487 (source (mesa-demos-source version))
488 (build-system gnu-build-system)
489 (inputs
490 `(("mesa" ,mesa)
491 ("glut" ,freeglut)
492 ("glew" ,glew)))
493 (native-inputs
494 `(("pkg-config" ,pkg-config)))
495 (arguments
7fe3f8cf 496 '(#:phases
c90a50eb
TUBK
497 (modify-phases %standard-phases
498 (replace
f8503e2b 499 'install
c90a50eb
TUBK
500 (lambda* (#:key outputs #:allow-other-keys)
501 (let ((out (assoc-ref outputs "out")))
502 (mkdir-p (string-append out "/bin"))
503 (for-each
504 (lambda (file)
505 (copy-file file (string-append out "/bin/" (basename file))))
506 '("src/xdemos/glxdemo" "src/xdemos/glxgears"
feb08043
MW
507 "src/xdemos/glxinfo" "src/xdemos/glxheads"))
508 #t))))))
7c22aa63 509 (home-page "https://mesa3d.org/")
c90a50eb
TUBK
510 (synopsis "Utility tools for Mesa")
511 (description
512 "The mesa-utils package contains several utility tools for Mesa: glxdemo,
513glxgears, glxheads, and glxinfo.")
514 ;; glxdemo is public domain; others expat.
584f2e1b 515 (license (list license:expat license:public-domain))))
c90a50eb 516
524f4bec
LC
517(define-public glew
518 (package
519 (name "glew")
bbc94a08 520 (version "2.1.0")
524f4bec
LC
521 (source (origin
522 (method url-fetch)
de67e922
LF
523 (uri (string-append "mirror://sourceforge/glew/glew/" version
524 "/glew-" version ".tgz"))
524f4bec
LC
525 (sha256
526 (base32
bbc94a08 527 "159wk5dc0ykjbxvag5i1m2mhp23zkk6ra04l26y3jc3nwvkr3ph4"))
524f4bec
LC
528 (modules '((guix build utils)))
529 (snippet
6cbee49d
MW
530 '(begin
531 (substitute* "config/Makefile.linux"
532 (("= cc") "= gcc")
533 (("/lib64") "/lib"))
534 #t))))
524f4bec
LC
535 (build-system gnu-build-system)
536 (arguments
dc1d3cde 537 '(#:phases (modify-phases %standard-phases (delete 'configure))
524f4bec
LC
538 #:make-flags (list (string-append "GLEW_PREFIX="
539 (assoc-ref %outputs "out"))
540 (string-append "GLEW_DEST="
541 (assoc-ref %outputs "out")))
542 #:tests? #f)) ;no 'check' target
543 (inputs
544 `(("libxi" ,libxi)
545 ("libxmu" ,libxmu)
546 ("libx11" ,libx11)
547 ("mesa" ,mesa)))
548
549 ;; <GL/glew.h> includes <GL/glu.h>.
550 (propagated-inputs `(("glu" ,glu)))
551
552 (home-page "http://glew.sourceforge.net/")
553 (synopsis "OpenGL extension loading library for C and C++")
554 (description
555 "The OpenGL Extension Wrangler Library (GLEW) is a C/C++ extension
556loading library. GLEW provides efficient run-time mechanisms for determining
557which OpenGL extensions are supported on the target platform. OpenGL core and
558extension functionality is exposed in a single header file.")
584f2e1b 559 (license license:bsd-3)))
524f4bec 560
7025a035
DT
561(define-public guile-opengl
562 (package
563 (name "guile-opengl")
564 (version "0.1.0")
565 (source (origin
566 (method url-fetch)
567 (uri (string-append "mirror://gnu/guile-opengl/guile-opengl-"
568 version ".tar.gz"))
569 (sha256
570 (base32
571 "13qfx4xh8baryxqrv986l848ygd0piqwm6s2s90pxk9c0m9vklim"))))
572 (build-system gnu-build-system)
573 (native-inputs `(("pkg-config" ,pkg-config)))
42994090 574 (inputs `(("guile" ,guile-2.2)
7025a035 575 ("mesa" ,mesa)
4becc792 576 ("glu" ,glu)
7025a035
DT
577 ("freeglut" ,freeglut)))
578 (arguments
0e215f49
DT
579 '(#:phases (modify-phases %standard-phases
580 (add-after 'configure 'patch-makefile
581 (lambda _
582 ;; Install compiled Guile files in the expected place.
583 (substitute* '("Makefile")
584 (("^godir = .*$")
585 "godir = $(moddir)\n"))))
586 (add-before 'build 'patch-dynamic-link
587 (lambda* (#:key inputs outputs #:allow-other-keys)
588 (define (dynamic-link-substitute file lib input)
589 (substitute* file
590 (("dynamic-link \"lib([a-zA-Z]+)\"" _ lib)
591 (string-append "dynamic-link \""
592 (assoc-ref inputs input)
593 "/lib/lib" lib "\""))))
594 ;; Replace dynamic-link calls for libGL, libGLU, and
595 ;; libglut with absolute paths to the store.
596 (dynamic-link-substitute "glx/runtime.scm" "GL" "mesa")
597 (dynamic-link-substitute "glu/runtime.scm" "GLU" "glu")
598 (dynamic-link-substitute "glut/runtime.scm" "glut"
599 "freeglut"))))))
cc7a5c71 600 (home-page "https://gnu.org/s/guile-opengl")
66672a45 601 (synopsis "Guile binding for the OpenGL graphics API")
7025a035 602 (description
66672a45
LC
603 "Guile-OpenGL is a library for Guile that provides bindings to the
604OpenGL graphics API.")
584f2e1b 605 (license license:lgpl3+)))
131ddf99 606
ad1edd03
RW
607(define-public guile3.0-opengl
608 (package
609 (inherit guile-opengl)
610 (name "guile3.0-opengl")
611 (arguments
612 (substitute-keyword-arguments (package-arguments guile-opengl)
613 ((#:phases phases)
614 `(modify-phases ,phases
615 (add-after 'unpack 'build-with-guile-3.0
616 (lambda _
617 (substitute* "configure"
618 (("_guile_versions_to_search=\"")
619 "_guile_versions_to_search=\"3.0 "))
620 #t))))))
621 (inputs
622 `(("guile" ,guile-3.0)
623 ("mesa" ,mesa)
624 ("glu" ,glu)
625 ("freeglut" ,freeglut)))))
626
131ddf99
AW
627(define-public libepoxy
628 (package
629 (name "libepoxy")
8d9d6adb 630 (version "1.5.4")
131ddf99
AW
631 (source (origin
632 (method url-fetch)
633 (uri (string-append
3d3d4014
EF
634 "https://github.com/anholt/libepoxy/releases/download/"
635 version "/libepoxy-" version ".tar.xz"))
131ddf99
AW
636 (sha256
637 (base32
8d9d6adb 638 "1ll9fach4v30dsyd47s5ial4gaiwihzr2afb77vxxzzy3mlcrlhb"))))
131ddf99 639 (arguments
9bbd52e5 640 `(#:phases
5f8dd6dc 641 (modify-phases %standard-phases
54d860cc 642 (delete 'bootstrap)
5f8dd6dc
EF
643 (add-before
644 'configure 'patch-paths
645 (lambda* (#:key inputs #:allow-other-keys)
646 (let ((python (assoc-ref inputs "python"))
647 (mesa (assoc-ref inputs "mesa")))
648 (substitute* "src/gen_dispatch.py"
649 (("/usr/bin/env python") python))
650 (substitute* (find-files "." "\\.[ch]$")
651 (("libGL.so.1") (string-append mesa "/lib/libGL.so.1"))
652 (("libEGL.so.1") (string-append mesa "/lib/libEGL.so.1")))
5f8dd6dc 653 #t))))))
54d860cc 654 (build-system meson-build-system)
131ddf99 655 (native-inputs
827dc629 656 `(("pkg-config" ,pkg-config)
131ddf99
AW
657 ("python" ,python)))
658 (inputs
659 `(("mesa" ,mesa)))
3d3d4014 660 (home-page "https://github.com/anholt/libepoxy/")
131ddf99
AW
661 (synopsis "A library for handling OpenGL function pointer management")
662 (description
663 "A library for handling OpenGL function pointer management.")
584f2e1b 664 (license license:x11)))
2b226af1
DT
665
666(define-public soil
667 (package
668 (name "soil")
669 (version "1.0.7")
670 (source (origin
671 (method url-fetch)
672 ;; No versioned archive available.
673 (uri "http://www.lonesock.net/files/soil.zip")
674 (sha256
675 (base32
676 "00gpwp9dldzhsdhksjvmbhsd2ialraqbv6v6dpikdmpncj6mnc52"))))
677 (build-system gnu-build-system)
678 (arguments
679 '(#:tests? #f ; no tests
680 #:phases (modify-phases %standard-phases
681 (delete 'configure)
682 (add-before 'build 'init-build
683 (lambda* (#:key outputs #:allow-other-keys)
684 (let ((out (assoc-ref outputs "out")))
685 (setenv "CFLAGS" "-fPIC") ; needed for shared library
686 ;; Use alternate Makefile
687 (copy-file "projects/makefile/alternate Makefile.txt"
688 "src/Makefile")
689 (chdir "src")
690 (substitute* '("Makefile")
691 (("INCLUDEDIR = /usr/include/SOIL")
692 (string-append "INCLUDEDIR = " out "/include/SOIL"))
693 (("LIBDIR = /usr/lib")
694 (string-append "LIBDIR = " out "/lib"))
695 ;; Remove these flags from 'install' commands.
696 (("-o root -g root") ""))))))))
697 (native-inputs
698 `(("unzip" ,unzip)))
699 (inputs
700 `(("mesa" ,mesa)))
c0f6eebb 701 (home-page "https://www.lonesock.net/soil.html")
2b226af1
DT
702 (synopsis "OpenGL texture loading library")
703 (description
704 "SOIL is a tiny C library used primarily for uploading textures into
705OpenGL.")
584f2e1b 706 (license license:public-domain)))
432360d7
DT
707
708(define-public glfw
709 (package
710 (name "glfw")
711 (version "3.2.1")
712 (source (origin
713 (method url-fetch)
714 (uri (string-append "https://github.com/glfw/glfw"
715 "/releases/download/" version
716 "/glfw-" version ".zip"))
717 (sha256
718 (base32
719 "09kk5yc1zhss9add8ryqrngrr16hdmc94rszgng135bhw09mxmdp"))))
720 (build-system cmake-build-system)
721 (arguments
722 '(#:tests? #f ; no test target
723 #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
724 (native-inputs
725 `(("doxygen" ,doxygen)
726 ("unzip" ,unzip)))
a966281f
LC
727 (propagated-inputs
728 `(("mesa" ,mesa) ;included in public headers
729
730 ;; These are in 'Requires.private' of 'glfw3.pc'.
432360d7
DT
731 ("libx11" ,libx11)
732 ("libxrandr" ,libxrandr)
733 ("libxinerama" ,libxinerama)
a966281f
LC
734 ("libxcursor" ,libxcursor)
735 ("libxxf86vm" ,libxxf86vm)))
c9938fa8 736 (home-page "https://www.glfw.org")
432360d7
DT
737 (synopsis "OpenGL application development library")
738 (description
739 "GLFW is a library for OpenGL, OpenGL ES and Vulkan development for
740desktop computers. It provides a simple API for creating windows, contexts
741and surfaces, receiving input and events.")
742 (license license:zlib)))
78acbcb5
RW
743
744(define-public nanovg-for-extempore
745 (package
746 (name "nanovg-for-extempore")
747 (version "0.7.1")
748 (source (origin
749 (method url-fetch)
750 (uri (string-append "https://github.com/extemporelang/nanovg/"
751 "archive/" version ".tar.gz"))
752 (file-name (string-append name "-" version ".tar.gz"))
753 (sha256
754 (base32
755 "0ivs1sagq19xiw8jxd9f8w2b39svi0n9hrbmdvckwvqg95r8701g"))))
756 (build-system cmake-build-system)
757 (arguments `(#:tests? #f)) ; no tests included
758 (inputs
759 `(("mesa" ,mesa)))
39162ee4
RW
760 ;; Extempore refuses to build on architectures other than x86_64
761 (supported-systems '("x86_64-linux"))
78acbcb5
RW
762 (home-page "https://github.com/extemporelang/nanovg")
763 (synopsis "2D vector drawing library on top of OpenGL")
764 (description "NanoVG is small antialiased vector graphics rendering
765library for OpenGL. It has lean API modeled after HTML5 canvas API. It is
766aimed to be a practical and fun toolset for building scalable user interfaces
767and visualizations.")
768 (license license:zlib)))
725d8d2c
AI
769
770(define-public gl2ps
771 (package
772 (name "gl2ps")
905d15e1 773 (version "1.4.0")
725d8d2c
AI
774 (source
775 (origin
776 (method url-fetch)
777 (uri (string-append
778 "http://geuz.org/gl2ps/src/gl2ps-"
779 version ".tgz"))
780 (sha256
781 (base32
905d15e1 782 "1qpidkz8x3bxqf69hlhyz1m0jmfi9kq24fxsp7rq6wfqzinmxjq3"))))
725d8d2c
AI
783 (build-system cmake-build-system)
784 (inputs
785 `(("libpng" ,libpng)
786 ("mesa" ,mesa)
787 ("zlib" ,zlib)))
788 (arguments
789 `(#:tests? #f)) ;; no tests
790 (home-page "http://www.geuz.org/gl2ps/")
791 (synopsis "OpenGL to PostScript printing library")
792 (description "GL2PS is a C library providing high quality vector
793output for any OpenGL application. GL2PS uses sorting algorithms
794capable of handling intersecting and stretched polygons, as well as
795non-manifold objects. GL2PS provides many features including advanced
796smooth shading and text rendering, culling of invisible primitives and
797mixed vector/bitmap output.")
905d15e1 798 ;; GL2PS is dual-licenced and can be used under the terms of either.
725d8d2c
AI
799 (license (list license:lgpl2.0+
800 (license:fsf-free "http://www.geuz.org/gl2ps/COPYING.GL2PS"
801 "GPL-incompatible copyleft license")))))
d64f3439
RH
802
803(define-public virtualgl
804 (package
805 (name "virtualgl")
0cece1b5 806 (version "2.6.2")
d64f3439
RH
807 (source
808 (origin
bd7daf9c
RW
809 (method git-fetch)
810 (uri (git-reference
811 (url "https://github.com/VirtualGL/virtualgl.git")
812 (commit version)))
813 (file-name (git-file-name name version))
d64f3439 814 (sha256
0cece1b5 815 (base32 "0yyc553xsb5n0rx7jp9p4wdbd7md07b3qrkf3ssyjavqqg908qg9"))))
d64f3439 816 (arguments
c30fd002 817 `(#:tests? #f ; no tests are available
07b8ea84 818 #:configure-flags (list
c30fd002
TGR
819 (string-append "-DCMAKE_INSTALL_LIBDIR="
820 (assoc-ref %outputs "out") "/lib")
821 "-DVGL_USESSL=1"))) ; use OpenSSL
d64f3439
RH
822 (build-system cmake-build-system)
823 (inputs `(("glu" ,glu)
824 ("libjpeg-turbo" ,libjpeg-turbo)
c30fd002 825 ("libxtst" ,libxtst)
d64f3439
RH
826 ("mesa" ,mesa)
827 ("openssl" ,openssl)))
c695fb76 828 (native-inputs `(("pkg-config" ,pkg-config)))
d64f3439
RH
829 (home-page "https://www.virtualgl.org")
830 (synopsis "Redirects 3D commands from an OpenGL application onto a 3D
831graphics card")
832 (description "VirtualGL redirects the 3D rendering commands from OpenGL
833applications to 3D accelerator hardware in a dedicated server and displays the
834rendered output interactively to a thin client located elsewhere on the
835network.")
836 (license license:wxwindows3.1+)))
5c154738
PN
837
838(define-public mojoshader
839 (let ((changeset "5887634ea695"))
840 (package
841 (name "mojoshader")
3429f5d9 842 (version (string-append "20190825" "-" changeset))
5c154738
PN
843 (source
844 (origin
845 (method hg-fetch)
846 (uri (hg-reference
847 (url "https://hg.icculus.org/icculus/mojoshader/")
848 (changeset changeset)))
849 (file-name (git-file-name name version))
850 (sha256
851 (base32 "0ibl4z1696jiifv9j5drir7jm0b5px0vwkwckbi7cfd46p7p6wcy"))))
852 (arguments
853 ;; Tests only for COMPILER_SUPPORT=ON.
854 `(#:tests? #f
3429f5d9
PN
855 #:configure-flags '("-DBUILD_SHARED=ON"
856 "-DFLIP_VIEWPORT=ON"
857 "-DDEPTH_CLIPPING=ON")
5c154738
PN
858 #:phases
859 (modify-phases %standard-phases
860 (replace 'install
861 (lambda* (#:key outputs #:allow-other-keys)
862 (let* ((out (assoc-ref outputs "out"))
863 (lib (string-append out "/lib"))
864 (header (string-append out "/include")))
865 (install-file "libmojoshader.so" lib)
866 (for-each (lambda (f)
867 (install-file f header))
868 (find-files "../source" "mojoshader.*\\.h$"))
869 (let ((profiles-header (string-append header "/profiles")))
870 (mkdir-p profiles-header)
871 (rename-file (string-append header "/mojoshader_profile.h")
872 (string-append profiles-header "/mojoshader_profile.h"))))
873 #t)))))
874 (build-system cmake-build-system)
875 (home-page "https://www.icculus.org/mojoshader/")
876 (synopsis "Work with Direct3D shaders on alternate 3D APIs")
877 (description "MojoShader is a library to work with Direct3D shaders on
878alternate 3D APIs and non-Windows platforms. The primary motivation is moving
879shaders to OpenGL languages on the fly. The developer deals with \"profiles\"
880that represent various target languages, such as GLSL or ARB_*_program.
881
882This allows a developer to manage one set of shaders, presumably written in
883Direct3D HLSL, and use them across multiple rendering backends. This also
884means that the developer only has to worry about one (offline) compiler to
885manage program complexity, while MojoShader itself deals with the reduced
886complexity of the bytecode at runtime.
887
888MojoShader provides both a simple API to convert bytecode to various profiles,
889and (optionally) basic glue to rendering APIs to abstract the management of
890the shaders at runtime.")
891 (license license:zlib))))
b150e83b
PN
892
893(define-public mojoshader-with-viewport-flip
894 ;; Changeset c586d4590241 replaced glProgramViewportFlip with
895 ;; glProgramViewportInfo.
896 ;; https://hg.icculus.org/icculus/mojoshader/rev/c586d4590241
897 (let ((changeset "2e37299b13d8"))
898 (package
899 (inherit mojoshader)
900 (name "mojoshader-with-viewport-flip")
901 (version (string-append "20190725" "-" changeset))
902 (source
903 (origin
904 (method hg-fetch)
905 (uri (hg-reference
906 (url "https://hg.icculus.org/icculus/mojoshader/")
907 (changeset changeset)))
908 (file-name (git-file-name name version))
909 (sha256
910 (base32 "0ffws7cqbskxwc3hjsnnzq4r2bbf008kdr3b11pa3kr7dsi50y6i"))))
911 (synopsis "Work with Direct3D shaders on alternate 3D APIs (with viewport flip)")
912 (description "This is the last version of the mojoshader library with
913the glProgramViewportFlip before it was replaced with glProgramViewportInfo.")
914 (license license:zlib))))
bea58fa1
PN
915
916(define-public mojoshader-cs
917 (let ((commit "10d0dba21ff1cfe332eb7de328a2adce01286bd7"))
918 (package
919 (name "mojoshader-cs")
920 (version (git-version "20191205" "1" commit))
921 (source (origin
922 (method git-fetch)
923 (uri (git-reference
924 (url "https://github.com/FNA-XNA/MojoShader")
925 (commit commit)))
926 (file-name (git-file-name name version))
927 (sha256
928 (base32
929 "11mdhf3fmb9rsn2iv753gmb596j4dh5j2iipgw078vg0lj23rml7"))))
930 (build-system gnu-build-system)
931 (arguments
932 '(#:tests? #f ; No tests.
933 #:phases
934 (modify-phases %standard-phases
935 (delete 'configure)
936 (replace 'build
937 (lambda _
938 (invoke "make" "-C" "csharp")))
939 (replace 'install
940 (lambda* (#:key outputs #:allow-other-keys)
941 (let ((out (assoc-ref outputs "out")))
942 (install-file "csharp/bin/MojoShader-CS.dll" (string-append out "/lib"))
943 #t))))))
944 (native-inputs
945 `(("mono" ,mono)))
946 (home-page "https://github.com/FNA-XNA/MojoShader")
947 (synopsis "C# wrapper for MojoShader")
948 (description
949 "Mojoshader-CS provides C# bindings for the Mojoshader library.
950The C# wrapper was written to be used for FNA's platform support. However, this
951is written in a way that can be used for any general C# application.")
952 (license license:zlib))))