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

Daniel Dunbar daniel at zuster.org
Tue Sep 11 15:42:45 PDT 2012


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).

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.

 - 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



More information about the llvm-commits mailing list