Workaround for building profiling libs and apps with Cabal

I recently tried to build a version of an application with Cabal to use with profiling by simply adding: ghc-options: -prof -auto-all to my Cabal file but this did not work because the generated .hi interface files ended in .hi and not .p_hi as expected and the .o and .a files also did not have the expected names. As a work-around I wrote a small script "fixhi" to create symbolic links for the expected filenames. The script can be adjusted to perform a rename by substituting the "ln -s" with "mv". The script is at the end of the message. It is designed to be run in the install directory of the package for a specific version e.g. lagavulin> pwd /c/Program Files/lava/lava-0.1 lagavulin> fixhi Symbolically linking ./Lava/Below.hi to ./Lava/Below.p_hi Symbolically linking ./Lava/Beside.hi to ./Lava/Beside.p_hi Symbolically linking ./Lava/Bit.hi to ./Lava/Bit.p_hi Symbolically linking ./Lava/Classes.hi to ./Lava/Classes.p_hi Symbolically linking ./Lava/Col.hi to ./Lava/Col.p_hi <...lots of lines deleted...> Symbolically linking ./Xilinx/Adder.hi to ./Xilinx/Adder.p_hi Symbolically linking ./Xilinx/Comparator.hi to ./Xilinx/Comparator.p_hi Symbolically linking ./Xilinx/Components.hi to ./Xilinx/Components.p_hi Symbolically linking ./Xilinx/OneBitAdder.hi to ./Xilinx/OneBitAdder.p_hi Symbolically linking ./Xilinx/OneBitSubtractor.hi to ./Xilinx/OneBitSubtractor.p_hi Symbolically linking ./Xilinx/Subtractor.hi to ./Xilinx/Subtractor.p_hi Symbolically linking ./Xilinx.hi to ./Xilinx.p_hi Symbolically linking ./HSlava-0.1.o to ./HSlava-0.1_p.o Symbolically linking ./libHSlava-0.1.a to ./libHSlava-0.1_p.a lagavulin> Application of the script should be idempotent. A simple change could allow the script to take a path to the installation so it can be run from elsewhere (e.g. a Makefile). I also expected when I used ghc --make to compile my programs that use this library to also be automatically compiled with "-prof -auto-all" but I guess that must be another option to Cabal and I had to add this to the ghc compilation command for the clients of this library. Hopefully the next version of Cabal will make it easier to build profiled and non-profiled versions of libraries and applications. Until then maybe the script below might provide some utility to others. I've only tested it under Microsoft Windows with msys (other OS-es are kind of hard to come by where I work). Cheers, Satnam Singh Microsoft One Microsoft Way Redmond Washington 98052-6399 USA #!/bin/sh # Workaround script for producing profiling interface files and libs # with the expected extension for use with Cabal. # Find and symbolically link to the interface files. for intfFile in `find . -name "*.hi" -print` do echo Symbolically linking $intfFile to ${intfFile%*.*}.p_hi ln -f -s $intfFile ${intfFile%*.*}.p_hi done # Find all the libraries and objects and link to them too. # First delete old profiling library files. rm -rf *_p.a *_p.o for objFile in `find . -name "*.o" -print` do echo Symbolically linking $objFile to ${objFile%*.*}_p.o ln -f -s $objFile ${objFile%*.*}_p.o done for libFile in `find . -name "*.a" -print` do echo Symbolically linking $libFile to ${libFile%*.*}_p.a ln -f -s $libFile ${libFile%*.*}_p.a done

In the CVS / darcs head, there's a patch for building profiling libraries in cabal. Use ./setup configure --help to get the information on the flags. Can folks try this out and make sure it works the way you'd like? peace, isaac

On Thu, Jun 16, 2005 at 08:51:14AM -0700, Isaac Jones wrote:
In the CVS / darcs head, there's a patch for building profiling libraries in cabal. Use ./setup configure --help to get the information on the flags. Can folks try this out and make sure it works the way you'd like?
There seems to be nothing in the User's Guide about it. I think the prof-options field should be called ghc-prof-options.
participants (3)
-
Isaac Jones
-
Ross Paterson
-
Satnam Singh