I'm toying with building with -mdynamic-no-pic, but for this to work, the shared library bits in llvm can't be built with that flag. I've found that: Index: Makefile.rules ==================================================================--- Makefile.rules (revision 71041) +++ Makefile.rules (working copy) @@ -472,6 +476,9 @@ ifneq ($(DARWIN_MAJVERS),4) LD.Flags += $(RPATH) -Wl,$(LibDir) endif + ifeq ($(OS),Darwin) + EXTRA_OPTIONS := $(filter-out -mdynamic-no-pic,$(EXTRA_OPTIONS)) + endif endif ifdef TOOL_VERBOSE can be used to strip the option out in the places it won't work. This mirrors the style used in other parts of the file. If the experiment goes well, I'd like to check this in, if no objections. If someone wants to approve it (pending testing), let me know...
On May 7, 2009, at 6:24 PM, Mike Stump wrote:> I'm toying with building with -mdynamic-no-pic, but for this to work, > the shared library bits in llvm can't be built with that flag.Hi Mike, If you're doing this for Clang's benefit, I think the best thing to do is to compile LLVM PIC (the default) and then build the clang front- end pieces with -mdynamic-no-pic. Does this work for you? -Chris> > > I've found that: > > Index: Makefile.rules > ==================================================================> --- Makefile.rules (revision 71041) > +++ Makefile.rules (working copy) > @@ -472,6 +476,9 @@ > ifneq ($(DARWIN_MAJVERS),4) > LD.Flags += $(RPATH) -Wl,$(LibDir) > endif > + ifeq ($(OS),Darwin) > + EXTRA_OPTIONS := $(filter-out -mdynamic-no-pic,$(EXTRA_OPTIONS)) > + endif > endif > > ifdef TOOL_VERBOSE > > > can be used to strip the option out in the places it won't work. This > mirrors the style used in other parts of the file. If the experiment > goes well, I'd like to check this in, if no objections. If someone > wants to approve it (pending testing), let me know... > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On May 8, 2009, at 11:49 AM, Chris Lattner wrote:> On May 7, 2009, at 6:24 PM, Mike Stump wrote: >> I'm toying with building with -mdynamic-no-pic, but for this to work, >> the shared library bits in llvm can't be built with that flag. > > Hi Mike, > > If you're doing this for Clang's benefit,No, not really, I'm doing it for the general benefit of llvm and all that use Makefile.rules.> I think the best thing to do > is to compile LLVM PIC (the default) and then build the clang front- > end pieces with -mdynamic-no-pic. Does this work for you?The proposed patch is more general that that. It avoids the flag, when it is known it can't work, and leaves it in otherwise. This allows the configurer of llvm to make the choice. Longer term, I'd like to have the build system default to this, as appropriate. This patch is merely a bridge until that patch is in. If you'd prefer that patch instead, I could just do that one up. My only reservation is that a change like that precedes the testing I'd rather have on it before I did the flip. The other patch would look something like this: Index: Makefile.rules ==================================================================--- Makefile.rules (revision 71041) +++ Makefile.rules (working copy) @@ -245,6 +245,13 @@ OmitFramePointer := -fomit-frame-pointer endif endif + ifndef LOADABLE_MODULE + ifndef SHARED_LIBRARY + ifeq ($(OS),Darwin) + DynamicNoPic := -mdynamic-no-pic + endif + endif + endif # Darwin requires -fstrict-aliasing to be explicitly enabled. # Avoid -fstrict-aliasing on Darwin for now, there are unresolved issues @@ -252,8 +259,8 @@ #ifeq ($(OS),Darwin) # EXTRA_OPTIONS += -fstrict-aliasing -Wstrict-aliasing #endif - CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) - C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) + CXX.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) $(DynamicNoPic) + C.Flags += $(OPTIMIZE_OPTION) $(OmitFramePointer) $(DynamicNoPic) LD.Flags += $(OPTIMIZE_OPTION) else BuildMode := Debug Thoughts?