[Xen-devel] 01: pic-lib.patch

Adam Heath
Fri, 21 Jan 2005 17:39:14 -0000

==Name: pic-lib.patch
Description: support PIC code generation
 Libraries have 2 methods of being compiled; a .so must contain non-pic
 objects, while the .a can contain standard objects.
DiffStat:
 tools/libxc/Makefile    |   34 +++++++++++++++++++++-------------
 tools/libxutil/Makefile |   11 ++++++++---
 2 files changed, 29 insertions(+), 16 deletions(-)

==Description: support PIC code generation
 Libraries have 2 methods of being compiled; a .so must contain non-pic
 objects, while the .a can contain standard objects.

--- xen-2.0.3.orig/tools/libxutil/Makefile
+++ xen-2.0.3/tools/libxutil/Makefile
@@ -19,6 +23,7 @@
 LIB_SRCS += util.c

 LIB_OBJS := $(LIB_SRCS:.c=.o)
+LIB_PIC_OBJS := $(LIB_SRCS:.c=.opic)

 CFLAGS   += -Wall
 CFLAGS   += -Werror
@@ -33,6 +38,7 @@
 MAJOR    := 2.0
 MINOR    := 0
 LIB_NAME := libxutil
+SO_NAME  := $(LIB_NAME).so.$(MAJOR)
 LIB      := $(LIB_NAME).so
 LIB      += $(LIB_NAME).so.$(MAJOR)
 LIB      += $(LIB_NAME).so.$(MAJOR).$(MINOR)
@@ -41,14 +47,17 @@
 all: check-for-zlib
 	$(MAKE) $(LIB)

+$(LIB_PIC_OBJS): %.opic: %.c
+	$(CC) $(CPPFLAGS) -DPIC $(CFLAGS) -fPIC -c -o $@ $<
+
 $(LIB_NAME).so: $(LIB_NAME).so.$(MAJOR)
 	ln -sf $^ $@

 $(LIB_NAME).so.$(MAJOR): $(LIB_NAME).so.$(MAJOR).$(MINOR)
 	ln -sf $^ $@

-$(LIB_NAME).so.$(MAJOR).$(MINOR): $(LIB_OBJS)
-	$(CC) -Wl,-soname -Wl,$(LIB_NAME).so.$(MAJOR) -shared -o $@ $^
+$(LIB_NAME).so.$(MAJOR).$(MINOR): $(LIB_PIC_OBJS)
+	$(CC) -Wl,-soname -Wl,$(SO_NAME) -shared -o $@ $^

 $(LIB_NAME).a: $(LIB_OBJS)
 	$(AR) rc $@ $^
@@ -68,7 +77,7 @@
 	ln -sf $(LIB_NAME).so.$(MAJOR) $(prefix)/usr/lib/$(LIB_NAME).so

 clean:
-	$(RM) *.a *.so *.so.* *.o *.rpm
+	$(RM) *.a *.so *.so.* *.o *.opic *.rpm
 	$(RM) *~
 	$(RM) $(DEPS)

--- xen-2.0.3.orig/tools/libxc/Makefile
+++ xen-2.0.3/tools/libxc/Makefile
@@ -1,7 +1,8 @@

-MAJOR    = 2.0
-MINOR    = 0
-SONAME   = libxc.so.$(MAJOR)
+MAJOR		:= 2.0
+MINOR		:= 0
+LIB_NAME	:= libxc
+SONAME		:= $(LIB_NAME).so.$(MAJOR)

 CC       = gcc

@@ -35,9 +40,10 @@
 CFLAGS   += -Wp,-MD,.$(@F).d
 DEPS     = .*.d

-OBJS     = $(patsubst %.c,%.o,$(SRCS))
+OBJS     := $(patsubst %.c,%.o,$(SRCS))
+PIC_OBJS := $(patsubst %.c,%.opic,$(SRCS))

-LIB      = libxc.so libxc.so.$(MAJOR) libxc.so.$(MAJOR).$(MINOR)
+LIB		:= $(LIB_NAME).a $(LIB_NAME).so $(LIB_NAME).so.$(MAJOR)
$(LIB_NAME).so.$(MAJOR).$(MINOR)

 all: check-for-zlib mk-symlinks
 	$(MAKE) $(LIB)
@@ -65,12 +72,12 @@
 	mkdir -p $(prefix)/usr/lib
 	mkdir -p $(prefix)/usr/include
 	install -m0755 $(LIB) $(prefix)/usr/lib
-	ln -sf libxc.so.$(MAJOR).$(MINOR) $(prefix)/usr/lib/libxc.so.$(MAJOR)
-	ln -sf libxc.so.$(MAJOR) $(prefix)/usr/lib/libxc.so
+	ln -sf $(LIB_NAME).so.$(MAJOR).$(MINOR)
$(prefix)/usr/lib/$(LIB_NAME).so.$(MAJOR)
+	ln -sf $(LIB_NAME).so.$(MAJOR) $(prefix)/usr/lib/$(LIB_NAME).so
 	install -m0644 xc.h $(prefix)/usr/include

 clean:
-	rm -rf *.a *.so *.o *.rpm $(LIB) *~ $(DEPS) xen
+	rm -rf *.a *.so *.o *.opic *.rpm $(LIB) *~ $(DEPS) xen

 rpm: all
 	rm -rf staging
@@ -81,11 +87,17 @@
 	mv staging/i386/*.rpm .
 	rm -rf staging

-libxc.so:
-	ln -sf libxc.so.$(MAJOR) $@
-libxc.so.$(MAJOR):
-	ln -sf libxc.so.$(MAJOR).$(MINOR) $@
-libxc.so.$(MAJOR).$(MINOR): $(OBJS)
+$(PIC_OBJS): %.opic: %.c
+	$(CC) $(CPPFLAGS) -DPIC $(CFLAGS) -fPIC -c -o $@ $<
+
+$(LIB_NAME).a: $(OBJS)
+	$(AR) rc $@ $^
+
+$(LIB_NAME).so: $(LIB_NAME).so.$(MAJOR)
+	ln -sf $< $@
+$(LIB_NAME).so.$(MAJOR): $(LIB_NAME).so.$(MAJOR).$(MINOR)
+	ln -sf $< $@
+$(LIB_NAME).so.$(MAJOR).$(MINOR): $(PIC_OBJS)
 	$(CC) -Wl,-soname -Wl,$(SONAME) -shared -o $@ $^ -L../libxutil -lxutil -lz

 -include $(DEPS)
==


-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.sourceforge.net