Re: git: 75ac7903573c - main - graphics/darktable: Use GCC as the compiler instead of LLVM

From: Dima Panov <fluffy_at_FreeBSD.org>
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