[Git][ghc/ghc][wip/toolchain-selection] configure: Create and validate toolchain target file

Rodrigo Mesquita (@alt-romes) gitlab at gitlab.haskell.org
Mon Jun 5 16:58:42 UTC 2023



Rodrigo Mesquita pushed to branch wip/toolchain-selection at Glasgow Haskell Compiler / GHC


Commits:
f2b47a59 by Rodrigo Mesquita at 2023-06-05T17:58:23+01:00
configure: Create and validate toolchain target file

- - - - -


5 changed files:

- configure.ac
- + default.target.in
- m4/ghc_toolchain.m4
- + m4/prep_target_file.m4
- utils/ghc-toolchain/Main.hs


Changes:

=====================================
configure.ac
=====================================
@@ -646,7 +646,6 @@ dnl CONF_CC_OPTS_STAGE[012] accordingly.
 FP_CC_SUPPORTS_TARGET([$CC_STAGE0], [CONF_CC_OPTS_STAGE0], [CONF_CXX_OPTS_STAGE0], [CONF_GCC_LINKER_OPTS_STAGE0])
 FP_CC_SUPPORTS_TARGET([$CC], [CONF_CC_OPTS_STAGE1], [CONF_CXX_OPTS_STAGE1], [CONF_GCC_LINKER_OPTS_STAGE1])
 FP_CC_SUPPORTS_TARGET([$CC], [CONF_CC_OPTS_STAGE2], [CONF_CXX_OPTS_STAGE2], [CONF_GCC_LINKER_OPTS_STAGE2])
-FIND_GHC_TOOLCHAIN
 
 # CPP, CPPFLAGS
 # --with-cpp/-with-cpp-flags
@@ -1170,6 +1169,11 @@ checkMake380() {
 checkMake380 make
 checkMake380 gmake
 
+# Toolchain target files
+PREP_TARGET_FILE
+FIND_GHC_TOOLCHAIN
+VALIDATE_GHC_TOOLCHAIN
+
 AC_CONFIG_FILES(
 [ mk/project.mk
   hadrian/cfg/system.config
@@ -1178,6 +1182,7 @@ AC_CONFIG_FILES(
   hadrian/ghci-stack
   docs/users_guide/ghc_config.py
   distrib/configure.ac
+  default.target
 ])
 
 dnl Create the VERSION file, satisfying #22322.


=====================================
default.target.in
=====================================
@@ -0,0 +1 @@
+Target {tgtArchOs = ArchOS {archOS_arch = @HostArch_CPP@, archOS_OS = @HostOS_CPP@}, tgtSupportsGnuNonexecStack = @TargetHasGnuNonexecStackBool@, tgtSupportsSubsectionsViaSymbols = @TargetHasSubsectionsViaSymbolsBool@, tgtSupportsIdentDirective = @TargetHasIdentDirectiveBool@, tgtWordSize = WS at TargetWordSize@, tgtEndianness = LittleEndian, tgtSymbolsHaveLeadingUnderscore = @LeadingUnderscoreBool@, tgtLlvmTarget = "@HostPlatform@", tgtUnregisterised = @UnregisterisedBool@, tgtTablesNextToCode = @TablesNextToCodeBool@, tgtUseLibffiForAdjustors = @UseLibffiForAdjustorsBool@, tgtCCompiler = Cc {ccProgram = Program {prgPath = "@SettingsCCompilerCommand@", prgFlags = @SettingsCCompilerFlagsList@}}, tgtCxxCompiler = Cxx {cxxProgram = Program {prgPath = "@SettingsCxxCompilerCommand@", prgFlags = @SettingsCxxCompilerFlagsList@}}, tgtCPreprocessor = Cpp {cppProgram = Program {prgPath = "@CPPCmd@", prgFlags = @CONF_CPP_OPTS_STAGE1List@}}, tgtHsCPreprocessor = HsCpp {hsCppProgram = Program {prgPath = "@HaskellCPPCmd@", prgFlags = @HaskellCPPArgsList@}}, tgtCCompilerLink = CcLink {ccLinkProgram = Program {prgPath = "@SettingsCCompilerCommand@", prgFlags = @SettingsCCompilerLinkFlagsList@}, ccLinkSupportsNoPie = @SettingsCCompilerSupportsNoPieBool@, ccLinkSupportsCompactUnwind = @LdHasNoCompactUnwindBool@, ccLinkSupportsFilelist = @LdHasFilelistBool@, ccLinkSupportsResponseFiles = @LdSupportsResponseFilesBool@, ccLinkIsGnu = @LdIsGNULdBool@}, tgtAr = Ar {arMkArchive = Program {prgPath = "@AR@", prgFlags = @ArArgsList@}, arIsGnu = False, arSupportsAtFile = @ArSupportsAtFileBool@, arSupportsDashL = @ArSupportsDashLBool@, arNeedsRanlib = False}, tgtRanlib = @REAL_RANLIB_CMD@, tgtNm = Nm {nmProgram = Program {prgPath = "@NmCmd@", prgFlags = []}}, tgtMergeObjs = Just (MergeObjs {mergeObjsProgram = Program {prgPath = "@SettingsMergeObjectsCommand@", prgFlags = @SettingsMergeObjectsFlagsList@}}), tgtDllwrap = Nothing, tgtWindres = Nothing}


=====================================
m4/ghc_toolchain.m4
=====================================
@@ -66,8 +66,21 @@ AC_DEFUN([FIND_GHC_TOOLCHAIN],
     ) <acargs || exit 1
 
     cat acargs
-    cat default.target
+    cat default.ghc-toolchain.target
 
     #rm -Rf acargs acghc-toolchain actmp-ghc-toolchain
 ])
 
