Skip to content
Snippets Groups Projects
Unverified Commit 75ac7903 authored by Jean-Sébastien Pédron's avatar Jean-Sébastien Pédron
Browse files

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.
parent 6853ab17
No related branches found
No related tags found
No related merge requests found
Showing
with 223 additions and 16 deletions
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} \
......
--- 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
--- 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"),
--- 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;
--- 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"
--- 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"
--- 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"
--- 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"
--- 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
--- 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"
--- 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment