<div>I try to cross-compile GHC 8.0.1 with x86_64-mingw toolchain (gcc 6.2.1) and native GHC 8.0.1. Sources are from http://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz</div><blockquote><div>cp mk/build.mk.example mk/build.mk</div></blockquote><blockquote><div><div>sed -i '1iBuildFlavour = perf' mk/build.mk</div><div>sed -i '1iStage1Only = YES' mk/build.mk</div><div>sed -i '1iHADDOCK_DOCS = NO' mk/build.mk</div></div><div>./configure --prefix=~/x86_64-mingw \</div><div><div>--target=x86_64-unknown-mingw32 \</div><div>     --with-gcc=/usr/bin/x86_64-w64-mingw32-gcc \</div><div>    --with-ld=/usr/bin/x86_64-w64-mingw32-ld \</div><div>    --with-nm=/usr/bin/x86_64-w64-mingw32-nm \</div><div>    --with-ar=/usr/bin/x86_64-w64-mingw32-ar \</div><div>    --with-ranlib=/usr/bin/x86_64-w64-mingw32-ranlib</div><div>make -j8 install</div></div></blockquote><div><br />First encountered error is in Types.hsc:</div><blockquote><div> </div></blockquote><blockquote><div>Types.hsc: In function ‘_hsc2hs_test44’:</div><div>Types.hsc:219:20: error: storage size of ‘test_array’ isn’t constant</div></blockquote><div><br />There are testing scripts in utils/hsc2hs/CrossCodegen.hs that create such code:</div><blockquote><div>void _hsc2hs_test44() {</div><div>static int test_array[value];</div><div>...</div></blockquote><div>where 'value' is const int, that is forbidden by C standard. GCC older then 4.4 reject this code, but Clang doesn't (does with -pedantic-errors). But with-gcc=/usr/bin/x86_64-w64-mingw32-clang fails sooner, so it cannot help.</div><div>So I compiled Types.hsc (and three others) with clang and go further.</div><div> </div><div>Second error:</div><div><blockquote><div>rts/posix/GetTime.c:25:2: error: #error No implementation for getProcessCPUTime() available.</div><div> #error No implementation for getProcessCPUTime() available.</div></blockquote><div> </div><div>In file there are such strings:</div><div><blockquote><div>#if ! ((defined(HAVE_GETRUSAGE) && !irix_HOST_OS) || defined(HAVE_TIMES))</div><div>#error No implementation for getProcessCPUTime() available.</div><div>#endif</div></blockquote></div></div><div><br />Linux definitely hasn't such function, it's a part of Windows API.</div>