+
+AC_DEFUN([VALIDATE_GHC_TOOLCHAIN],[
+    A="default.target"
+    B="default.ghc-toolchain.target"
+    cat $A | tr ' ' '\n' > $A.diffable
+    cat $B | tr ' ' '\n' > $B.diffable
+    diff_output=`diff "$A.diffable" "$B.diffable" 2>&1`
+    if test -z "$diff_output"; then
+      true
+    else
+      AC_MSG_WARN([Differences found between $A and $B: $diff_output])
+    fi
+])


=====================================
m4/prep_target_file.m4
=====================================
@@ -0,0 +1,71 @@
+# PREP_BOOLEAN
+# ============
+#
+# Issue a substitution with True/False of [$1Bool] when $1 has YES/NO value
+# $1 = boolean variable to substitute
+AC_DEFUN([PREP_BOOLEAN],[
+    case "$$1" in
+        YES)
+          $1Bool=True
+          ;;
+        NO)
+          $1Bool=False
+          ;;
+        *)
+          AC_MSG_ERROR([Expecting YES/NO but got $$1 in $1])
+          ;;
+    esac
+    AC_SUBST([$1Bool])
+])
+
+# PREP_LIST
+# ============
+#
+# Issue a substitution with ["list","of","args"] of [$1List] when $1 is a
+# space-separated list of args
+# $1 = list variable to substitute
+dnl In autoconf, '@<:@' stands for '[', and '@:>@' for ']'.
+AC_DEFUN([PREP_LIST],[
+    TMP_ARR=($$1)
+    $1List="@<:@"
+    if test -z "$TMP_ARR"; then
+        true
+    else
+        $1List="${$1List}\"${TMP_ARR@<:@0@:>@}\""
+        for arg in "${TMP_ARR@<:@@@:>@:1}"
+        do
+            $1List="${$1List},\"$arg\""
+        done
+    fi
+    $1List="${$1List}@:>@"
+    AC_SUBST([$1List])
+    unset TMP_ARR
+])
+
+# Eventually: PREP_BUILD_TARGET_FILE, PREP_HOST_TARGET_FILE, PREP_TARGET_TARGET_FILE
+# Prepares required substitutions to generate the target file
+AC_DEFUN([PREP_TARGET_FILE],[
+    PREP_BOOLEAN([LdSupportsResponseFiles])
+    PREP_BOOLEAN([TargetHasGnuNonexecStack])
+    PREP_BOOLEAN([LeadingUnderscore])
+    PREP_BOOLEAN([ArSupportsAtFile])
+    PREP_BOOLEAN([ArSupportsDashL])
+    PREP_BOOLEAN([TargetHasIdentDirective])
+    PREP_BOOLEAN([SettingsCCompilerSupportsNoPie])
+    PREP_BOOLEAN([LdHasFilelist])
+    PREP_BOOLEAN([LdIsGNULd])
+    PREP_BOOLEAN([LdHasNoCompactUnwind])
+    PREP_BOOLEAN([TargetHasSubsectionsViaSymbols])
+    PREP_BOOLEAN([Unregisterised])
+    PREP_BOOLEAN([TablesNextToCode])
+    PREP_BOOLEAN([UseLibffiForAdjustors])
+    PREP_LIST([SettingsMergeObjectsFlags])
+    PREP_LIST([ArArgs])
+    PREP_LIST([SettingsCCompilerLinkFlags])
+    PREP_LIST([HaskellCPPArgs])
+    PREP_LIST([CONF_CPP_OPTS_STAGE1])
+    PREP_LIST([SettingsCxxCompilerFlags])
+    PREP_LIST([SettingsCCompilerFlags])
+])
+
+AC_DEFUN()


=====================================
utils/ghc-toolchain/Main.hs
=====================================
@@ -216,7 +216,9 @@ run :: Opts -> M ()
 run opts = do
     tgt <- mkTarget opts
     logDebug $ "Final Target: " ++ show tgt
-    writeFile "default.target" (show tgt)
+    let file = "default.ghc-toolchain.target"
+    writeFile file (show tgt)
+    appendFile file "\n" -- eol
 
 optional :: M a -> M (Maybe a)
 optional k = fmap Just k <|> pure Nothing



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f2b47a59bcc5fe3f9b17d6321d9a9e7ee062d8dc

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/f2b47a59bcc5fe3f9b17d6321d9a9e7ee062d8dc
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230605/8d2986d9/attachment-0001.html>


More information about the ghc-commits mailing list