Re: git: 75ac7903573c - main - graphics/darktable: Use GCC as the compiler instead of LLVM
- Reply: Matthias Andree : "Re: git: 75ac7903573c - main - graphics/darktable: Use GCC as the compiler instead of LLVM"
- In reply to: Jean-Sébastien Pédron : "git: 75ac7903573c - main - graphics/darktable: Use GCC as the compiler instead of LLVM"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 28 Jan 2023 13:22:17 UTC
Moin-moin! USES+= llvm:14,build with USES+= compiler:gcc-c++11-lib USE_GCC=yes at same time? Please choose only one set, compiler.mk have a higher priority and conflicting with overriding CC BTW, USES=llvm also needs to set USE_CXXSTD='gnu++17', for example On 28.01.2023 01:45, Jean-Sébastien Pédron wrote: > The branch main has been updated by dumbbell: > > URL: https://cgit.FreeBSD.org/ports/commit/?id=75ac7903573cdc224246b8ec9446a97e0e4c099d > > commit 75ac7903573cdc224246b8ec9446a97e0e4c099d > Author: Jean-Sébastien Pédron <dumbbell@FreeBSD.org> > AuthorDate: 2023-01-25 17:54:51 +0000 > Commit: Jean-Sébastien Pédron <dumbbell@FreeBSD.org> > CommitDate: 2023-01-27 22:34:43 +0000 > > graphics/darktable: Use GCC as the compiler instead of LLVM > > Darktable source code is heavily tuned for GCC and its optimizations. It > always required some work to make it compile with LLVM. With LLVM 14+, > new errors around `static inline __attribute__((target-clones))` > appeared: the compiler failed to link the final executable because there > was multiple copies of the same ifunc resolver (the code originated from > a header included in a couple places). Apparently GCC knows how to deal > with the "static-inline"-ness of the resolver somehow. > > Unfortunately, even with GCC, we get several compilation failures > because the source files enable Graphite optimizations (using `#pragma`) > but our GCC compiler has Graphite disabled by default. All the patches > included in this commit simply delete all the corresponding `#pragma`. I > suppose Darktable will be slightly slower because of this, but I didn't > measure anything. > > In the end, the dependencies of the port change a bit because GCC > replaces LLVM. > --- > graphics/darktable/Makefile | 22 +++++------------- > .../files/patch-src_common_extra__optimizations.h | 22 ++++++++++++++++++ > .../darktable/files/patch-src_common_iop__order.c | 26 +++++++++++++++++++++ > .../files/patch-src_common_iop__profile.c | 27 ++++++++++++++++++++++ > .../files/patch-src_develop_blends_blendif__lab.c | 18 +++++++++++++++ > .../files/patch-src_develop_blends_blendif__raw.c | 18 +++++++++++++++ > .../patch-src_develop_blends_blendif__rgb__hsl.c | 18 +++++++++++++++ > ...patch-src_develop_blends_blendif__rgb__jzczhz.c | 18 +++++++++++++++ > .../files/patch-src_iop_channelmixerrgb.c | 26 +++++++++++++++++++++ > graphics/darktable/files/patch-src_iop_filmicrgb.c | 24 +++++++++++++++++++ > .../darktable/files/patch-src_iop_negadoctor.c | 20 ++++++++++++++++ > 11 files changed, 223 insertions(+), 16 deletions(-) > > diff --git a/graphics/darktable/Makefile b/graphics/darktable/Makefile > index cae03ceb4345..cc27afcf1618 100644 > --- a/graphics/darktable/Makefile > +++ b/graphics/darktable/Makefile > @@ -1,6 +1,6 @@ > PORTNAME= darktable > PORTVERSION= 4.0.1 > -PORTREVISION= 2 > +PORTREVISION= 3 > CATEGORIES= graphics > MASTER_SITES= https://github.com/darktable-org/${PORTNAME}/releases/download/release-${PORTVERSION:C/\.rc/rc/}/ > > @@ -33,8 +33,9 @@ LIB_DEPENDS= libcolord-gtk.so:graphics/colord-gtk \ > libsoup-2.4.so:devel/libsoup \ > libtiff.so:graphics/tiff > > -USES= cmake compiler:c++14-lang desktop-file-utils gl gnome jpeg \ > - perl5 pkgconfig sdl shebangfix sqlite tar:xz xorg > +USES= cmake compiler:gcc-c++11-lib desktop-file-utils gl gnome jpeg \ > + llvm:14,build perl5 pkgconfig sdl shebangfix sqlite \ > + tar:xz xorg > USE_GL= gl > USE_GNOME= cairo gtk30 intltool librsvg2 libxml2 > USE_LDCONFIG= ${PREFIX}/lib/${PORTNAME} > @@ -43,6 +44,8 @@ USE_XORG= ice sm x11 xext xrandr > > SHEBANG_FILES= tools/*.sh > > +USE_GCC= yes > + > CMAKE_ARGS+= -DBINARY_PACKAGE_BUILD=1 \ > -DBUILD_CMSTEST:BOOL=ON \ > -DUSE_KWALLET:BOOL=ON > @@ -124,19 +127,6 @@ PLIST_SUB+= NO_OPENCL="" > > .include <bsd.port.pre.mk> > > -.if ${CHOSEN_COMPILER_TYPE} == clang && ${OPSYS} == FreeBSD || ${ARCH} == "i386" > -LLVM_DEFAULT= 13 > -BUILD_DEPENDS+= clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT} > -CC= ${LOCALBASE}/bin/clang${LLVM_DEFAULT} > -CPP= ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT} > -CXX= ${LOCALBASE}/bin/clang++${LLVM_DEFAULT} > -LD= ${LOCALBASE}/bin/ld.lld${LLVM_DEFAULT} > -BINARY_ALIAS+= ld.lld=${LOCALBASE}/bin/ld.lld${LLVM_DEFAULT} > -BINARY_ALIAS+= llvm-objcopy=${LOCALBASE}/bin/llvm-objcopy${LLVM_DEFAULT} > -BINARY_ALIAS+= llvm-ar=${LOCALBASE}/bin/llvm-ar${LLVM_DEFAULT} > -BINARY_ALIAS+= llvm-ranlib=${LOCALBASE}/bin/llvm-ranlib${LLVM_DEFAULT} > -.endif > - > # work around CMAKE/CCACHE flaw (cmake stomps over ccache) > .if "${WITH_CCACHE_BUILD}" == "yes" && !defined(NO_CCACHE) > CMAKE_ARGS+= -DCMAKE_C_COMPILER_LAUNCHER=${CCACHE_BIN} \ > diff --git a/graphics/darktable/files/patch-src_common_extra__optimizations.h b/graphics/darktable/files/patch-src_common_extra__optimizations.h > new file mode 100644 > index 000000000000..8bacc37406e0 > --- /dev/null > +++ b/graphics/darktable/files/patch-src_common_extra__optimizations.h > @@ -0,0 +1,22 @@ > +--- src/common/extra_optimizations.h.orig 2022-12-14 15:18:18 UTC > ++++ src/common/extra_optimizations.h > +@@ -17,19 +17,3 @@ > + */ > + > + #pragma once > +- > +-/* Enable extra optimizations on GCC by including this header at the very > +- * beginning of your *.c file (before any other includes). This applies > +- * these optimizations for all of the source file. > +- * > +- * we use finite-math-only because divisions by zero are manually avoided > +- * in the code, the rest is loop reorganization and vectorization optimization > +- **/ > +- > +-#if defined(__GNUC__) > +-#pragma GCC optimize ("unroll-loops", "split-loops", \ > +- "loop-nest-optimize", "tree-loop-im", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", \ > +- "variable-expansion-in-unroller", \ > +- "ivopts", "finite-math-only") > +-#endif > diff --git a/graphics/darktable/files/patch-src_common_iop__order.c b/graphics/darktable/files/patch-src_common_iop__order.c > new file mode 100644 > index 000000000000..a9d9238e7156 > --- /dev/null > +++ b/graphics/darktable/files/patch-src_common_iop__order.c > @@ -0,0 +1,26 @@ > +--- src/common/iop_order.c.orig 2023-01-26 22:08:42 UTC > ++++ src/common/iop_order.c > +@@ -36,23 +36,6 @@ static void _ioppr_reset_iop_order(GList *iop_order_li > + > + static void _ioppr_reset_iop_order(GList *iop_order_list); > + > +-/** Note : > +- * we do not use finite-math-only and fast-math because divisions by zero are not manually avoided in the code > +- * fp-contract=fast enables hardware-accelerated Fused Multiply-Add > +- * the rest is loop reorganization and vectorization optimization > +- **/ > +-#if defined(__GNUC__) > +-#pragma GCC optimize ("unroll-loops", "tree-loop-if-convert", \ > +- "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", \ > +- "unswitch-loops", "tree-loop-ivcanon", "ira-loop-pressure", \ > +- "split-ivs-in-unroller", "variable-expansion-in-unroller", \ > +- "split-loops", "ivopts", "predictive-commoning",\ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", \ > +- "fp-contract=fast", \ > +- "tree-vectorize") > +-#endif > +- > + const char *iop_order_string[] = > + { > + N_("custom"), > diff --git a/graphics/darktable/files/patch-src_common_iop__profile.c b/graphics/darktable/files/patch-src_common_iop__profile.c > new file mode 100644 > index 000000000000..86ede0dec073 > --- /dev/null > +++ b/graphics/darktable/files/patch-src_common_iop__profile.c > @@ -0,0 +1,27 @@ > +--- src/common/iop_profile.c.orig 2023-01-26 22:13:13 UTC > ++++ src/common/iop_profile.c > +@@ -32,24 +32,6 @@ > + #include <stdlib.h> > + #include <string.h> > + > +-/** Note : > +- * we do not use finite-math-only and fast-math because divisions by zero are not manually avoided in the code > +- * fp-contract=fast enables hardware-accelerated Fused Multiply-Add > +- * the rest is loop reorganization and vectorization optimization > +- **/ > +-#if defined(__GNUC__) > +-#pragma GCC optimize ("unroll-loops", "tree-loop-if-convert", \ > +- "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", \ > +- "unswitch-loops", "tree-loop-ivcanon", "ira-loop-pressure", \ > +- "split-ivs-in-unroller", "variable-expansion-in-unroller", \ > +- "split-loops", "ivopts", "predictive-commoning",\ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", \ > +- "fp-contract=fast", \ > +- "tree-vectorize") > +-#endif > +- > +- > + static void _mark_as_nonmatrix_profile(dt_iop_order_iccprofile_info_t *const profile_info) > + { > + profile_info->matrix_in[0][0] = NAN; > diff --git a/graphics/darktable/files/patch-src_develop_blends_blendif__lab.c b/graphics/darktable/files/patch-src_develop_blends_blendif__lab.c > new file mode 100644 > index 000000000000..8b00387f1b6f > --- /dev/null > +++ b/graphics/darktable/files/patch-src_develop_blends_blendif__lab.c > @@ -0,0 +1,18 @@ > +--- src/develop/blends/blendif_lab.c.orig 2023-01-26 22:14:31 UTC > ++++ src/develop/blends/blendif_lab.c > +@@ -16,15 +16,6 @@ > + along with darktable. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +-#if defined(__GNUC__) > +-#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", "tree-loop-vectorize", \ > +- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ > +- "fast-math", "no-math-errno") > +-#endif > +- > + #include "common/colorspaces_inline_conversions.h" > + #include "common/imagebuf.h" > + #include "common/math.h" > diff --git a/graphics/darktable/files/patch-src_develop_blends_blendif__raw.c b/graphics/darktable/files/patch-src_develop_blends_blendif__raw.c > new file mode 100644 > index 000000000000..7adff9b17074 > --- /dev/null > +++ b/graphics/darktable/files/patch-src_develop_blends_blendif__raw.c > @@ -0,0 +1,18 @@ > +--- src/develop/blends/blendif_raw.c.orig 2023-01-26 22:18:41 UTC > ++++ src/develop/blends/blendif_raw.c > +@@ -16,15 +16,6 @@ > + along with darktable. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +-#if defined(__GNUC__) > +-#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", "tree-loop-vectorize", \ > +- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ > +- "fast-math", "no-math-errno") > +-#endif > +- > + #include "common/imagebuf.h" > + #include "common/math.h" > + #include "develop/blend.h" > diff --git a/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__hsl.c b/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__hsl.c > new file mode 100644 > index 000000000000..aa2beea3ffdf > --- /dev/null > +++ b/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__hsl.c > @@ -0,0 +1,18 @@ > +--- src/develop/blends/blendif_rgb_hsl.c.orig 2023-01-26 22:19:10 UTC > ++++ src/develop/blends/blendif_rgb_hsl.c > +@@ -16,15 +16,6 @@ > + along with darktable. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +-#if defined(__GNUC__) > +-#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", "tree-loop-vectorize", \ > +- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ > +- "fast-math", "no-math-errno") > +-#endif > +- > + #include "common/colorspaces_inline_conversions.h" > + #include "common/imagebuf.h" > + #include "common/math.h" > diff --git a/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__jzczhz.c b/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__jzczhz.c > new file mode 100644 > index 000000000000..f3198d84e67f > --- /dev/null > +++ b/graphics/darktable/files/patch-src_develop_blends_blendif__rgb__jzczhz.c > @@ -0,0 +1,18 @@ > +--- src/develop/blends/blendif_rgb_jzczhz.c.orig 2023-01-26 22:19:33 UTC > ++++ src/develop/blends/blendif_rgb_jzczhz.c > +@@ -16,15 +16,6 @@ > + along with darktable. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +-#if defined(__GNUC__) > +-#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", "tree-loop-vectorize", \ > +- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ > +- "fast-math", "no-math-errno") > +-#endif > +- > + #include "common/colorspaces_inline_conversions.h" > + #include "common/imagebuf.h" > + #include "develop/blend.h" > diff --git a/graphics/darktable/files/patch-src_iop_channelmixerrgb.c b/graphics/darktable/files/patch-src_iop_channelmixerrgb.c > new file mode 100644 > index 000000000000..a16cc77221d5 > --- /dev/null > +++ b/graphics/darktable/files/patch-src_iop_channelmixerrgb.c > @@ -0,0 +1,26 @@ > +--- src/iop/channelmixerrgb.c.orig 2023-01-27 09:33:55 UTC > ++++ src/iop/channelmixerrgb.c > +@@ -49,23 +49,6 @@ DT_MODULE_INTROSPECTION(3, dt_iop_channelmixer_rgb_par > + > + DT_MODULE_INTROSPECTION(3, dt_iop_channelmixer_rgb_params_t) > + > +-/** Note : > +- * we use finite-math-only and fast-math because divisions by zero are manually avoided in the code > +- * fp-contract=fast enables hardware-accelerated Fused Multiply-Add > +- * the rest is loop reorganization and vectorization optimization > +- **/ > +-#if defined(__GNUC__) > +-#pragma GCC optimize ("unroll-loops", "tree-loop-if-convert", \ > +- "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", \ > +- "unswitch-loops", "tree-loop-ivcanon", "ira-loop-pressure", \ > +- "split-ivs-in-unroller", "variable-expansion-in-unroller", \ > +- "split-loops", "ivopts", "predictive-commoning",\ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", \ > +- "finite-math-only", "fp-contract=fast", "fast-math", \ > +- "tree-vectorize", "no-math-errno") > +-#endif > +- > + > + #define CHANNEL_SIZE 4 > + #define INVERSE_SQRT_3 0.5773502691896258f > diff --git a/graphics/darktable/files/patch-src_iop_filmicrgb.c b/graphics/darktable/files/patch-src_iop_filmicrgb.c > new file mode 100644 > index 000000000000..40e16290108b > --- /dev/null > +++ b/graphics/darktable/files/patch-src_iop_filmicrgb.c > @@ -0,0 +1,24 @@ > +--- src/iop/filmicrgb.c.orig 2023-01-27 09:19:36 UTC > ++++ src/iop/filmicrgb.c > +@@ -94,21 +94,6 @@ DT_MODULE_INTROSPECTION(6, dt_iop_filmicrgb_params_t) > + * */ > + > + > +-/** Note : > +- * we use finite-math-only and fast-math because divisions by zero are manually avoided in the code > +- * fp-contract=fast enables hardware-accelerated Fused Multiply-Add > +- * the rest is loop reorganization and vectorization optimization > +- **/ > +-#if defined(__GNUC__) > +-#pragma GCC optimize("unroll-loops", "tree-loop-if-convert", "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", "unswitch-loops", \ > +- "tree-loop-ivcanon", "ira-loop-pressure", "split-ivs-in-unroller", \ > +- "variable-expansion-in-unroller", "split-loops", "ivopts", "predictive-commoning", \ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", "finite-math-only", "fp-contract=fast", \ > +- "fast-math", "no-math-errno") > +-#endif > +- > +- > + typedef enum dt_iop_filmicrgb_methods_type_t > + { > + DT_FILMIC_METHOD_NONE = 0, // $DESCRIPTION: "no" > diff --git a/graphics/darktable/files/patch-src_iop_negadoctor.c b/graphics/darktable/files/patch-src_iop_negadoctor.c > new file mode 100644 > index 000000000000..6b27db770ffb > --- /dev/null > +++ b/graphics/darktable/files/patch-src_iop_negadoctor.c > @@ -0,0 +1,20 @@ > +--- src/iop/negadoctor.c.orig 2023-01-27 09:34:21 UTC > ++++ src/iop/negadoctor.c > +@@ -40,17 +40,6 @@ > + #include <math.h> > + #include <stdlib.h> > + > +-#if defined(__GNUC__) > +-#pragma GCC optimize ("unroll-loops", "tree-loop-if-convert", \ > +- "tree-loop-distribution", "no-strict-aliasing", \ > +- "loop-interchange", "loop-nest-optimize", "tree-loop-im", \ > +- "unswitch-loops", "tree-loop-ivcanon", "ira-loop-pressure", \ > +- "split-ivs-in-unroller", "variable-expansion-in-unroller", \ > +- "split-loops", "ivopts", "predictive-commoning",\ > +- "tree-loop-linear", "loop-block", "loop-strip-mine", \ > +- "finite-math-only", "fp-contract=fast", "fast-math") > +-#endif > +- > + /** DOCUMENTATION > + * > + * This module allows to invert scanned negatives and simulate their print on paper, based on Kodak Cineon > -- Sincerely, Dima (fluffy@FreeBSD.org, https://t.me/FluffyBSD) (desktop, kde, x11, office, ports-secteam)@FreeBSD team