Message ID | 20230924171400.7496-2-i@dan.games |
---|---|
State | New |
Headers | show |
Series | gnu: Add tracy and tracy-wayland. | expand |
Hello! dan <i@dan.games> writes: > * gnu/packages/profiling.scm (tracy-wayland): New variable. > --- > gnu/packages/profiling.scm | 53 ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 51 insertions(+), 2 deletions(-) > > diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm > index 8a1c609669..af79488c30 100644 > --- a/gnu/packages/profiling.scm > +++ b/gnu/packages/profiling.scm > @@ -2,6 +2,7 @@ > ;;; Copyright © 2017 Dave Love <fx@gnu.org> > ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> > ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org> > +;;; Copyright © 2023 dan <i@dan.games> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -21,6 +22,7 @@ > (define-module (gnu packages profiling) > #:use-module (guix packages) > #:use-module (guix gexp) > + #:use-module (guix git-download) > #:use-module ((guix licenses) #:prefix license:) ; avoid zlib, expat clashes > #:use-module (guix download) > #:use-module (guix utils) > @@ -31,19 +33,24 @@ (define-module (gnu packages profiling) > #:use-module (gnu packages bison) > #:use-module (gnu packages compression) > #:use-module (gnu packages documentation) > + #:use-module (gnu packages engineering) > #:use-module (gnu packages fabric-management) > #:use-module (gnu packages flex) > + #:use-module (gnu packages fontutils) > + #:use-module (gnu packages freedesktop) > #:use-module (gnu packages gawk) > #:use-module (gnu packages gcc) > + #:use-module (gnu packages gl) > #:use-module (gnu packages glib) > #:use-module (gnu packages libunwind) > #:use-module (gnu packages linux) > #:use-module (gnu packages mpi) > #:use-module (gnu packages ncurses) > #:use-module (gnu packages perl) > - #:use-module (gnu packages perl) > + #:use-module (gnu packages pkg-config) > #:use-module (gnu packages python) > - #:use-module (gnu packages qt)) > + #:use-module (gnu packages qt) > + #:use-module (gnu packages xdisorg)) > > ;; Fixme: Separate out lib and fix resulting cycle errors; separate libpfm > ;; output(?); build libmsr and add that component. > @@ -389,3 +396,45 @@ (define (make-scorep mpi) > (license license:cpl1.0))) > > (define-public scorep-openmpi (make-scorep openmpi)) > + > +(define-public tracy-wayland > + (package > + (name "tracy-wayland") > + (version "0.9.1") > + (source (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/wolfpld/tracy.git") > + (commit (string-append "v" version)))) > + (sha256 > + (base32 > + "1znw1r1c4vrb9vrsr08gcwynpjda8xxmb3923yykpymw2hsm0n9b")) > + (file-name (git-file-name "tracy" version)))) > + (build-system gnu-build-system) > + (arguments > + (list #:tests? #f ;no test for the profiler > + #:make-flags #~(list (string-append "CC=" > + #$(cc-for-target))) > + #:phases #~(modify-phases %standard-phases > + (replace 'configure > + (lambda _ > + (chdir "profiler/build/unix"))) > + (replace 'install > + (lambda _ > + (let ((bin (string-append #$output "/bin")) > + (tracy (string-append #$output "/bin/tracy"))) > + (mkdir-p bin) > + (copy-file "Tracy-release" tracy))))))) > + (inputs (list capstone > + dbus > + freetype > + libxkbcommon > + mesa > + wayland)) > + (native-inputs (list pkg-config)) > + (home-page "https://github.com/wolfpld/tracy") > + (synopsis "Frame profiler") > + (description > + "A real time, nanosecond resolution, remote telemetry, hybrid frame and > +sampling profiler for games and other applications.") > + (license license:bsd-3))) Looking at this package more closely, I found it was bundling imgui and zstd, so I tried unbundling both, and was successful for zstd: --8<---------------cut here---------------start------------->8--- modified gnu/packages/profiling.scm @@ -402,35 +402,61 @@ (define-public tracy-wayland (package (name "tracy-wayland") (version "0.9.1") - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/wolfpld/tracy") - (commit (string-append "v" version)))) - (sha256 - (base32 - "1znw1r1c4vrb9vrsr08gcwynpjda8xxmb3923yykpymw2hsm0n9b")) - (file-name (git-file-name "tracy" version)))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/wolfpld/tracy") + (commit (string-append "v" version)))) + (sha256 + (base32 + "1znw1r1c4vrb9vrsr08gcwynpjda8xxmb3923yykpymw2hsm0n9b")) + (file-name (git-file-name "tracy" version)) + (modules '((guix build utils))) + (snippet + '(begin + ;; XXX: Sadly, the ImGui loaders appear to have been customized by + ;; the project and the build fails when using the 'imgui' Guix + ;; package due to a missing GL_TEXTURE_WRAP_S definition, so keep + ;; the bundled copy. + + ;; Unbundle Zstd. + (delete-file-recursively "zstd") + ;; Adjust the include directives. + (substitute* (find-files "server" "\\.(c|h)pp$") + (("#include \".*zstd/(zstd|zdict).h\"" _ header) + (format #f "#include \"~a.h\"" header))) + ;; De-register source files from Visual Code project. + (substitute* "profiler/build/win32/Tracy.vcxproj" + ((".*Include=\"..\\\\..\\\\..\\\\zstd\\\\.*") "")))))) + ;; Note: There is also CMake and Meson support, but only to build the + ;; tracy library, not the profiler command. (build-system gnu-build-system) (arguments - (list #:tests? #f ;no test for the profiler - #:make-flags #~(list (string-append "CC=" #$(cc-for-target))) - #:phases #~(modify-phases %standard-phases - (replace 'configure - (lambda _ - (chdir "profiler/build/unix"))) - (replace 'install - (lambda _ - (let ((bin (string-append #$output "/bin")) - (tracy (string-append #$output "/bin/tracy"))) - (mkdir-p bin) - (copy-file "Tracy-release" tracy))))))) + (list + #:tests? #f ;no test for the profiler + #:make-flags + #~(list (string-append "CC=" #$(cc-for-target)) + (string-append "CFLAGS=-lzstd")) + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'chdir + (lambda _ + (chdir "profiler/build/unix"))) + (delete 'configure) ;the profiler has no configure script + (replace 'install + (lambda _ + (let ((bin (string-append #$output "/bin")) + (tracy (string-append #$output "/bin/tracy"))) + (mkdir-p bin) + (copy-file "Tracy-release" tracy))))))) (inputs (list capstone dbus freetype libxkbcommon mesa - wayland)) + wayland + `(,zstd "lib"))) (native-inputs (list pkg-config)) (home-page "https://github.com/wolfpld/tracy") (synopsis "Frame profiler") --8<---------------cut here---------------end--------------->8--- For the X11 variant working around packaging problems in glfw (dlopen) with LD_LIBRARY_PATH, I've fixed these in glfw (by patching the so names in its source with their absolute paths) and removed the workaround: --8<---------------cut here---------------start------------->8--- @@ -443,29 +469,13 @@ (define-public tracy (package (inherit tracy-wayland) (name "tracy") - (inputs (modify-inputs (package-inputs tracy-wayland) - (delete "libxkbcommon" "wayland") - (prepend glfw))) (arguments (substitute-keyword-arguments (package-arguments tracy-wayland) - ((#:make-flags flags - #~'()) + ((#:make-flags flags #~'()) #~(append #$flags - ;; The LEGACY flag indicate we want to build tracy with glfw - (list "LEGACY=1"))) - ((#:phases phases) - #~(modify-phases #$phases - ;; Tracy depends on glfw to load libGL.so, but glfw doesn't have - ;; mesa in its rpath. Thus, we need to manually modify tracy's - ;; LD_LIBRARY_PATH. - (add-after 'install 'wrap-program - (lambda _ - (let ((out (string-append #$output "/bin/tracy")) - (mesa (string-append #$(this-package-input "mesa") - "/lib"))) - (wrap-program out - `("LD_LIBRARY_PATH" ":" = - (,mesa)))))))))) + ;; The LEGACY flag indicate we want to build tracy with glfw. + (list "LEGACY=1"))))) (inputs (modify-inputs (package-inputs tracy-wayland) - (append bash-minimal))) + (delete "libxkbcommon" "wayland") + (prepend glfw))) (synopsis "Frame profiler (X11 version)"))) --8<---------------cut here---------------end--------------->8--- It at least still runs for me, though I'm not sure how to use it (it seems to require the target application to be built with libtracy and act as a server?). Closing, thank you for contributing to Guix! -- Thanks, Maxim
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm index 8a1c609669..af79488c30 100644 --- a/gnu/packages/profiling.scm +++ b/gnu/packages/profiling.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2017 Dave Love <fx@gnu.org> ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2023 dan <i@dan.games> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ (define-module (gnu packages profiling) #:use-module (guix packages) #:use-module (guix gexp) + #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) ; avoid zlib, expat clashes #:use-module (guix download) #:use-module (guix utils) @@ -31,19 +33,24 @@ (define-module (gnu packages profiling) #:use-module (gnu packages bison) #:use-module (gnu packages compression) #:use-module (gnu packages documentation) + #:use-module (gnu packages engineering) #:use-module (gnu packages fabric-management) #:use-module (gnu packages flex) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages gawk) #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages libunwind) #:use-module (gnu packages linux) #:use-module (gnu packages mpi) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) - #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) - #:use-module (gnu packages qt)) + #:use-module (gnu packages qt) + #:use-module (gnu packages xdisorg)) ;; Fixme: Separate out lib and fix resulting cycle errors; separate libpfm ;; output(?); build libmsr and add that component. @@ -389,3 +396,45 @@ (define (make-scorep mpi) (license license:cpl1.0))) (define-public scorep-openmpi (make-scorep openmpi)) + +(define-public tracy-wayland + (package + (name "tracy-wayland") + (version "0.9.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/wolfpld/tracy.git") + (commit (string-append "v" version)))) + (sha256 + (base32 + "1znw1r1c4vrb9vrsr08gcwynpjda8xxmb3923yykpymw2hsm0n9b")) + (file-name (git-file-name "tracy" version)))) + (build-system gnu-build-system) + (arguments + (list #:tests? #f ;no test for the profiler + #:make-flags #~(list (string-append "CC=" + #$(cc-for-target))) + #:phases #~(modify-phases %standard-phases + (replace 'configure + (lambda _ + (chdir "profiler/build/unix"))) + (replace 'install + (lambda _ + (let ((bin (string-append #$output "/bin")) + (tracy (string-append #$output "/bin/tracy"))) + (mkdir-p bin) + (copy-file "Tracy-release" tracy))))))) + (inputs (list capstone + dbus + freetype + libxkbcommon + mesa + wayland)) + (native-inputs (list pkg-config)) + (home-page "https://github.com/wolfpld/tracy") + (synopsis "Frame profiler") + (description + "A real time, nanosecond resolution, remote telemetry, hybrid frame and +sampling profiler for games and other applications.") + (license license:bsd-3)))