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