From 3cf6e62ae32870d16b2cfc45a37e54a6fb3a1fbe Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 23 Mar 2009 16:51:54 -0700 Subject: mklib improvements for Solaris Move flags for linking standard C/C++ libraries from configure.ac to mklib Use -norunpath flag when linking with Sun C++ compiler Convert mklib -exports list into a linker mapfile Set FINAL_LIBS correctly when -noprefix is used Signed-off-by: Alan Coopersmith --- bin/mklib | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'bin/mklib') diff --git a/bin/mklib b/bin/mklib index d7b740f8e3..a3e826abac 100755 --- a/bin/mklib +++ b/bin/mklib @@ -394,6 +394,30 @@ case $ARCH in fi fi + # If using Sun C++ compiler, need to tell it not to add runpaths + # that are specific to the build machine + if [ ${LINK} = "CC" ] ; then + OPTS="${OPTS} -norunpath" + fi + + # Solaris linker requires explicitly listing the Standard C & C++ + # libraries in the link path when building shared objects + if [ ${LINK} = "CC" ] ; then + DEPS="${DEPS} -lCrun" + fi + DEPS="${DEPS} -lc" + + if [ $EXPORTS ] ; then + # Make the 'mapfile.scope' linker mapfile + echo "{" > mapfile.scope + echo "global:" >> mapfile.scope + sed 's/$/;/' ${EXPORTS} >> mapfile.scope + echo "local:" >> mapfile.scope + echo " *;" >> mapfile.scope + echo "};" >> mapfile.scope + OPTS="${OPTS} -Wl,-Mmapfile.scope" + fi + # Check if objects are SPARC v9 # file says: ELF 64-bit MSB relocatable SPARCV9 Version 1 set ${OBJECTS} @@ -406,17 +430,19 @@ case $ARCH in if [ "${ALTOPTS}" ] ; then OPTS=${ALTOPTS} fi + # for debug: #echo "mklib: linker is" ${LINK} ${OPTS} if [ $NOPREFIX = 1 ] ; then rm -f ${LIBNAME} ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} + FINAL_LIBS="${LIBNAME}" else rm -f ${LIBNAME}.${MAJOR} ${LIBNAME} ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME}.${MAJOR} -h ${LIBNAME}.${MAJOR} ${OBJECTS} ${DEPS} ln -s ${LIBNAME}.${MAJOR} ${LIBNAME} + FINAL_LIBS="${LIBNAME}.${MAJOR} ${LIBNAME}" fi - FINAL_LIBS="${LIBNAME}.${MAJOR} ${LIBNAME}" fi ;; -- cgit v1.2.3 From 9cb3cdec76b679f15c591955084bd48e91a32142 Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Thu, 30 Apr 2009 16:52:56 -0600 Subject: mesa: Prepend "-Wl," to linking options Let mklib ignore -Wl options inside the object list when building static libraries --- bin/mklib | 17 +++++++++++++++++ src/gallium/winsys/egl_xlib/Makefile | 2 +- src/gallium/winsys/xlib/Makefile | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'bin/mklib') diff --git a/bin/mklib b/bin/mklib index a3e826abac..db3bc8325f 100755 --- a/bin/mklib +++ b/bin/mklib @@ -176,6 +176,23 @@ if [ ${ARCH} = "auto" ] ; then fi +if [ $STATIC = 1 ]; then + # filter out linker options inside object list + NEWOBJECTS="" + for OBJ in $OBJECTS ; do + case $OBJ in + -Wl,*) + echo "mklib: warning: ignoring $OBJ for static library" + ;; + *) + NEWOBJECTS="$NEWOBJECTS $OBJ" + ;; + esac + done + OBJECTS=$NEWOBJECTS +fi + + # # Error checking # diff --git a/src/gallium/winsys/egl_xlib/Makefile b/src/gallium/winsys/egl_xlib/Makefile index 02ac47caa4..8646ee3b52 100644 --- a/src/gallium/winsys/egl_xlib/Makefile +++ b/src/gallium/winsys/egl_xlib/Makefile @@ -60,7 +60,7 @@ $(TOP)/$(LIB_DIR)/$(DRIVER_NAME): $(WINSYS_OBJECTS) $(LIBS) -noprefix \ -install $(TOP)/$(LIB_DIR) \ $(MKLIB_OPTIONS) $(WINSYS_OBJECTS) \ - --whole-archive $(LIBS) --no-whole-archive + -Wl,--whole-archive $(LIBS) -Wl,--no-whole-archive depend: $(ALL_SOURCES) diff --git a/src/gallium/winsys/xlib/Makefile b/src/gallium/winsys/xlib/Makefile index bb187cc14a..04309e67ee 100644 --- a/src/gallium/winsys/xlib/Makefile +++ b/src/gallium/winsys/xlib/Makefile @@ -74,7 +74,7 @@ $(TOP)/$(LIB_DIR)/gallium/$(GL_LIB_NAME): $(XLIB_WINSYS_OBJECTS) $(LIBS) Makefil -major $(GL_MAJOR) -minor $(GL_MINOR) -patch $(GL_TINY) \ -install $(TOP)/$(LIB_DIR)/gallium \ $(MKLIB_OPTIONS) $(XLIB_WINSYS_OBJECTS) \ - --start-group $(LIBS) --end-group $(GL_LIB_DEPS) + -Wl,--start-group $(LIBS) -Wl,--end-group $(GL_LIB_DEPS) depend: $(XLIB_WINSYS_SOURCES) -- cgit v1.2.3 From eef79d50bf160a0278266cac56a915027538ac1e Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Thu, 30 Apr 2009 16:55:54 -0600 Subject: mklib: replace if/expr with case Saves forking an expr for every object. --- bin/mklib | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'bin/mklib') diff --git a/bin/mklib b/bin/mklib index db3bc8325f..2fd95ba775 100755 --- a/bin/mklib +++ b/bin/mklib @@ -281,18 +281,21 @@ case $ARCH in # expand any .a objects into constituent .o files. NEWOBJECTS="" DELETIA="" - for OBJ in ${OBJECTS} ; do - if [ `expr match $OBJ '.*\.a'` -gt 0 ] ; then - # extract the .o files from this .a archive - FILES=`ar t $OBJ` - ar x $OBJ - NEWOBJECTS="$NEWOBJECTS $FILES" - # keep track of temporary .o files and delete them below - DELETIA="$DELETIA $FILES" - else - # ordinary .o file - NEWOBJECTS="$NEWOBJECTS $OBJ" - fi + for OBJ in $OBJECTS ; do + case $OBJ in + *.a) + # extract the .o files from this .a archive + FILES=`ar t $OBJ` + ar x $OBJ + NEWOBJECTS="$NEWOBJECTS $FILES" + # keep track of temporary .o files and delete them below + DELETIA="$DELETIA $FILES" + ;; + *) + # ordinary .o file + NEWOBJECTS="$NEWOBJECTS $OBJ" + ;; + esac done # make lib -- cgit v1.2.3 From 7eed6ab5b525b75f690d05042c90d05827253114 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 8 Jun 2009 16:02:18 +0100 Subject: Cygwin build fixes Fix mklib to deal with NOPREFIX and use --enable-auto-image-base for cygwin Teach configure.ac some basic facts about cygwin Signed-off-by: Jon TURNEY --- bin/mklib | 19 ++++++++++++++++--- configure.ac | 5 +++++ 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'bin/mklib') diff --git a/bin/mklib b/bin/mklib index 2fd95ba775..2444945006 100755 --- a/bin/mklib +++ b/bin/mklib @@ -885,6 +885,17 @@ case $ARCH in CYGWIN*) # GCC-based environment + if [ $NOPREFIX = 1 ] ; then + # No "lib" or ".so" part + echo "mklib: Making CYGWIN shared library: " ${LIBNAME} + OPTS="-shared -Wl,--enable-auto-image-base" + if [ "${ALTOPTS}" ] ; then + OPTS=${ALTOPTS} + fi + rm -f ${LIBNAME} + ${LINK} ${OPTS} ${LDFLAGS} -o ${LIBNAME} ${OBJECTS} ${DEPS} + FINAL_LIBS=${LIBNAME} + else CYGNAME="cyg${LIBNAME}" # prefix with "cyg" LIBNAME="lib${LIBNAME}" # prefix with "lib" @@ -901,11 +912,11 @@ case $ARCH in # finish up FINAL_LIBS=${LIBNAME}.a else - OPTS="-shared -Wl,-export-all -Wl,--out-implib=${LIBNAME}-${MAJOR}.dll.a" + OPTS="-shared -Wl,--enable-auto-image-base -Wl,-export-all -Wl,--out-implib=${LIBNAME}-${MAJOR}.dll.a" if [ "${ALTOPTS}" ] ; then OPTS=${ALTOPTS} fi - echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}-${MAJOR}.dll + echo "mklib: Making" $ARCH "shared library: " ${CYGNAME}-${MAJOR}.dll if [ $CPLUSPLUS = 1 ] ; then LINK="g++" @@ -914,7 +925,8 @@ case $ARCH in fi # rm any old libs - rm -f ${LIBNAME}-${MAJOR}.dll + rm -f ${CYGNAME}-${MAJOR}.dll + rm -f ${LIBNAME}-${MAJOR}.dll.a rm -f ${LIBNAME}.dll.a rm -f ${LIBNAME}.a @@ -927,6 +939,7 @@ case $ARCH in # special case for installing in bin FINAL_BINS="${CYGNAME}-${MAJOR}.dll" fi + fi ;; 'example') diff --git a/configure.ac b/configure.ac index 48b8022736..2a9ac1ed9c 100644 --- a/configure.ac +++ b/configure.ac @@ -222,6 +222,8 @@ else case "$host_os" in darwin* ) LIB_EXTENSION='dylib' ;; + cygwin* ) + LIB_EXTENSION='dll' ;; * ) LIB_EXTENSION='so' ;; esac @@ -1073,6 +1075,9 @@ if test "x$APP_LIB_DEPS" = x; then solaris*) APP_LIB_DEPS="-lX11 -lsocket -lnsl -lm" ;; + cygwin*) + APP_LIB_DEPS="-lX11" + ;; *) APP_LIB_DEPS="-lm" ;; -- cgit v1.2.3 From 23671e5358ffc0abfec83aeea9a515b09a6b35f3 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 3 Aug 2009 08:35:43 -0700 Subject: mklib: Ensure target directory exists for library Instead of relying on the Makefile to always generate $(TOP)/$(LIB_DIR), just have mklib handle creating the directory. This should fix any races when using parallel make. Signed-off-by: Dan Nicholson --- bin/mklib | 1 + 1 file changed, 1 insertion(+) (limited to 'bin/mklib') diff --git a/bin/mklib b/bin/mklib index 2444945006..db97087c0a 100755 --- a/bin/mklib +++ b/bin/mklib @@ -971,5 +971,6 @@ esac # if [ ${INSTALLDIR} != "." ] ; then echo "mklib: Installing" ${FINAL_LIBS} "in" ${INSTALLDIR} + test -d ${INSTALLDIR} || mkdir -p ${INSTALLDIR} mv ${FINAL_LIBS} ${INSTALLDIR}/ fi -- cgit v1.2.3