Skip to content

Commit 5ae9d75

Browse files
Refactor to make supporting more compilers more straightforward
1 parent ed3f9c6 commit 5ae9d75

File tree

2 files changed

+119
-108
lines changed

2 files changed

+119
-108
lines changed

bootstrap/src/Build.hs

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{-# LANGUAGE MultiWayIf #-}
22
module Build
3-
( buildLibrary
3+
( CompilerSettings(..)
4+
, buildLibrary
45
, buildProgram
56
, buildWithScript
67
)
@@ -50,22 +51,28 @@ import System.Directory ( createDirectoryIfMissing
5051
, withCurrentDirectory
5152
)
5253

54+
data CompilerSettings = CompilerSettings {
55+
compilerSettingsCompiler :: FilePath
56+
, compilerSettingsFlags :: [String]
57+
, compilerSettingsModuleFlag :: String
58+
, compilerSettingsIncludeFlag :: String
59+
}
60+
5361
buildProgram
5462
:: FilePath
5563
-> [FilePath]
5664
-> [FilePattern]
5765
-> FilePath
58-
-> FilePath
59-
-> [String]
66+
-> CompilerSettings
6067
-> String
6168
-> FilePath
6269
-> [FilePath]
6370
-> IO ()
64-
buildProgram programDirectory' libraryDirectories sourceExtensions buildDirectory' compiler flags programName programSource archives
71+
buildProgram programDirectory' libraryDirectories sourceExtensions buildDirectory' (CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) programName programSource archives
6572
= do
6673
let programDirectory = foldl1 (</>) (splitDirectories programDirectory')
67-
let buildDirectory = foldl1 (</>) (splitDirectories buildDirectory')
68-
let includeFlags = map ("-I" ++) libraryDirectories
74+
let buildDirectory = foldl1 (</>) (splitDirectories buildDirectory')
75+
let includeFlags = map (includeFlag ++) libraryDirectories
6976
sourceFiles <- getDirectoriesFiles [programDirectory] sourceExtensions
7077
rawSources <- mapM sourceFileToRawSource sourceFiles
7178
let sources' = map processRawSource rawSources
@@ -98,7 +105,7 @@ buildProgram programDirectory' libraryDirectories sourceExtensions buildDirector
98105
in fileMatcher &?> \(objectFile : _) -> do
99106
need (sourceFile : directDependencies)
100107
cmd compiler
101-
["-c", "-J" ++ buildDirectory]
108+
["-c", moduleFlag ++ buildDirectory]
102109
includeFlags
103110
flags
104111
["-o", objectFile, sourceFile]
@@ -112,14 +119,13 @@ buildLibrary
112119
:: FilePath
113120
-> [FilePattern]
114121
-> FilePath
115-
-> FilePath
116-
-> [String]
122+
-> CompilerSettings
117123
-> String
118124
-> [FilePath]
119125
-> IO (FilePath)
120-
buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags libraryName otherLibraryDirectories
126+
buildLibrary libraryDirectory sourceExtensions buildDirectory (CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) libraryName otherLibraryDirectories
121127
= do
122-
let includeFlags = map ("-I" ++) otherLibraryDirectories
128+
let includeFlags = map (includeFlag ++) otherLibraryDirectories
123129
sourceFiles <- getDirectoriesFiles [libraryDirectory] sourceExtensions
124130
rawSources <- mapM sourceFileToRawSource sourceFiles
125131
let sources = map processRawSource rawSources
@@ -149,7 +155,7 @@ buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags lib
149155
in fileMatcher &?> \(objectFile : _) -> do
150156
need (sourceFile : directDependencies)
151157
cmd compiler
152-
["-c", "-J" ++ buildDirectory]
158+
["-c", moduleFlag ++ buildDirectory]
153159
includeFlags
154160
flags
155161
["-o", objectFile, sourceFile]
@@ -164,18 +170,19 @@ buildWithScript
164170
:: String
165171
-> FilePath
166172
-> FilePath
167-
-> FilePath
168-
-> [String]
173+
-> CompilerSettings
169174
-> String
170175
-> [FilePath]
171176
-> IO (FilePath)
172-
buildWithScript script projectDirectory buildDirectory compiler flags libraryName otherLibraryDirectories
177+
buildWithScript script projectDirectory buildDirectory (CompilerSettings { compilerSettingsCompiler = compiler, compilerSettingsFlags = flags, compilerSettingsModuleFlag = moduleFlag, compilerSettingsIncludeFlag = includeFlag }) libraryName otherLibraryDirectories
173178
= do
174179
absoluteBuildDirectory <- makeAbsolute buildDirectory
175180
createDirectoryIfMissing True absoluteBuildDirectory
176181
absoluteLibraryDirectories <- mapM makeAbsolute otherLibraryDirectories
177-
setEnv "FC" compiler
178-
setEnv "FFLAGS" (intercalate " " flags)
182+
setEnv "FC" compiler
183+
setEnv "FFLAGS" (intercalate " " flags)
184+
setEnv "FINCLUDEFLAG" includeFlag
185+
setEnv "FMODUELFLAG" moduleFlag
179186
setEnv "BUILD_DIR" $ unWindowsPath absoluteBuildDirectory
180187
setEnv "INCLUDE_DIRS"
181188
(intercalate " " (map unWindowsPath absoluteLibraryDirectories))

0 commit comments

Comments
 (0)