From b8ce5dfe1c2a8fc0e9f75fa46ef5ef4f682c2388 Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Fri, 22 Sep 2023 20:20:11 -0400
Subject: [PATCH] Define `TABLES_NEXT_TO_CODE` in the RTS configure

We create a new cabal flag to facilitate this.
---
 configure.ac                     | 3 ---
 hadrian/src/Settings/Packages.hs | 9 +++++----
 rts/configure.ac                 | 7 +++++++
 rts/rts.cabal                    | 2 ++
 4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 480dba29c48a..b593fbe32e78 100644
--- a/configure.ac
+++ b/configure.ac
@@ -298,9 +298,6 @@ dnl ** Do a build with tables next to code?
 dnl --------------------------------------------------------------
 
 GHC_TABLES_NEXT_TO_CODE
-if test x"$TablesNextToCode" = xYES; then
-   AC_DEFINE([TABLES_NEXT_TO_CODE], [1], [Define to 1 if info tables are laid out next to code])
-fi
 AC_SUBST(TablesNextToCode)
 
 # Requires FPTOOLS_SET_PLATFORMS_VARS to be run first.
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index 4dba22765993..700e76c508a7 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -281,8 +281,8 @@ rtsPackageArgs = package rts ? do
     targetArch     <- queryTarget queryArch
     targetOs       <- queryTarget queryOS
     targetVendor   <- queryTarget queryVendor
-    ghcUnreg       <- yesNo <$> queryTarget tgtUnregisterised
-    ghcEnableTNC   <- yesNo <$> queryTarget tgtTablesNextToCode
+    ghcUnreg       <- queryTarget tgtUnregisterised
+    ghcEnableTNC   <- queryTarget tgtTablesNextToCode
     rtsWays        <- getRtsWays
     way            <- getWay
     path           <- getBuildPath
@@ -355,8 +355,8 @@ rtsPackageArgs = package rts ? do
             , "-DTargetArch="                ++ show targetArch
             , "-DTargetOS="                  ++ show targetOs
             , "-DTargetVendor="              ++ show targetVendor
-            , "-DGhcUnregisterised="         ++ show ghcUnreg
-            , "-DTablesNextToCode="          ++ show ghcEnableTNC
+            , "-DGhcUnregisterised="         ++ show (yesNo ghcUnreg)
+            , "-DTablesNextToCode="          ++ show (yesNo ghcEnableTNC)
             , "-DRtsWay=\"rts_" ++ show way ++ "\""
             ]
 
@@ -414,6 +414,7 @@ rtsPackageArgs = package rts ? do
           , flag UseLibzstd                 `cabalFlag` "libzstd"
           , flag StaticLibzstd              `cabalFlag` "static-libzstd"
           , queryTargetTarget tgtSymbolsHaveLeadingUnderscore `cabalFlag` "leading-underscore"
+          , ghcEnableTNC                    `cabalFlag` "tables-next-to-code"
           , Debug `wayUnit` way             `cabalFlag` "find-ptr"
           ]
         , builder (Cabal Setup) ? mconcat
diff --git a/rts/configure.ac b/rts/configure.ac
index 7fa68dd5c1fb..378d70e95ed8 100644
--- a/rts/configure.ac
+++ b/rts/configure.ac
@@ -50,6 +50,13 @@ fi
 AC_CANONICAL_BUILD
 AC_CANONICAL_HOST
 
+dnl ** Do a build with tables next to code?
+dnl --------------------------------------------------------------
+
+AS_IF(
+  [test "$CABAL_FLAG_tables_next_to_code" = 1],
+  [AC_DEFINE([TABLES_NEXT_TO_CODE], [1], [Define to 1 if info tables are laid out next to code])])
+
 dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
 dnl later CC is copied to CC_STAGE{1,2,3}
 AC_PROG_CC([cc gcc clang])
diff --git a/rts/rts.cabal b/rts/rts.cabal
index 73b39bd7ca32..97ff7d302f5c 100644
--- a/rts/rts.cabal
+++ b/rts/rts.cabal
@@ -54,6 +54,8 @@ flag static-libzstd
   default: False
 flag leading-underscore
   default: False
+flag tables-next-to-code
+  default: False
 flag smp
   default: True
 flag find-ptr
-- 
GitLab