
Hello, I have a program and I'd like to permanently change the default RTS options. According to the GHC manual I can do that by linking with a snippet of C code: http://www.haskell.org/ghc/docs/latest/html/users_guide/runtime-control.html Look at section 4.14.5 at the bottom of the page. I can't seem to get cabal to link my program together so that my custom rts options take affect. To help demonstrate I've created a minimal test case: ------------- oom.cabal ------------------- name: OutOfMemory version: 0.1 cabal-version: -any license: AllRightsReserved license-file: "" build-depends: base -any c-sources: rtsoptions.c exposed-modules: Main Executable: oom Main-is: Main.hs ------------- end oom.cabal ----------- --------------- Main.hs --------------------- module Main where main :: IO () main = print $ foldl (+) 0 [1..100000000] --------------- End Main.hs -------------- /* rtsoptions.c */ char *ghc_rts_opts = "-M1024M -K256M"; /* end rtsoptions.c */ Also using the standard Setup.lhs: #! /usr/bin/runghc \begin{code} import Distribution.Simple main = defaultMain \end{code} When build and run this I get: C:\projects\tmp>runghc Setup.lhs build Preprocessing library OutOfMemory-0.1... Preprocessing executables for OutOfMemory-0.1... Building OutOfMemory-0.1... [1 of 1] Compiling Main ( Main.hs, dist\build\oom\oom-tmp/Main.o ) Linking dist\build\oom\oom.exe ... C:\projects\tmp>dist\build\oom\oom.exe Heap exhausted; Current maximum heap size is 268435456 bytes (256 Mb); use `+RTS -M<size>' to increase it. On the other hand, if I build rtsoptions.c manually and add it to the ghc-options line in the .cabal file it does build and run until in needs more than 976Mb (showing that the default RTS options are indeed different). Below is the trace of the build process: Preprocessing library OutOfMemory-0.1... Preprocessing executables for OutOfMemory-0.1... Building OutOfMemory-0.1... Building library... Building C Sources... C:\Program Files\Visual Haskell\bin\ghc.exe -odir dist\build -hidir dist\build -c -v rtsoptions.c Glasgow Haskell Compiler, Version 6.5, for Haskell 98, compiled by GHC version 6.5 Using package config file: C:\Program Files\Visual Haskell\package.conf Hsc static flags: -static *** C Compiler: C:\Program Files\Visual Haskell\gcc -BC:\Program Files\Visual Haskell\gcc-lib/ -x c rtsoptions.c -o C:\DOCUME~1\JASOND~1\LOCALS~1\Temp\ghc528_0.s -DDONT_WANT_WIN32_DLL_SUPPORT -v -S -Wimplicit -O -D__GLASGOW_HASKELL__=605 -I C:/Program Files/Visual Haskell\include -I C:/Program Files/Visual Haskell\include\mingw Reading specs from C:/Program Files/Visual Haskell/gcc-lib/specs Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c++,f77,objc --disable-win32-registry --disable-shared --enable-sjlj-exceptions Thread model: win32 gcc version 3.2.3 (mingw special 20030504-1) C:\Program Files\Visual Haskell\gcc-lib\cc1.exe -lang-c -v -I C:/Program Files/Visual Haskell\include -I C:/Program Files/Visual Haskell\include\mingw -iprefix C:\Program Files\Visual Haskell\../lib/gcc-lib/mingw32/3.2.3/ -isystem C:/Program Files/Visual Haskell/gcc-lib/include -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=3 -D__GXX_ABI_VERSION=102 -D_WIN32 -D__WIN32 -D__WIN32__ -DWIN32 -D__MINGW32__ -D__MSVCRT__ -DWINNT -D_X86_=1 -D_WIN32 -D__WIN32 -D__WIN32__ -D__WIN32__ -D__MINGW32__ -D__MSVCRT__ -D__WINNT__ -D_X86_=1 -D__WIN32 -D__WINNT -Asystem=winnt -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i586__ -D__tune_pentium__ -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__fastcall=__attribute__((__fastcall__)) -D_stdcall=__attribute__((__stdcall__)) -D_cdecl=__attribute__((__cdecl__)) -D_fastcall=__attribute__((__fastcall__)) -D__declspec(x)=__attribute__((x)) -DDONT_WANT_WIN32_DLL_SUPPORT -D__GLASGOW_HASKELL__=605 rtsoptions.c -quiet -dumpbase rtsoptions.c -O -Wimplicit -version -o C:\DOCUME~1\JASOND~1\LOCALS~1\Temp\ghc528_0.s GNU CPP version 3.2.3 (mingw special 20030504-1) (cpplib) (80386, BSD syntax) GNU C version 3.2.3 (mingw special 20030504-1) (mingw32) compiled by GNU C version 3.2.3 (mingw special). ignoring nonexistent directory "C:/Program Files/lib/gcc-lib/mingw32/3.2.3/../../../../include" ignoring nonexistent directory "C:/Program Files/lib/gcc-lib/mingw32/3.2.3/include" ignoring nonexistent directory "C:/Program Files/lib/gcc-lib/mingw32/3.2.3/../../../../mingw32/include" ignoring nonexistent directory "/mingw/lib/gcc-lib/mingw32/3.2.3/include" ignoring nonexistent directory "/mingw/lib/gcc-lib/mingw32/3.2.3/../../../../mingw32/include" ignoring nonexistent directory "/usr/local/mingw32/include" #include "..." search starts here: #include <...> search starts here: C:/Program Files/Visual Haskell/include C:/Program Files/Visual Haskell/include/mingw C:/Program Files/Visual Haskell/gcc-lib/include /mingw/lib/gcc-lib/mingw32/3.2.3/../../../../include /mingw/include End of search list. *** Assembler: C:\Program Files\Visual Haskell\gcc -BC:\Program Files\Visual Haskell\gcc-lib/ -c C:\DOCUME~1\JASOND~1\LOCALS~1\Temp\ghc528_0.s -o dist\build\rtsoptions.o *** Deleting temp files: Deleting: C:/DOCUME~1/JASOND~1/LOCALS~1/Temp/ghc528_0.s cabal-linking... C:\Program Files\Visual Haskell\bin\ar.exe qv dist\build\libHSOutOfMemory-0.1.a dist\build\rtsoptions.o a - dist\build\rtsoptions.o C:\Program Files\Visual Haskell\gcc-lib\ld.exe -r -x -o dist\build\HSOutOfMemory-0.1.o dist\build\rtsoptions.o Building executable: oom... C:\Program Files\Visual Haskell\bin\ghc.exe -Idist\build -o dist\build\oom\oom --make -v -hide-all-packages -i -idist\build\autogen -i. -odir dist\build\oom\oom-tmp -hidir dist\build\oom\oom-tmp -package base-1.0 Main.hs Glasgow Haskell Compiler, Version 6.5, for Haskell 98, compiled by GHC version 6.5 Using package config file: C:\Program Files\Visual Haskell\package.conf Hsc static flags: -static *** Chasing dependencies: Chasing modules from: Main.hs Stable obj: [] Stable BCO: [] compile: input file Main.hs *** Checking old interface for Main: [1 of 1] Compiling Main ( Main.hs, dist\build\oom\oom-tmp/Main.o ) *** Parser: *** Renamer/typechecker: *** Desugar: Result size = 61 *** Simplify: Result size = 124 Result size = 108 Result size = 108 *** Tidy Core: Result size = 108 *** CorePrep: Result size = 118 *** Stg2Stg: *** CodeGen: *** CodeOutput: *** Assembler: C:\Program Files\Visual Haskell\gcc -BC:\Program Files\Visual Haskell\gcc-lib/ -I. -Idist\build -c C:\DOCUME~1\JASOND~1\LOCALS~1\Temp\ghc2924_0.s -o dist\build\oom\oom-tmp\Main.o *** Deleting temp files: Deleting: C:/DOCUME~1/JASOND~1/LOCALS~1/Temp/ghc2924_0.s Upsweep completely successful. *** Deleting temp files: Deleting: link: linkables are ... LinkableM (Mon Oct 9 11:28:19 Pacific Standard Time 2006) Main [DotO dist\build\oom\oom-tmp/Main.o] Linking dist\build\oom\oom.exe ... *** Linker: C:\Program Files\Visual Haskell\gcc -BC:\Program Files\Visual Haskell\gcc-lib/ -v -o dist\build\oom\oom.exe -DDONT_WANT_WIN32_DLL_SUPPORT dist\build\oom\oom-tmp/Main.o -LC:/Program Files/Visual Haskell -LC:/Program Files/Visual Haskell\gcc-lib -lHSbase -lHSbase_cbits -lwsock32 -lmsvcrt -lkernel32 -luser32 -lshell32 -lHSrts -lm -lgmp -lwsock32 -u _GHCziBase_Izh_static_info -u _GHCziBase_Czh_static_info -u _GHCziFloat_Fzh_static_info -u _GHCziFloat_Dzh_static_info -u _GHCziPtr_Ptr_static_info -u _GHCziWord_Wzh_static_info -u _GHCziInt_I8zh_static_info -u _GHCziInt_I16zh_static_info -u _GHCziInt_I32zh_static_info -u _GHCziInt_I64zh_static_info -u _GHCziWord_W8zh_static_info -u _GHCziWord_W16zh_static_info -u _GHCziWord_W32zh_static_info -u _GHCziWord_W64zh_static_info -u _GHCziStable_StablePtr_static_info -u _GHCziBase_Izh_con_info -u _GHCziBase_Czh_con_info -u _GHCziFloat_Fzh_con_info -u _GHCziFloat_Dzh_con_info -u _GHCziPtr_Ptr_con_info -u _GHCziPtr_FunPtr_con_info -u _GHCziStable_StablePtr_con_info -u _GHCziBase_False_closure -u _GHCziBase_True_closure -u _GHCziPack_unpackCString_closure -u _GHCziIOBase_stackOverflow_closure -u _GHCziIOBase_heapOverflow_closure -u _GHCziIOBase_NonTermination_closure -u _GHCziIOBase_BlockedOnDeadMVar_closure -u _GHCziIOBase_BlockedIndefinitely_closure -u _GHCziIOBase_Deadlock_closure -u _GHCziIOBase_NestedAtomically_closure -u _GHCziWeak_runFinalizzerBatch_closure Reading specs from C:/Program Files/Visual Haskell/gcc-lib/specs Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c++,f77,objc --disable-win32-registry --disable-shared --enable-sjlj-exceptions Thread model: win32 gcc version 3.2.3 (mingw special 20030504-1) C:\Program Files\Visual Haskell\gcc-lib\ld.exe -Bdynamic -o dist\build\oom\oom.exe -u _GHCziBase_Izh_static_info -u _GHCziBase_Czh_static_info -u _GHCziFloat_Fzh_static_info -u _GHCziFloat_Dzh_static_info -u _GHCziPtr_Ptr_static_info -u _GHCziWord_Wzh_static_info -u _GHCziInt_I8zh_static_info -u _GHCziInt_I16zh_static_info -u _GHCziInt_I32zh_static_info -u _GHCziInt_I64zh_static_info -u _GHCziWord_W8zh_static_info -u _GHCziWord_W16zh_static_info -u _GHCziWord_W32zh_static_info -u _GHCziWord_W64zh_static_info -u _GHCziStable_StablePtr_static_info -u _GHCziBase_Izh_con_info -u _GHCziBase_Czh_con_info -u _GHCziFloat_Fzh_con_info -u _GHCziFloat_Dzh_con_info -u _GHCziPtr_Ptr_con_info -u _GHCziPtr_FunPtr_con_info -u _GHCziStable_StablePtr_con_info -u _GHCziBase_False_closure -u _GHCziBase_True_closure -u _GHCziPack_unpackCString_closure -u _GHCziIOBase_stackOverflow_closure -u _GHCziIOBase_heapOverflow_closure -u _GHCziIOBase_NonTermination_closure -u _GHCziIOBase_BlockedOnDeadMVar_closure -u _GHCziIOBase_BlockedIndefinitely_closure -u _GHCziIOBase_Deadlock_closure -u _GHCziIOBase_NestedAtomically_closure -u _GHCziWeak_runFinalizzerBatch_closure C:/Program Files/Visual Haskell/gcc-lib/crt2.o C:/Program Files/Visual Haskell/gcc-lib/crtbegin.o -LC:/Program Files/Visual Haskell -LC:/Program Files/Visual Haskell\gcc-lib -LC:/Program Files/Visual Haskell/gcc-lib -L/mingw/lib/gcc-lib/mingw32/3.2.3/../../../../mingw32/lib -L/mingw/lib/gcc-lib/mingw32/3.2.3/../../.. dist\build\oom\oom-tmp/Main.o -lHSbase -lHSbase_cbits -lwsock32 -lmsvcrt -lkernel32 -luser32 -lshell32 -lHSrts -lm -lgmp -lwsock32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt C:/Program Files/Visual Haskell/gcc-lib/crtend.o link: done *** Deleting temp files: Deleting: Thanks, Jason