# Usage:
# mklib [options] objects ...
# Options:
-# -o LIBRARY specifies the name of resulting library ("GL" for example)
+# -o LIBRARY specifies the name of resulting library
+# ("-o GL" for example, might result in "libGL.so" being made)
# -major N specifies major version number (default is 1)
# -minor N specifies minor version number (default is 0)
# -patch N specifies patch version number (default is 0)
#
case $ARCH in
- 'Linux')
+ 'Linux' | 'OpenBSD')
+ # GCC-based environment
LIBNAME="lib${LIBNAME}" # prefix with "lib"
if [ $STATIC = 1 ] ; then
- echo "mklib: Making Linux static library: " ${LIBNAME}.a
+ echo "mklib: Making" $ARCH "static library: " ${LIBNAME}.a
LINK="ar"
OPTS="-ruv"
# make lib
# finish up
FINAL_LIBS="${LIBNAME}.a"
else
- OPTS="-Xlinker -Bsymbolic -shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"
+ if [ $ARCH = 'Linux' ] ; then
+ OPTS="-Xlinker -Bsymbolic -shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"
+ else
+ OPTS="-shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"
+ fi
VERSION="${MAJOR}.${MINOR}.${PATCH}"
- echo "mklib: Making Linux shared library: " ${LIBNAME}.so.${VERSION}
+ echo "mklib: Making " $ARCH " shared library: " ${LIBNAME}.so.${VERSION}
if [ $CPLUSPLUS = 1 ] ; then
LINK="g++"
'SunOS')
LIBNAME="lib${LIBNAME}.so"
echo "mklib: Making SunOS shared library: " ${LIBNAME}
- OPTS="-G"
+ # XXX OPTS for gcc should be -shared, but that doesn't work.
+ # Using -G does work though.
if [ $CPLUSPLUS = 1 ] ; then
- # link for C++
+ # determine linker and options for C++ code
if [ "x${CXX}" = "xg++" ] ; then
+ # use g++
LINK="g++"
+ OPTS="-G"
elif [ "x${CXX}" = "xCC" ] ; then
+ # use Sun CC
LINK="CC"
+ OPTS="-G"
+ elif [ "x${CXX}" = "xc++" ] ; then
+ # use Sun c++
+ LINK="c++"
+ OPTS="-G"
elif [ `which c++` ] ; then
+ # use Sun c++
LINK="c++"
+ OPTS="-G"
elif [ `type g++` ] ; then
+ # use g++
LINK="g++"
+ OPTS="-G"
else
echo "mklib: warning: can't find C++ comiler, trying CC."
LINK="CC"
+ OPTS="-G"
fi
elif [ "x${CC}" = "xgcc" ] ; then
# use gcc for linking
LINK="gcc"
+ OPTS="-G"
else
# use native Sun linker
LINK="ld"
+ OPTS="-G"
fi
- echo "mklib: linker is " ${LINK}
- rm -f ${LIBNAME}
- ${LINK} ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
- FINAL_LIBS=${LIBNAME}
+ echo "mklib: linker is" ${LINK} ${OPTS}
+ rm -f ${LIBNAME}.${MAJOR} ${LIBNAME}
+ ${LINK} ${OPTS} -o ${LIBNAME}.${MAJOR} ${OBJECTS} ${DEPS}
+ ln -s ${LIBNAME}.${MAJOR} ${LIBNAME}
+ FINAL_LIBS="${LIBNAME}.${MAJOR} ${LIBNAME}"
;;
'FreeBSD')
FINAL_LIBS="${SHLIB} ${STLIB}"
;;
- 'OpenBSD')
- LIBNAME="lib${LIBNAME}"
- VERSION="${MAJOR}.${MINOR}"
- echo "Building OpenBSD PIC library: " ${LIBNAME}
- rm -f ${LIBNAME}_pic.a ${LIBNAME}.so.${VERSION}
- ar cq ${LIBNAME}_pic.a ${OBJECTS}
- ranlib ${LIBNAME}_pic.a
- ld -x -Bshareable -Bforcearchive -o ${LIBNAME}.so.${VERSION} ${LIBNAME}_pic.a
- ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so
- FINAL_LIBS="${LIBNAME}_pic.a ${LIBNAME}.so.${VERSION} ${LIBNAME}.so"
- ;;
-
'NetBSD')
LIBNAME="lib${LIBNAME}"
echo "mklib: Making NetBSD PIC shared library: " ${LIBNAME}
FINAL_LIBS="${LIBNAME}_pic.a ${LIBNAME}.so.${VERSION}"
;;
- 'IRIX')
+ 'IRIX' | 'IRIX64')
LIBNAME="lib${LIBNAME}.so" # prefix with "lib", suffix with ".so"
- if [ $ARCHOPTS = "64" ] ; then
+ if [ $ARCHOPT = "64" ] ; then
# 64-bit ABI
OPTS="-64 -shared -all"
echo "mklib: Making IRIX 64-bit shared library: " ${LIBNAME}
- elif [ $ARCHOPTS = "o32" ] ; then
+ elif [ $ARCHOPT = "o32" ] ; then
# old 32-bit ABI
OPTS="-32 -shared -all"
echo "mklib: Making IRIX o32-bit shared library: " ${LIBNAME}
OPTS="-n32 -shared -all"
echo "mklib: Making IRIX n32-bit shared library: " ${LIBNAME}
fi
- ld ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
- FINAL_LIBS="${LIBNAME}"
- ;;
-
- 'IRIX64')
- LIBNAME="lib${LIBNAME}.so" # prefix with "lib", suffix with ".so"
- echo "mklib: Making IRIX64 library: " ${LIBNAME}
- # 64-bit ABI
- OPTS="-64 -shared -all"
- ld ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
+ if [ $CPLUSPLUS = 1 ] ; then
+ LINK="CC"
+ else
+ LINK="ld"
+ fi
+ ${LINK} ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}
FINAL_LIBS="${LIBNAME}"
;;
FINAL_LIBS="${LIBNAME}"
;;
+ 'icc')
+ # Intel C compiler
+ LIBNAME="lib${LIBNAME}" # prefix with "lib"
+
+ if [ $STATIC = 1 ] ; then
+ echo "mklib: Making Intel ICC static library: " ${LIBNAME}.a
+ LINK="ar"
+ OPTS="-ruv"
+ # make lib
+ ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS}
+ # finish up
+ FINAL_LIBS="${LIBNAME}.a"
+ else
+ OPTS="-shared"
+ VERSION="${MAJOR}.${MINOR}.${PATCH}"
+
+ echo "mklib: Making Intel ICC shared library: " ${LIBNAME}.so.${VERSION}
+
+ if [ $CPLUSPLUS = 1 ] ; then
+ LINK="icc"
+ else
+ LINK="icc"
+ fi
+
+ # rm any old libs
+ rm -f ${LIBNAME}.so.${VERSION}
+ rm -f ${LIBNAME}.so.${MAJOR}
+ rm -f ${LIBNAME}.so
+
+ # make lib
+ ${LINK} ${OPTS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS}
+ # make usual symlinks
+ ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR}
+ ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so
+ # finish up
+ FINAL_LIBS="${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so"
+ fi
+ ;;
+
+ 'aix-gcc')
+ # AIX with gcc
+ LIBNAME="lib${LIBNAME}.so" # prefix with "lib", suffix with ".so"
+ echo "mklib: Making AIX GCC shared library: " ${LIBNAME}
+ # remove old lib
+ rm -f ${LIBNAME}
+ # make the lib
+ gcc -shared -Wl,-G ${OBJECTS} ${DEPS} -o ${LIBNAME}
+
+ # NOTE: the application linking with this library must specify
+ # the -Wl,-brtl flags to gcc
+
+ FINAL_LIBS=${LIBNAME}
+ ;;
+
'example')
# If you're adding support for a new architecture, you can
# start with this:
echo "mklib: WARNING: please update the bin/mklib script!"
# XXX this is a total hack for Mesa - remove someday
# fall-back to an old mklib.* script
- ${MAKELIB} "lib${LIBNAME}.a" ${MAJOR} ${MINOR} ${PATCH} ${OBJECTS}
+ LIBNAME="lib${LIBNAME}.a"
+ ${TOP}/${MAKELIB} "lib${LIBNAME}.a" ${MAJOR} ${MINOR} ${PATCH} ${OBJECTS}
FINAL_LIBS="${LIBNAME}"
;;
esac