144 lines
4 KiB
Bash
Executable file
144 lines
4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# Only LP64, LLP64 and ILP32 memory models are supported
|
|
echo
|
|
echo "removing old objects and setting correct permissions ..."
|
|
make clean > /dev/null
|
|
cp makefile_original_install makefile_install
|
|
echo "discovering platform and default memory model ..."
|
|
echo
|
|
|
|
case `uname` in
|
|
Darwin) true ${os_type:=MAC_OSX} ;;
|
|
Linux) true ${os_type:=LINUX} ;;
|
|
FreeBSD) true ${os_type:=_BSD} ;;
|
|
NetBSD) true ${os_type:=_BSD} ;;
|
|
OpenBSD) true ${os_type:=_BSD} ;;
|
|
SunOS) true ${os_type:=SUNOS} ;;
|
|
AIX) true ${os_type:=AIX} ;;
|
|
OSF1) true ${os_type:=TRU64} ;;
|
|
MINGW32_*) true ${os_type:=WINDOWS} ;;
|
|
MINGW64_*) true ${os_type:=WINDOWS} ;;
|
|
CYGWIN*) true ${os_type:=CYGWIN} ;;
|
|
OS/2) true ${os_type:=OS2} ;;
|
|
*)
|
|
echo Could not discover your OS platform use one of the following commands:
|
|
make help
|
|
;;
|
|
esac
|
|
|
|
cat > test-memorymodel.c <<EOF
|
|
/* test-memorymodel.c Ted Walther <ted@reactor-core.org>
|
|
*
|
|
* return a string with the type of memory model the current compiler is using.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
int
|
|
main(int argc, char** argv) {
|
|
short sc = sizeof(char) * 8;
|
|
short ss = sizeof(short) * 8;
|
|
short si = sizeof(int) * 8;
|
|
short sl = sizeof(long) * 8;
|
|
short sp = sizeof(void*) * 8;
|
|
|
|
if (si == 32 && sl == 64 && sp == 64) { printf("LP64\n"); return 0; }
|
|
if (si == 64 && sl == 64 && sp == 64) { printf("ILP64\n"); return 0; }
|
|
if (si == 32 && sl == 32 && sp == 64) { printf("LLP64\n"); return 0; }
|
|
if (si == 32 && sl == 32 && sp == 32) { printf("ILP32\n"); return 0; }
|
|
if (si == 16 && sl == 32 && sp == 32) { printf("LP32\n"); return 0; }
|
|
printf("UNKNOWN\n"); return 1;
|
|
}
|
|
EOF
|
|
|
|
if [ `which gcc` ] ; then
|
|
gcc test-memorymodel.c -o test-memorymodel >/dev/null
|
|
else
|
|
cc test-memorymodel.c -o test-memorymodel >/dev/null
|
|
fi
|
|
|
|
true ${memory_model:=`./test-memorymodel`}
|
|
|
|
# clean up
|
|
rm -f test-memorymodel*
|
|
|
|
echo "detected memory model ${memory_model}"
|
|
echo "detected Operating System ${os_type}"
|
|
echo "creating makefile_build ..."
|
|
echo
|
|
|
|
if [ ${os_type} = MAC_OSX ] ; then
|
|
cp makefile_darwinLP64_utf8_ffi makefile_build
|
|
elif [ ${os_type} = LINUX ] ; then
|
|
if [ -f /etc/redhat-release ] ; then
|
|
libffi_version=$(ls -d /usr/lib*/libffi*/include)
|
|
if [ -z "${libffi_version}" ] ; then
|
|
libffi_version="/usr/include"
|
|
fi
|
|
if [ ${memory_model} = LP64 ] ; then
|
|
sed "s,LIBFFI_VERSION,${libffi_version},g" makefile_linuxLP64_redhat_utf8_ffi > makefile_build
|
|
else
|
|
sed "s,LIBFFI_VERSION,${libffi_version},g" makefile_linux_redhat_utf8_ffi > makefile_build
|
|
fi
|
|
else
|
|
if [ ${memory_model} = LP64 ] ; then
|
|
cp makefile_linuxLP64_utf8_ffi makefile_build
|
|
else
|
|
cp makefile_linux_utf8_ffi makefile_build
|
|
fi
|
|
fi
|
|
elif [ ${os_type} = _BSD ] ; then
|
|
if [ ${memory_model} = LP64 ] ; then
|
|
if [ -f /usr/local/include/ffi.h ] ; then
|
|
cp makefile_bsdLP64_utf8_ffi makefile_build
|
|
else
|
|
cp makefile_bsdLP64_utf8 makefile_build
|
|
fi
|
|
else
|
|
cp makefile_bsd_utf8 makefile_build
|
|
fi
|
|
elif [ ${os_type} = SUNOS ] ; then
|
|
if [ ${memory_model} = LP64 ] ; then
|
|
cp makefile_sunosLP64_uf8 makefile_build
|
|
else
|
|
cp makefile_sunos_utf8 makefile_build
|
|
fi
|
|
elif [ ${os_type} = AIX ] ; then
|
|
if [ ${memory_model} = LP64 ] ; then
|
|
cp makefile_aixLP64_utf8_gcc makefile_build
|
|
else
|
|
cp makefile_aix_utf8_gcc makefile_build
|
|
fi
|
|
elif [ ${os_type} = TRU64 ] ; then
|
|
cp makefile_tru64 makefile_build
|
|
elif [ ${os_type} = WINDOWS ] ; then
|
|
if [ ${memory_model} = LLP64 ] ; then
|
|
cp makefile_mingw64_ffi makefile_build
|
|
else
|
|
cp makefile_mingw_ffi makefile_build
|
|
fi
|
|
elif [ ${os_type} = CYGWIN ] ; then
|
|
cp makefile_cygwin makefile_build
|
|
if [ ${memory_model} = LP64 ]; then
|
|
cp makefile_cygwinLP64 makefile_build
|
|
else
|
|
cp makefile_cygwin makefile_build
|
|
fi
|
|
elif [ ${os_type} = OS2 ] ; then
|
|
cp makefile_os2 makefile_build
|
|
fi
|
|
|
|
|
|
|
|
if [ ${os_type} = MAC_OSX ] ; then
|
|
echo "to make for 64-bit on MAC_OSX type:"
|
|
else
|
|
echo "to make for ${memory_model} on ${os_type} type:"
|
|
fi
|
|
echo " make"
|
|
echo "to make for any other system do:"
|
|
echo " make -f makefile_xxx"
|
|
echo "where makefile_xxx is one of the preconfigured makefiles"
|
|
echo
|
|
|