summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamar Christina <tamar@zhox.com>2021-06-06 18:22:52 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-06-24 12:01:58 -0400
commit74c874148fbea996cadf1d9fa50f2a44488dd82b (patch)
treeada4f2358c096ac587c4b43400e6e7696a8139fe
parent38a6d8b8ce838d09a918a536ac80427d5555ca6d (diff)
downloadhaskell-74c874148fbea996cadf1d9fa50f2a44488dd82b.tar.gz
rts: move xxxHash out of the user namespace
-rw-r--r--hadrian/src/Settings/Packages.hs6
-rw-r--r--rts/Hash.c13
-rw-r--r--rts/ghc.mk7
-rw-r--r--rts/rts.cabal.in6
4 files changed, 25 insertions, 7 deletions
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index a08cc3ee98..48f504a634 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -319,10 +319,8 @@ rtsPackageArgs = package rts ? do
-- We're after pur performance here. So make sure fast math and
-- vectorization is enabled.
- , input "**/xxhash.c" ? pure
- [ "-O3"
- , "-ffast-math"
- , "-ftree-vectorize" ]
+ , input "**/Hash.c" ? pure
+ [ "-O3" ]
, inputs ["**/Evac.c", "**/Evac_thr.c"] ? arg "-funroll-loops"
diff --git a/rts/Hash.c b/rts/Hash.c
index 6e1873ff29..39c5360f56 100644
--- a/rts/Hash.c
+++ b/rts/Hash.c
@@ -13,6 +13,19 @@
#include "Hash.h"
#include "RtsUtils.h"
+
+/* This file needs to be compiled with vectorization enabled. Unfortunately
+ since we compile these things these days with cabal we can no longer
+ specify optimization per file. So we have to resort to pragmas. */
+#if defined(__GNUC__) || defined(__GNUG__)
+#pragma GCC push_options
+#pragma GCC optimize ("O3")
+#endif
+
+#define XXH_NAMESPACE __rts_
+#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */
+#define XXH_PRIVATE_API
+
#include "xxhash.h"
#include <string.h>
diff --git a/rts/ghc.mk b/rts/ghc.mk
index 73a65824ba..be9b03e169 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -45,7 +45,10 @@ else
ALL_DIRS += posix
endif
-rts_C_SRCS := $(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c))
+tmp_rts_C_SRCS := $(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c))
+# We shouldn't include this file in the binary, it's a common function so
+# it will likely clash with something later. See #19948
+rts_C_SRCS = $(filter-out rts/xxhash.c, $(tmp_rts_C_SRCS))
rts_C_HOOK_SRCS := $(wildcard rts/hooks/*.c)
rts_CMM_SRCS := $(wildcard rts/*.cmm)
@@ -428,7 +431,7 @@ rts/RtsUtils_CC_OPTS += -DTargetVendor=\"$(TargetVendor_CPP)\"
rts/RtsUtils_CC_OPTS += -DGhcUnregisterised=\"$(GhcUnregisterised)\"
rts/RtsUtils_CC_OPTS += -DTablesNextToCode=\"$(TablesNextToCode)\"
#
-rts/xxhash_CC_OPTS += -O3 -ffast-math -ftree-vectorize
+rts/Hash_CC_OPTS += -O3
# Compile various performance-critical pieces *without* -fPIC -dynamic
# even when building a shared library. If we don't do this, then the
diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in
index 9c698b09a3..22846ecc61 100644
--- a/rts/rts.cabal.in
+++ b/rts/rts.cabal.in
@@ -533,10 +533,14 @@ library
sm/Scav_thr.c
sm/Storage.c
sm/Sweep.c
- xxhash.c
fs.c
-- I wish we had wildcards..., this would be:
-- *.c hooks/**/*.c sm/**/*.c eventlog/**/*.c linker/**/*.c
+
+ extra-source-files:
+ -- This file needs to be in the package but shouldn't be compiled on its own.
+ xxhash.c
+
if os(windows)
c-sources: win32/AsyncMIO.c
win32/AsyncWinIO.c