[cfe-dev] [libcxx] build system questions

Larry Evans cppljevans at suddenlink.net
Fri Feb 11 12:31:05 PST 2011


On 12/05/10 09:04, Howard Hinnant wrote:
> On Dec 5, 2010, at 4:44 AM, Bjorn Reese wrote:
>
>> On 2010-12-05 05:29, sashan wrote:
>>
>>> I downloaded libcxx and built it. I noticed that the buildit
>>> script doesn't do dependency checking. It seems pretty
>>> non-standard. Most projects' build system
>>
>> While I agree with you, we should keep in mind that libcxx is
>> mainly written by a single person, and he has presumably not had
>> the need for any cross-platform build system yet. But I am sure
>> that he would welcome contributions to improve this situation.
>>
>> I simply made my own wrapper scripts to circumvent to problem on Linux.
>> Instead of calling buildit directly I used the script below:
>>
>> export CC=g++
>> export RC_FLAGS="-Wall -std=c++0x"
>> export RC_BUILDIT=1
>> ${SHELL} buildit
>
> Thanks Bjorn.
>
>>
>> Of course, that does not solve the dependency problem, but at least I
>> did not experience any problems with .dylib afterwards.
>
> On the dependency-checking issue: The build time is currently about
> a minute.  Imho this does not rise to the level of needing
> dependency checking to speed things up.  That being said, if someone
> wants to add dependency checking and it /does/ result in a speedup,
> I'd welcome it.  One requirement: The list of headers and sources
> must be implicit.

The attached gnumake file uses $(wildcard...) to avoid explicit
lists.  It also has target.o and target.dM.  Both require TARGET=xxx
where xxx is some base name of the .cpp file in the src directory.
The 1st just compiles $(TARGET).cpp, the second creates $(TARGET).dM
which contains all the #define's.  The second was useful to me to find
if there was some macro #defined for the unbuntu OS.

The equivalent to Howard's buildit can be achieved with:

  make -f libcxx.gmake --always-make

as described here:

  http://www.gnu.org/software/make/manual/make.html#Options-Summary

The dependencies are handled by:

  ifneq ($(INCDEPS),no)
    include $(OBJ.dir)/*.d
  endif

near the bottom of the file.  The $(OBJ.dir)/*.d files are produced
with the -MMD compiler option.  If you wish to ignore the
dependencies, pass INCDEPS=no to the makefile, like:

  make -f libcxx.gmake INCDEPS=no

HTH.

-Larry

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: libcxx.gmake
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110211/235a4757/attachment.ksh>


More information about the cfe-dev mailing list