[llvm-commits] [compiler-rt] r163412 - in /compiler-rt/trunk: Makefile make/lib_info.mk make/options.mk

Daniel Dunbar daniel at zuster.org
Wed Sep 12 15:22:46 PDT 2012


On Wed, Sep 12, 2012 at 2:21 AM, Alexander Potapenko <glider at google.com> wrote:
> On Wed, Sep 12, 2012 at 2:42 AM, Daniel Dunbar <daniel at zuster.org> wrote:
>> On Tue, Sep 11, 2012 at 3:07 PM, Daniel Dunbar <daniel at zuster.org> wrote:
>>> On Mon, Sep 10, 2012 at 2:31 AM, Alexander Potapenko <glider at google.com> wrote:
>>>> BTW is libcompiler_rt.dylib intentionally placed under
>>>> llvm-build/tools/clang/... instead of llvm-build/lib/clang/... (the
>>>> place where libcompiler_rt.a resides)?
>>>
>>> The way the build works is the compiler-rt build is separate and then
>>> part of the Clang build handles copying the libraries over. I hadn't
>>> written the second part because I wasn't clear to me that you wanted
>>> it installed with Clang, but I guess the answer is yes? I'll add the
>>> Clang Makefile side if so.
>>
>> I realized I should elaborate on this more:
>>
>> Usually installing dynamic libraries with the compiler is "wrong". The
>> static runtime libraries make sense to be distributed with the
>> compiler, because they depend intimately on the same version of the
>> compiler and its code generation strategy, and the code is statically
>> linked in.
>>
>> Dynamic shared libraries, however, really need to be distributed by
>> the platform/OS not the compiler if you want applications that require
>> them to be distributable. And using dynamic shared libraries adds all
>> the versioning/API stability issues that we kind of relegate to the
>> package maintainer to understand/handle (e.g., Darwin has ended up
>> with things like /usr/bin/libgcc_s.10.5.dylib).
>
> Thank you for clarifying this!
>
>> Of course, for ASAN I presume that the target market for the time
>> being is that users are also building the software, so maybe this does
>> make sense.
> You're right. If someone (like Chromium developers) packages his own
> Clang, he'll need the ASan dylib as well as the static libraries,
> because it isn't provided by the system.
> I didn't realize this is kind of a special case.

I attached the patch that updates Clang to bring in the dylib as part
of its runtime libraries, in case you want it. Do you think we should
go ahead and do this, or do you want to think more about what we
should (e.g., should we distribute the dylib separately in a package
that would drop it into /usr/lib)?

 - Daniel

