diff mbox series

[bug#50054] gnu: Add bgfx

Message ID CAJsg1E9zF591MxhCFekOtheVB0CU2zwNPxD9MKAb=YvV1DFE0A@mail.gmail.com
State New
Headers show
Series [bug#50054] gnu: Add bgfx | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Andy Tai Aug. 29, 2021, 4:29 a.m. UTC
further update

building the examples and the tools from source

On Sat, Aug 28, 2021 at 8:25 PM Andy Tai <lichengtai@gmail.com> wrote:
>
> updated patch attached:
>
> directly checking out additional source repos rather than relying on
> git submodule
>
> first attempt at removing "nasty" stuff, removing bx/tools/bin
>
> > On Mon, Aug 16, 2021 at 5:52 AM Leo Prikler
> > <leo.prikler@student.tugraz.at> wrote:
> > >
> > > Hi,
> > >
> > > Am Montag, den 16.08.2021, 05:42 -0700 schrieb Andy Tai:
> > > > Leo, by "nasty stuff" you meant non-free stuff (I doubt if there is
> > > > any in a graphics library but will check), or you meant the embedded
> > > > packages that shall be reference to other packages in guix (if
> > > > packaged already)?   I think the embedded copies of other stuff may
> > > > have local customization that may make it impossible to simply build
> > > > with the existing packages in guix.
> > > Nasty stuff are not only already existing packages, but also outdated
> > > versions thereof.  If there are heavily customized versions or packages
> > > not yet included in Guix, then those can be left in (but with a
> > > remark!), though in the long term it would be better to make those
> > > packages work with upstream versions rather than require specific
> > > tweaking.
> > >
> > > The other thing I already mentioned are binaries, which upstream seems
> > > also aware about, see e.g.
> > > https://github.com/bkaradzic/bgfx/commit/caed3f91026bf0e703f1eaf6f622e27b820df86c

Comments

Leo Prikler Aug. 29, 2021, 11:41 a.m. UTC | #1
Hi,

Am Samstag, den 28.08.2021, 21:29 -0700 schrieb Andy Tai:
> further update
> 
> building the examples and the tools from source
> 
> On Sat, Aug 28, 2021 at 8:25 PM Andy Tai <lichengtai@gmail.com>
> wrote:
> > updated patch attached:
> > 
> > directly checking out additional source repos rather than relying
> > on
> > git submodule
> > 
> > first attempt at removing "nasty" stuff, removing bx/tools/bin
> > [...]

First things first, this still does a build of everything at once
rather than one package per repo.  Have you looked into the one package
per repo thing and decided that it's not possible or do you simply
continue with the package as-is because it builds?

Even if you want to do a merged build, binaries, vendored dependencies,
etc. ought to be removed in the origins, not at build time.  I suggest
you use a computed origin to merge the three and remove all those
things.

Regards
Andy Tai Aug. 29, 2021, 6:21 p.m. UTC | #2
> First things first, this still does a build of everything at once
> rather than one package per repo.  Have you looked into the one package
> per repo thing and decided that it's not possible or do you simply
> continue with the package as-is because it builds?
>

Hi, the author of the upstream is very opinionated; this is how how
arranges the things for this package and his documentation on how to
build mentions checking out all three repos and build them together.
I can look into his build system setup to try to build each repo
separately but that means I  need to maintain custom build inside the
package and normally I don't think distribution package maintainers
want to  go into inside the package to setup alternative build
processes separate from upstream--what goes inside the package is best
left to the author.  If you maintain essentially separate build
scripts in the original package in terms of cmake or genie, that is
outside the scope of guix and hard to maintain as you need to keep up
with new releases.

> Even if you want to do a merged build, binaries, vendored dependencies,
> etc. ought to be removed in the origins, not at build time.  I suggest
> you use a computed origin to merge the three and remove all those
> things.
>

Is there a "computed origin" example in existing package receipts in guix?
Leo Prikler Aug. 29, 2021, 8:04 p.m. UTC | #3
Hi

Am Sonntag, den 29.08.2021, 11:21 -0700 schrieb Andy Tai:
> > First things first, this still does a build of everything at once
> > rather than one package per repo.  Have you looked into the one
> > package
> > per repo thing and decided that it's not possible or do you simply
> > continue with the package as-is because it builds?
> > 
> 
> Hi, the author of the upstream is very opinionated; this is how how
> arranges the things for this package and his documentation on how to
> build mentions checking out all three repos and build them together.
I wouldn't read too much into that.  Just because they put those
directories next to each other doesn't mean Guix is forced to do the
same.  Many people have their shells in /bin/bash.  Some use
/usr/bin/bash.  Neither exists in Guix and we still manage to somehow
ship bash.

Plus, according to upstream, the CMake structure is literally an
alternative build system and there are several versions of it,
suggesting that it shouldn't be particularly hard to adapt bgfx to
something else. 

> I can look into his build system setup to try to build each repo
> separately but that means I  need to maintain custom build inside the
> package and normally I don't think distribution package maintainers
> want to  go into inside the package to setup alternative build
> processes separate from upstream--what goes inside the package is
> best left to the author.  If you maintain essentially separate build
> scripts in the original package in terms of cmake or genie, that is
> outside the scope of guix and hard to maintain as you need to keep up
> with new releases.
People have rolled their own Makefiles for decades and Guix has a way
of coping with that.  You simply need to delete bootstrap and configure
from gnu-build-system or replace them with whatever command upstream
uses.  

> > Even if you want to do a merged build, binaries, vendored
> > dependencies,
> > etc. ought to be removed in the origins, not at build time.  I
> > suggest
> > you use a computed origin to merge the three and remove all those
> > things.
> > 
> 
> Is there a "computed origin" example in existing package receipts in
> guix?
There are few examples, as computed origins are typically only used
with huge pieces of software that need large patches to throw away
proprietary blobs.  See the linux kernel or chromium.

Regards
Andy Tai Aug. 29, 2021, 11:59 p.m. UTC | #4
Related, this patch

http://debbugs.gnu.org/cgi/bugreport.cgi?bug=50229

adds genie to guix which may be required to build these repos
individually, but no response on that patch (independent of this one)
so far
diff mbox series

Patch

From f772db933bba365e435e96f9441b5017305c8a04 Mon Sep 17 00:00:00 2001
From: Andy Tai <atai@atai.org>
Date: Sat, 28 Aug 2021 21:27:36 -0700
Subject: [PATCH] gnu: Add bgfx
To: guix-patches@gnu.org

* gnu/packages/graphics.scm (bgfx): New variable
---
 gnu/packages/graphics.scm | 82 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 38feb27c87..3027eac61e 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -2000,3 +2000,85 @@  Some feature highlights:
 such as VR and AR on mobile, PC/desktop, and any other device.  Monado aims to be
 a complete and conforming implementation of the OpenXR API made by Khronos.")
     (license license:boost1.0)))
