Skip to content

Commit 0b74992

Browse files
committed
Add allGhcOptExtra from all *-options
Add test for capi Add #if for GHC >=810
1 parent 824735d commit 0b74992

File tree

14 files changed

+235
-243
lines changed

14 files changed

+235
-243
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: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ import Distribution.Types.Component
1919
import Distribution.Types.TargetInfo
2020

2121
import Distribution.Simple.Build.Inputs
22+
import Distribution.Simple.BuildPaths
2223
import Distribution.Simple.GHC.Build.Modules
2324
import Distribution.Simple.GHC.Build.Utils
2425
import Distribution.Simple.LocalBuildInfo
25-
import Distribution.Simple.Program.Types
26+
import Distribution.Simple.Program
2627
import Distribution.Simple.Setup.Common (commonSetupTempFileOptions)
2728
import Distribution.System (Arch (JavaScript), Platform (..))
2829
import Distribution.Types.ComponentLocalBuildInfo
@@ -73,7 +74,16 @@ buildCSources
7374
buildCSources mbMainFile =
7475
buildExtraSources
7576
"C Sources"
76-
Internal.componentCcGhcOptions
77+
( \verbosity lbi bi clbi odir filename ->
78+
Internal.commonAdditionalGhcOptions verbosity lbi bi clbi odir filename
79+
<> mempty
80+
{ ghcOptCcOptions = Internal.optimizationCFLags lbi ++ ccOptions bi
81+
, ghcOptCcProgram =
82+
maybeToFlag $
83+
programPath
84+
<$> lookupProgram gccProgram (withPrograms lbi)
85+
}
86+
)
7787
( \c -> do
7888
let cFiles = cSources (componentBuildInfo c)
7989
case c of
@@ -86,7 +96,16 @@ buildCSources mbMainFile =
8696
buildCxxSources mbMainFile =
8797
buildExtraSources
8898
"C++ Sources"
89-
Internal.componentCxxGhcOptions
99+
( \verbosity lbi bi clbi odir filename ->
100+
Internal.commonAdditionalGhcOptions verbosity lbi bi clbi odir filename
101+
<> mempty
102+
{ ghcOptCxxOptions = Internal.optimizationCFLags lbi ++ cxxOptions bi
103+
, ghcOptCcProgram =
104+
maybeToFlag $
105+
programPath
106+
<$> lookupProgram gccProgram (withPrograms lbi)
107+
}
108+
)
90109
( \c -> do
91110
let cxxFiles = cxxSources (componentBuildInfo c)
92111
case c of
@@ -101,7 +120,12 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
101120
let hasJsSupport = hostArch == JavaScript
102121
buildExtraSources
103122
"JS Sources"
104-
Internal.componentJsGhcOptions
123+
( \verbosity lbi bi clbi odir filename ->
124+
Internal.commonAdditionalGhcOptions verbosity lbi bi clbi odir filename
125+
<> mempty
126+
{ ghcOptJSppOptions = jsppOptions bi
127+
}
128+
)
105129
( \c ->
106130
if hasJsSupport
107131
then -- JS files are C-like with GHC's JS backend: they are
@@ -117,12 +141,26 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
117141
buildAsmSources _mbMainFile =
118142
buildExtraSources
119143
"Assembler Sources"
120-
Internal.componentAsmGhcOptions
144+
( \verbosity lbi bi clbi odir filename ->
145+
Internal.commonAdditionalGhcOptions verbosity lbi bi clbi odir filename
146+
<> mempty
147+
{ ghcOptAsmOptions = Internal.optimizationCFLags lbi ++ asmOptions bi
148+
}
149+
)
121150
(asmSources . componentBuildInfo)
122151
buildCmmSources _mbMainFile =
123152
buildExtraSources
124153
"C-- Sources"
125-
Internal.componentCmmGhcOptions
154+
( \verbosity lbi bi clbi odir filename ->
155+
Internal.commonAdditionalGhcOptions verbosity lbi bi clbi odir filename
156+
<> mempty
157+
{ ghcOptCppOptions = cppOptions bi
158+
, ghcOptCppIncludes =
159+
toNubListR $
160+
[autogenComponentModulesDir lbi clbi </> makeRelativePathEx cppHeaderName]
161+
, ghcOptExtra = cmmOptions bi
162+
}
163+
)
126164
(cmmSources . componentBuildInfo)
127165

128166
-- | Create 'PreBuildComponentRules' for a given type of extra build sources
@@ -140,9 +178,7 @@ buildExtraSources
140178
-> GhcOptions
141179
)
142180
-- ^ Function to determine the @'GhcOptions'@ for the
143-
-- invocation of GHC when compiling these extra sources (e.g.
144-
-- @'Internal.componentCxxGhcOptions'@,
145-
-- @'Internal.componentCmmGhcOptions'@)
181+
-- invocation of GHC when compiling these extra sources
146182
-> (Component -> [SymbolicPath Pkg File])
147183
-- ^ View the extra sources of a component, typically from
148184
-- the build info (e.g. @'asmSources'@, @'cSources'@).
@@ -211,14 +247,12 @@ buildExtraSources
211247
sharedSrcOpts =
212248
vanillaSrcOpts
213249
`mappend` mempty
214-
{ ghcOptFPic = toFlag True
215-
, ghcOptDynLinkMode = toFlag GhcDynamicOnly
250+
{ ghcOptDynLinkMode = toFlag GhcDynamicOnly
216251
}
217252
profSharedSrcOpts =
218253
vanillaSrcOpts
219254
`mappend` mempty
220255
{ ghcOptProfilingMode = toFlag True
221-
, ghcOptFPic = toFlag True
222256
, ghcOptDynLinkMode = toFlag GhcDynamicOnly
223257
}
224258
-- TODO: Placing all Haskell, C, & C++ objects in a single directory

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ buildHaskellModules numJobs ghcProg mbMainFile inputModules buildTargetDir neede
178178
, ghcOptInputModules = toNubListR inputModules
179179
, ghcOptInputFiles = toNubListR hsMains
180180
, ghcOptInputScripts = toNubListR scriptMains
181-
, ghcOptExtra = buildWayExtraHcOptions way GHC bi
181+
, ghcOptExtra = buildWayExtraHcOptions way GHC bi <> Internal.allGhcOptExtra bi (compiler lbi)
182182
, ghcOptHiSuffix = optSuffixFlag (buildWayPrefix way) "hi"
183183
, ghcOptObjSuffix = optSuffixFlag (buildWayPrefix way) "o"
184184
, ghcOptHPCDir = hpcdir (buildWayHpcWay way) -- maybe this should not be passed for vanilla?

0 commit comments

Comments
 (0)