>>
>>  - Daniel
>>
>>>
>>>  - Daniel
>>>
>>>>
>>>> On Sun, Sep 9, 2012 at 11:28 AM, Alexey Samsonov <samsonov at google.com> wrote:
>>>>>
>>>>>
>>>>> On Fri, Sep 7, 2012 at 11:57 PM, Daniel Dunbar <daniel at zuster.org> wrote:
>>>>>>
>>>>>> Author: ddunbar
>>>>>> Date: Fri Sep  7 14:57:23 2012
>>>>>> New Revision: 163412
>>>>>>
>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=163412&view=rev
>>>>>> Log:
>>>>>> build: Add support for building dylibs.
>>>>>>
>>>>>> Modified:
>>>>>>     compiler-rt/trunk/Makefile
>>>>>>     compiler-rt/trunk/make/lib_info.mk
>>>>>>     compiler-rt/trunk/make/options.mk
>>>>>>
>>>>>> Modified: compiler-rt/trunk/Makefile
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/Makefile?rev=163412&r1=163411&r2=163412&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/Makefile (original)
>>>>>> +++ compiler-rt/trunk/Makefile Fri Sep  7 14:57:23 2012
>>>>>> @@ -117,7 +117,7 @@
>>>>>>  $(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name))
>>>>>>
>>>>>>  # Top-Level Platform Target
>>>>>> -$(Tmp.Name):: $(Tmp.Configs:%=$(Tmp.ObjPath)/%/libcompiler_rt.a)
>>>>>> +$(Tmp.Name):: $(Tmp.Configs:%=$(Tmp.Name)-%)
>>>>>>  .PHONY: $(Tmp.Name)
>>>>>>
>>>>>>  clean::
>>>>>> @@ -131,6 +131,13 @@
>>>>>>  define PerPlatformConfig_template
>>>>>>  $(call Set,Tmp.Config,$(1))
>>>>>>  $(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config))
>>>>>> +$(call Set,Tmp.SHARED_LIBRARY,$(strip \
>>>>>> +  $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>> +
>>>>>> +# Compute the library suffix.
>>>>>> +$(if $(call streq,1,$(Tmp.SHARED_LIBRARY)),
>>>>>> +  $(call Set,Tmp.LibrarySuffix,dylib),
>>>>>> +  $(call Set,Tmp.LibrarySuffix,a))
>>>>>>
>>>>>>  # Compute the archs to build, depending on whether this is a universal
>>>>>> build or
>>>>>>  # not.
>>>>>> @@ -142,8 +149,8 @@
>>>>>>         $(call
>>>>>> VarOrDefault,$(Tmp.Key).Arch.$(Tmp.Config),$($(Tmp.Key).Arch))))
>>>>>>
>>>>>>  # Copy or lipo to create the per-config library.
>>>>>> -$(call
>>>>>> Set,Tmp.Inputs,$(Tmp.ArchsToBuild:%=$(Tmp.ObjPath)/%/libcompiler_rt.a))
>>>>>> -$(Tmp.ObjPath)/libcompiler_rt.a: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
>>>>>> +$(call
>>>>>> Set,Tmp.Inputs,$(Tmp.ArchsToBuild:%=$(Tmp.ObjPath)/%/libcompiler_rt.$(Tmp.LibrarySuffix)))
>>>>>> +$(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix): $(Tmp.Inputs)
>>>>>> $(Tmp.ObjPath)/.dir
>>>>>>         $(Summary) "  FINAL-ARCHIVE: $(Tmp.Name)/$(Tmp.Config): $$@"
>>>>>>         -$(Verb) $(RM) $$@
>>>>>>         $(if $(call streq,1,$(words $(Tmp.ArchsToBuild))), \
>>>>>> @@ -152,7 +159,7 @@
>>>>>>  .PRECIOUS: $(Tmp.ObjPath)/.dir
>>>>>>
>>>>>>  # Per-Config Targets
>>>>>> -$(Tmp.Name)-$(Tmp.Config):: $(Tmp.ObjPath)/libcompiler_rt.a
>>>>>> +$(Tmp.Name)-$(Tmp.Config)::
>>>>>> $(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix)
>>>>>>  .PHONY: $(Tmp.Name)-$(Tmp.Config)
>>>>>>
>>>>>>  # Per-Config-Arch Libraries
>>>>>> @@ -172,10 +179,21 @@
>>>>>>    $(call GetCNAVar,AR,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>>  $(call Set,Tmp.ARFLAGS,$(strip \
>>>>>>    $(call GetCNAVar,ARFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>> +$(call Set,Tmp.CC,$(strip \
>>>>>> +  $(call GetCNAVar,CC,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>> +$(call Set,Tmp.LDFLAGS,$(strip \
>>>>>> +  $(call GetCNAVar,LDFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>>  $(call Set,Tmp.RANLIB,$(strip \
>>>>>>    $(call GetCNAVar,RANLIB,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>>  $(call Set,Tmp.RANLIBFLAGS,$(strip \
>>>>>>    $(call GetCNAVar,RANLIBFLAGS,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>> +$(call Set,Tmp.SHARED_LIBRARY,$(strip \
>>>>>> +  $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch))))
>>>>>> +
>>>>>> +# Compute the library suffix.
>>>>>> +$(if $(call streq,1,$(Tmp.SHARED_LIBRARY)),
>>>>>> +  $(call Set,Tmp.LibrarySuffix,dylib),
>>>>>> +  $(call Set,Tmp.LibrarySuffix,a))
>>>>>>
>>>>>>  # Compute the object inputs for this library.
>>>>>>  $(call Set,Tmp.Inputs,\
>>>>>> @@ -188,10 +206,14 @@
>>>>>>         -$(Verb) $(RM) $$@
>>>>>>         $(Verb) $(Tmp.AR) $(Tmp.ARFLAGS) $$@ $(Tmp.Inputs)
>>>>>>         $(Verb) $(Tmp.RANLIB) $(Tmp.RANLIBFLAGS) $$@
>>>>>> +$(Tmp.ObjPath)/libcompiler_rt.dylib: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir
>>>>>> +       $(Summary) "  DYLIB:   $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@"
>>>>>> +       $(Verb) $(Tmp.CC) -arch $(Tmp.Arch) -dynamiclib -o $$@ \
>>>>>> +         $(Tmp.Inputs) $(Tmp.LDFLAGS)
>>>>>>  .PRECIOUS: $(Tmp.ObjPath)/.dir
>>>>>>
>>>>>>  # Per-Config-Arch Targets
>>>>>> -$(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch):: $(Tmp.ObjPath)/libcompiler_rt.a
>>>>>> +$(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch)::
>>>>>> $(Tmp.ObjPath)/libcompiler_rt.$(Tmp.LibrarySuffix)
>>>>>>  .PHONY: $(Tmp.Name)-$(Tmp.Config)-$(Tmp.Arch)
>>>>>>
>>>>>>  # Per-Config-Arch-SubDir Objects
>>>>>>
>>>>>> Modified: compiler-rt/trunk/make/lib_info.mk
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/make/lib_info.mk?rev=163412&r1=163411&r2=163412&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/make/lib_info.mk (original)
>>>>>> +++ compiler-rt/trunk/make/lib_info.mk Fri Sep  7 14:57:23 2012
>>>>>> @@ -53,8 +53,7 @@
>>>>>>
>>>>>>  # The names of all the available options.
>>>>>>  AvailableOptions := AR ARFLAGS \
>>>>>> -                    CC CFLAGS FUNCTIONS OPTIMIZED \
>>>>>> +                    CC CFLAGS LDFLAGS FUNCTIONS OPTIMIZED \
>>>>>>                      RANLIB RANLIBFLAGS \
>>>>>> -                    VISIBILITY_HIDDEN \
>>>>>> -                    KERNEL_USE \
>>>>>> -                    STRIP LIPO
>>>>>> +                    VISIBILITY_HIDDEN KERNEL_USE \
>>>>>> +                   SHARED_LIBRARY STRIP LIPO
>>>>>>
>>>>>> Modified: compiler-rt/trunk/make/options.mk
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/make/options.mk?rev=163412&r1=163411&r2=163412&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> --- compiler-rt/trunk/make/options.mk (original)
>>>>>> +++ compiler-rt/trunk/make/options.mk Fri Sep  7 14:57:23 2012
>>>>>> @@ -23,11 +23,20 @@
>>>>>>  # default.
>>>>>>  VISIBILITY_HIDDEN := 0
>>>>>>
>>>>>> +# Whether the library is being built for kernel use.
>>>>>> +KERNEL_USE := 0
>>>>>> +
>>>>>> +# Whether the library should be built as a shared object.
>>>>>> +SHARED_LIBRARY := 0
>>>>>> +
>>>>>>  # Miscellaneous tools.
>>>>>>
>>>>>>  AR := ar
>>>>>>  # FIXME: Remove these pipes once ranlib errors are fixed.
>>>>>>  ARFLAGS := cru 2> /dev/null
>>>>>> +
>>>>>> +LDFLAGS :=
>>>>>> +
>>>>>>  RANLIB := ranlib
>>>>>>  # FIXME: Remove these pipes once ranlib errors are fixed.
>>>>>>  RANLIBFLAGS := 2> /dev/null
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> llvm-commits mailing list
>>>>>> llvm-commits at cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>>
>>>>>
>>>>>
>>>>> We get the following build error on our Mac 10.6 bot:
>>>>> <...>
>>>>>
>>>>> DYLIB:   clang_darwin/asan_osx_dynamic/i386:
>>>>> /Users/buildbot/src/llvm-buildbot/slave/mac10.6/build/llvm-build/tools/clang/runtime/compiler-rt/clang_darwin/asan_osx_dynamic/i386/libcompiler_rt.dylib
>>>>>   DYLIB:   clang_darwin/asan_osx_dynamic/x86_64:
>>>>> /Users/buildbot/src/llvm-buildbot/slave/mac10.6/build/llvm-build/tools/clang/runtime/compiler-rt/clang_darwin/asan_osx_dynamic/x86_64/libcompiler_rt.dylib
>>>>> ld: library not found for -lc++
>>>>> clang: error: linker command failed with exit code 1 (use -v to see
>>>>> invocation)
>>>>>
>>>>> --
>>>>> Alexey Samsonov, MSK
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Alexander Potapenko
>>>> Software Engineer
>>>> Google Moscow
>
>
>
> --
> Alexander Potapenko
> Software Engineer
> Google Moscow
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-compiler-rt-darwin-Install-asan_osx_dynamic-with-the.patch
Type: application/octet-stream
Size: 3309 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120912/3c3b245a/attachment.obj>


More information about the llvm-commits mailing list