Skip to content

Commit 22d1f58

Browse files
zlonastMikolaj
authored andcommitted
Merging all resource flags.
All resource options now use base options. Add test for FFI/ForeignOptsCapi. Update test ShowBuildInfo/Complex. Add ghcOptCcProgram to componentGhcOptions.
1 parent 2e30cb8 commit 22d1f58

File tree

18 files changed

+358
-282
lines changed

18 files changed

+358
-282
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: 25 additions & 12 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,15 @@ 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+
ghcOptCxxOptions = Internal.separateGhcOptions (mkVersion [8, 10]) (compiler lbi) (Internal.defaultGhcOptCxxOptions lbi bi)
82+
, -- there are problems with linking with versions lower than 9.4, that's why we need this duplication
83+
ghcOptCcProgram = Internal.defaultGhcOptCcProgram lbi
84+
}
85+
)
7786
( \c -> do
7887
let cFiles = cSources (componentBuildInfo c)
7988
case c of
@@ -86,7 +95,15 @@ buildCSources mbMainFile =
8695
buildCxxSources mbMainFile =
8796
buildExtraSources
8897
"C++ Sources"
89-
Internal.componentCxxGhcOptions
98+
( \verbosity lbi bi clbi odir filename ->
99+
(Internal.sourcesGhcOptions verbosity lbi bi clbi odir filename)
100+
{ -- C++ compiler options: GHC >= 8.10 requires -optcxx, older requires -optc
101+
-- we want to be able to support cxx-options and cc-options separately
102+
ghcOptCcOptions = Internal.separateGhcOptions (mkVersion [8, 10]) (compiler lbi) (Internal.defaultGhcOptCcOptions lbi bi)
103+
, -- there are problems with linking with versions lower than 9.4, that's why we need this duplication
104+
ghcOptCcProgram = Internal.defaultGhcOptCcProgram lbi
105+
}
106+
)
90107
( \c -> do
91108
let cxxFiles = cxxSources (componentBuildInfo c)
92109
case c of
@@ -101,7 +118,7 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
101118
let hasJsSupport = hostArch == JavaScript
102119
buildExtraSources
103120
"JS Sources"
104-
Internal.componentJsGhcOptions
121+
Internal.sourcesGhcOptions
105122
( \c ->
106123
if hasJsSupport
107124
then -- JS files are C-like with GHC's JS backend: they are
@@ -117,12 +134,12 @@ buildJsSources _mbMainFile ghcProg buildTargetDir neededWays = do
117134
buildAsmSources _mbMainFile =
118135
buildExtraSources
119136
"Assembler Sources"
120-
Internal.componentAsmGhcOptions
137+
Internal.sourcesGhcOptions
121138
(asmSources . componentBuildInfo)
122139
buildCmmSources _mbMainFile =
123140
buildExtraSources
124141
"C-- Sources"
125-
Internal.componentCmmGhcOptions
142+
Internal.sourcesGhcOptions
126143
(cmmSources . componentBuildInfo)
127144

128145
-- | Create 'PreBuildComponentRules' for a given type of extra build sources
@@ -140,9 +157,7 @@ buildExtraSources
140157
-> GhcOptions
141158
)
142159
-- ^ Function to determine the @'GhcOptions'@ for the
143-
-- invocation of GHC when compiling these extra sources (e.g.
144-
-- @'Internal.componentCxxGhcOptions'@,
145-
-- @'Internal.componentCmmGhcOptions'@)
160+
-- invocation of GHC when compiling these extra sources
146161
-> (Component -> [SymbolicPath Pkg File])
147162
-- ^ View the extra sources of a component, typically from
148163
-- the build info (e.g. @'asmSources'@, @'cSources'@).
@@ -211,14 +226,12 @@ buildExtraSources
211226
sharedSrcOpts =
212227
vanillaSrcOpts
213228
`mappend` mempty
214-
{ ghcOptFPic = toFlag True
215-
, ghcOptDynLinkMode = toFlag GhcDynamicOnly
229+
{ ghcOptDynLinkMode = toFlag GhcDynamicOnly
216230
}
217231
profSharedSrcOpts =
218232
vanillaSrcOpts
219233
`mappend` mempty
220234
{ ghcOptProfilingMode = toFlag True
221-
, ghcOptFPic = toFlag True
222235
, ghcOptDynLinkMode = toFlag GhcDynamicOnly
223236
}
224237
-- TODO: Placing all Haskell, C, & C++ objects in a single directory

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)