+
+(define-public bgfx
+  (let ((commit "b029632186b897a7d65486f9809d65b3eb900abf")
+        (revision "0"))
+    (package
+      (name "bgfx")
+      (version
+       (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/bkaradzic/bgfx.cmake")
+           (commit commit)))
+         (file-name (git-file-name "bgfx.cmake" version))
+         (sha256
+          (base32
+           "1j19a0ya1mi8vls6696b4zyb573hk8qil9lrzqd2anlrfn2xn395"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:configure-flags
+         '("-DBGFX_BUILD_TOOLS=TRUE"
+           "-DBGFX_BUILD_EXAMPLES=TRUE")
+
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'unpack-submodule-sources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (delete-file-recursively "bx")
+               (delete-file-recursively "bimg")
+               (delete-file-recursively "bgfx")
+
+               (copy-recursively (assoc-ref inputs "bx")
+                                 "./bx")
+               (copy-recursively (assoc-ref inputs "bimg")
+                                 "./bimg")
+               (copy-recursively (assoc-ref inputs "bgfx")
+                                 "./bgfx")
+               ;; delete binaries from upstream git repos
+               (delete-file-recursively "bx/tools/bin")
+               ;; delete extra 3rd party code not needed for bgfx to function on Guix
+               ;; note dear-imgui local copy in bgfx heavily modified from original upstream
+               ;; so we for now can not use the upstream dear-imgui for bgfx
+               (delete-file-recursively "bgfx/3rdparty/dxsdk")
+               #t)))
+
+         #:tests? #f)) ;; no tests
+      (inputs
+       `(("glslang" ,glslang)
+         ("libxcb" ,libxcb)
+         ("opengl" ,mesa)
+         ("vulkan-loader" ,vulkan-loader)))
+      (native-inputs
+       (let ((additional-repo (lambda (url commit name hash)
+                                (origin
+                                  (method git-fetch)
+                                  (uri (git-reference
+                                        (url url)
+                                        (commit commit)))
+                                  (file-name (git-file-name name commit))
+                                  (sha256 (base32 hash))))))
+         `(("bx"
+            ,(additional-repo "https://github.com/bkaradzic/bx"
+                              "9978d894cb54efc0fcb874461f3127cbe8e55b33"
+                              "bx" "0r98x2fdklldvkswda1hld6igzd0kzm21d0fhfdwi6401a718dyx"))
+           ("bimg"
+            ,(additional-repo "https://github.com/bkaradzic/bimg"
+                              "0b6febf2b0ba07f5fd5de6a30acaf7c3afdb9921"
+                              "bimg" "1a0d43ryv6hzssq18ri0rqb1zvqs62x7qp98mdc5qhgbn46bqg9z"))
+           ("bgfx"
+            ,(additional-repo "https://github.com/bkaradzic/bgfx"
+                              "f26885aaed87ce6c39e8862212d62f82ff4a93ac"
+                              "bgfx" "037h4m4kxxl9ii5f7bs8gwihcih0ydzkv5bh0jx1s22g3bbkvkr0"))
+           ("pkg-config" ,pkg-config)
+           ("vulkan-headers" ,vulkan-headers))))
+      (home-page "https://github.com/bkaradzic/bgfx")
+      (synopsis  "Cross-platform, graphics API agnostic, rendering library")
+      (description "bgfx is a cross-platform, graphics API agnostic,
+'Bring Your Own Engine/Framework' style rendering library supporting Direct3D,
+OpenGL, Metal, Vulkan and WebGL.")
+      (license (list license:bsd-2 license:cc0)))))
-- 
2.33.0