Skip to content

Commit 6e4ba65

Browse files
committed
Pass *-options and -pgmc to GHC
Refactor componentGhcOptions for pass *-options to all invoking GHC. During the refactoring process we needed to add componentGhcOptions to all Haskell sources. It was also worth add linkGhcOptions to linkLibrary same as componentGhcOptions to linkExecutable, linkFLib. Add test for PackageTests/FFI/ForeignOptsCapi to pass cc-options flags to *.h. Add -pgmc gcc to componentGhcOptions for versions newer then 9.4. Add more tests like PackageTests/ShowBuildInfo/Complex for -pgmc gcc and -optc-O2,-optcxx-O2,-opta-O2. Move PackageTests/Cmm* to PackageTests/Cmm/*. Fixes #9801 #4435
1 parent 2e30cb8 commit 6e4ba65

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+980
-310
lines changed

Cabal/src/Distribution/Simple/GHC.hs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ module Distribution.Simple.GHC
5858
, hcPkgInfo
5959
, registerPackage
6060
, Internal.componentGhcOptions
61-
, Internal.componentCcGhcOptions
6261
, getGhcAppDir
6362
, getLibDir
6463
, compilerBuildWay
@@ -744,7 +743,7 @@ libAbiHash verbosity _pkg_descr lbi lib clbi = do
744743
, ghcOptFPic = toFlag True
745744
, ghcOptHiSuffix = toFlag "dyn_hi"
746745
, ghcOptObjSuffix = toFlag "dyn_o"
747-
, ghcOptExtra = hcOptions GHC libBi ++ hcSharedOptions GHC libBi
746+
, ghcOptExtra = hcSharedOptions GHC libBi
748747
}
749748
profArgs =
750749
vanillaArgs
@@ -756,7 +755,7 @@ libAbiHash verbosity _pkg_descr lbi lib clbi = do
756755
(withProfLibDetail lbi)
757756
, ghcOptHiSuffix = toFlag "p_hi"
758757
, ghcOptObjSuffix = toFlag "p_o"
759-
, ghcOptExtra = hcOptions GHC libBi ++ hcProfOptions GHC libBi
758+
, ghcOptExtra = hcProfOptions GHC libBi
760759
}
761760
profDynArgs =
762761
vanillaArgs
@@ -770,7 +769,7 @@ libAbiHash verbosity _pkg_descr lbi lib clbi = do
770769
, ghcOptFPic = toFlag True
771770
, ghcOptHiSuffix = toFlag "p_dyn_hi"
772771
, ghcOptObjSuffix = toFlag "p_dyn_o"
773-
, ghcOptExtra = hcOptions GHC libBi ++ hcProfSharedOptions GHC libBi
772+
, ghcOptExtra = hcProfSharedOptions GHC libBi
774773
}
775774
ghcArgs =
776775
let (libWays, _, _) = buildWays lbi

Cabal/src/Distribution/Simple/GHC/Build/ExtraSources.hs

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ import Distribution.Utils.NubList
1717
import Distribution.Types.BuildInfo
1818
import Distribution.Types.Component
1919
import Distribution.Types.TargetInfo
20+
import Distribution.Types.Version
2021

2122
import Distribution.Simple.Build.Inputs
22-
import Distribution.Simple.GHC.Build.Modules
23+
import Distribution.Simple.BuildWay
2324
import Distribution.Simple.GHC.Build.Utils
2425
import Distribution.Simple.LocalBuildInfo
2526
import Distribution.Simple.Program.Types
@@ -73,7 +74,23 @@ buildCSources
7374
buildCSources mbMainFile =
7475
buildExtraSources
7576
"C Sources"
76-
Internal.componentCcGhcOptions
77+
( \verbosity lbi bi clbi odir filename ->
78+
(Internal.sourcesGhcOptions verbosity lbi bi clbi odir filename)
79+
{ -- C++ compiler options: GHC >= 8.10 requires -optcxx, older requires -optc
80+
-- we want to be able to support cxx-options and cc-options separately
81+
-- https://gitlab.haskell.org/ghc/ghc/-/issues/16477
82+
-- see example in cabal-testsuite/PackageTests/FFI/ForeignOptsC
83+
ghcOptCxxOptions =
84+
Internal.separateGhcOptions
85+
(mkVersion [8, 10])
86+
(compiler lbi)
87+
(Internal.defaultGhcOptCxxOptions lbi bi)
88+
, -- there are problems with linking with versions below 9.4,
89+
-- that's why we need this replacement for linkGhcOptions
90+
-- see example in cabal-testsuite/PackageTests/ShowBuildInfo/Complex
91+
ghcOptCcProgram = Internal.defaultGhcOptCcProgram lbi
92+
}
93+
)
7794
( \c -> do
7895
let cFiles = cSources (componentBuildInfo c)
7996
case c of
@@ -86,7 +103,23 @@ buildCSources mbMainFile =
86103
buildCxxSources mbMainFile =
87104
buildExtraSources
88105
"C++ Sources"
89-
Internal.componentCxxGhcOptions
106+
( \verbosity lbi bi clbi odir filename ->
107+
(Internal.sourcesGhcOptions verbosity lbi bi clbi odir filename)
108+
{ -- C++ compiler options: GHC >= 8.10 requires -optcxx, older requires -optc
109+
-- we want to be able to support cxx-options and cc-options separately
110+
-- https://gitlab.haskell.org/ghc/ghc/-/issues/16477
111+
-- see example in cabal-testsuite/PackageTests/FFI/ForeignOptsCxx
112+
ghcOptCcOptions =
113+
Internal.separateGhcOptions
114+
(mkVersion [8, 10])
115+
(compiler lbi)
116+
(Internal.defaultGhcOptCcOptions lbi bi)
117+
, -- there are problems with linking with versions below 9.4,
118+
-- that's why we need this replacement for linkGhcOptions
119+
-- see example in cabal-testsuite/PackageTests/ShowBuildInfo/Complex
120+
ghcOptCcProgram = Internal.defaultGhcOptCcProgram lbi
121+
}
122+
)
90123
( \c -> do
91124
let cxxFiles = cxxSources (componentBuildInfo c)
92125
case c of
@@ -101,7 +134,7 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
101134
let hasJsSupport = hostArch == JavaScript
102135
buildExtraSources
103136
"JS Sources"
104-
Internal.componentJsGhcOptions
137+
Internal.sourcesGhcOptions
105138
( \c ->
106139
if hasJsSupport
107140
then -- JS files are C-like with GHC's JS backend: they are
@@ -117,12 +150,12 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
117150
buildAsmSources _mbMainFile =
118151
buildExtraSources
119152
"Assembler Sources"
120-
Internal.componentAsmGhcOptions
153+
Internal.sourcesGhcOptions
121154
(asmSources . componentBuildInfo)
122155
buildCmmSources _mbMainFile =
123156
buildExtraSources
124157
"C-- Sources"
125-
Internal.componentCmmGhcOptions
158+
Internal.sourcesGhcOptions
126159
(cmmSources . componentBuildInfo)
127160

128161
-- | Create 'PreBuildComponentRules' for a given type of extra build sources
@@ -140,9 +173,7 @@ buildExtraSources
140173
-> GhcOptions
141174
)
142175
-- ^ Function to determine the @'GhcOptions'@ for the
143-
-- invocation of GHC when compiling these extra sources (e.g.
144-
-- @'Internal.componentCxxGhcOptions'@,
145-
-- @'Internal.componentCmmGhcOptions'@)
176+
-- invocation of GHC when compiling these extra sources
146177
-> (Component -> [SymbolicPath Pkg File])
147178
-- ^ View the extra sources of a component, typically from
148179
-- the build info (e.g. @'asmSources'@, @'cSources'@).

Cabal/src/Distribution/Simple/GHC/Build/Link.hs

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,9 @@ linkOrLoadComponent
118118
linkerOpts rpaths =
119119
mempty
120120
{ ghcOptLinkOptions =
121-
PD.ldOptions bi
122-
++ [ "-static"
123-
| withFullyStaticExe lbi
124-
]
121+
[ "-static"
122+
| withFullyStaticExe lbi
123+
]
125124
-- Pass extra `ld-options` given
126125
-- through to GHC's linker.
127126
++ maybe
@@ -341,36 +340,11 @@ linkLibrary buildTargetDir cleanedExtraLibDirs pkg_descr verbosity runGhcProg li
341340
--
342341
-- Right now, instead, we pass the path to each object file.
343342
ghcBaseLinkArgs =
344-
mempty
345-
{ -- TODO: This basically duplicates componentGhcOptions.
346-
-- I think we want to do the same as we do for executables: re-use the
347-
-- base options, and link by module names, not object paths.
348-
ghcOptExtra = hcStaticOptions GHC libBi
349-
, ghcOptHideAllPackages = toFlag True
350-
, ghcOptNoAutoLinkPackages = toFlag True
351-
, ghcOptPackageDBs = withPackageDB lbi
352-
, ghcOptThisUnitId = case clbi of
353-
LibComponentLocalBuildInfo{componentCompatPackageKey = pk} ->
354-
toFlag pk
355-
_ -> mempty
356-
, ghcOptThisComponentId = case clbi of
357-
LibComponentLocalBuildInfo
358-
{ componentInstantiatedWith = insts
359-
} ->
360-
if null insts
361-
then mempty
362-
else toFlag (componentComponentId clbi)
363-
_ -> mempty
364-
, ghcOptInstantiatedWith = case clbi of
365-
LibComponentLocalBuildInfo
366-
{ componentInstantiatedWith = insts
367-
} ->
368-
insts
369-
_ -> []
370-
, ghcOptPackages =
371-
toNubListR $
372-
Internal.mkGhcOptPackages mempty clbi
373-
}
343+
Internal.linkGhcOptions verbosity lbi libBi clbi
344+
<> mempty
345+
{ ghcOptExtra = hcStaticOptions GHC libBi
346+
, ghcOptNoAutoLinkPackages = toFlag True
347+
}
374348

375349
-- After the relocation lib is created we invoke ghc -shared
376350
-- with the dependencies spelled out as -package arguments

0 commit comments

Comments
 (0)