我总是用-DDEBUG构建GHC,因为这会在源代码中捕获许多错误。但我注意到我构建的编译器非常慢,特别是如果我用-O0构建stage1,我经常这样做,因为我可以更快地迭代。
我认为它目前速度非常慢(例如,用-O0构建的stage1编译器编译单个模块可能需要20分钟)。我打赌这是我的错——也许我最近在某个地方添加了一个“断言”,它的价格非常昂贵。(我确信大多数断言都很好。)
我希望能帮你解决这个问题。
为了帮助提高再现性,以下是hadrian/UserSettings.hs
我使用的文件,基于hadrian/src/UserSettings.hs
.在那之后hadrian/构建
--确保我们不会暴露任何折叠以保证快速重建
{-#选项_GHC-O0#-}
--如果你想自定义你的构建,你应该从
--将hadrian/src/UserSettings.hs复制到hadrian/UserSettings/hs并编辑您的副本。
--如果您不复制文件,git将跟踪您的更改,您可以
--意外提交。
--
--有关说明,请参见doc/user-settings.md,有关辅助信息,请参见src/Flavour.hs
--控制味道的功能。
--提交对此文件的更改时,请更新doc/user-settings.md。
模块用户设置(
userFlavours、userPackages、userDefaultFlavour、,
verboseCommand、buildProgressColour、successColour和finalStage
)其中
导入合格的数据。设置为集合
导入Oracle。标志(平台支持共享库)
进口口味。类型
导入表达式
导入{-#SOURCE#-}设置。违约
--有关说明,请参阅doc/user-settings.md。
--提交对此文件的更改时,请更新doc/user-settings.md。
--|默认口味的名称,即在没有--favor=<Name>时使用的口味
--这个论点传递给了哈德良。
userDefaultFlavour::字符串
userDefaultFlavour=“用户”
--|用户定义的构建风格。以“userFlavour”为例。
userFlavours::[口味]
userFlavours=[userFlavor]——如果需要,添加更多构建风格。
--|这是一个用户定义的构建风格示例。请随意修改
--通过从命令行传递@--favor=user@来使用。
userFlavour::Flavour
--在此处修改其他设置。
userFlavour=默认口味
{name=“用户”
--没有配置文件库
--这种“货物削减”的说法有点模糊
,libraryWays=集合.fromList<$>
mconcat公司
[纯[香草]
--默认情况下关闭分析
--,而不是阶段0?纯[剖析]
,而不是阶段0?平台支持共享库?纯[动态]]
--始终启用断言
--事实上,我不知道这能做什么
,ghcDebugAssertions=const True---<----我以为这已经打开了-DDEBUG,但它没有打开(至少不总是这样)
--用stage-1编译器构建的所有东西都有-ticky和-dcore-lint
--值得注意的是,图书馆
,args=mydefaultArgs
<>(生成器Ghc?(arg“-dcore-lint”<>arg“-DDEBUG”)
<>(builder Ghc?stage1?arg“-ticky”)--<---和ticky(但这是一个小问题)
}
--|所有默认的命令行参数。
mydefaultArgs::Args
mydefaultArgs=mconcat
[默认BuilderArgs
,源参数mydefaultSourceArgs
,默认PackageArgs]
--|默认源参数,例如优化设置。
mydefaultSourceArgs::SourceArgs
mydefaultSourceArgs=源参数
{hsDefault=mconcat[stage0?arg“-O”
,而不是阶段0?arg“-O2”
,arg“-H32m”]
,hsLibrary=notStage0?arg“-黑线鳕”
,hsCompiler=stage0?arg“-O0”--<-----------------编译阶段1使用-O0编译
--,hsCompiler=内存
,hsGhc=内存}
--|添加自定义包。注意,这只会让Hadrian知道
--新包装的存在;要真正构建它,您需要创建一个新的
--构建风味,修改默认构建的包列表。
userPackages::[Package]
userPackages=[]
--|设置为“True”可在生成过程中打印完整的命令行。注:
--这是一个“谓词”,因此您只能为特定对象启用详细输出
--目标,例如:@verboseCommand=packageghcPrim@。
verboseCommand::谓词
verboseCommand=do
verbosity<-expr getVerbosity
return$verbosity>=详细
--|设置构建进度消息的颜色(例如,执行构建命令)。
构建进度颜色::构建进度颜色
buildProgressColour=mkBuildProgressColor(暗品红)
--|设置成功消息的颜色(例如,成功构建包)。
成功颜色::成功颜色
successColour=mkSuccessColor(暗绿色)
--|构建StageN编译器后停止。
--例如,将“finalStage”设置为“Stage1”只会生成
--“Stage1”编译器。将其设置为“Stage3”将生成“Stage2”
--编译器。将其设置为“Stage0”将意味着根本不会生成任何内容。
finalStage::阶段
finalStage=阶段2