Improvements for cross-compiling.

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1741 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
meep-eep
2005-05-13 15:10:38 +00:00
parent b21ed8d47a
commit 22bf3c4172
7 changed files with 282 additions and 135 deletions
+1
View File
@@ -19,6 +19,7 @@ COMPILE=gcc
MKDEPEND='gcc -MM' MKDEPEND='gcc -MM'
MAKE='@MAKE@' MAKE='@MAKE@'
ECHON='@ECHON@' ECHON='@ECHON@'
SED='@SED@'
uqm_CFLAGS='@CFLAGS@' uqm_CFLAGS='@CFLAGS@'
uqm_LDFLAGS='@LDFLAGS@' uqm_LDFLAGS='@LDFLAGS@'
uqm_INSTALL_BINDIR='@INSTALL_BINDIR@' uqm_INSTALL_BINDIR='@INSTALL_BINDIR@'
+1 -1
View File
@@ -232,7 +232,7 @@ uqm_process_config() {
substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK" substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK"
# Make build.vars from build.vars.in, substituting variables. # Make build.vars from build.vars.in, substituting variables.
SUBSTITUTE_VARS="CFLAGS LDFLAGS MAKE ECHON DEBUG SOUNDMODULE \ SUBSTITUTE_VARS="CFLAGS LDFLAGS MAKE ECHON DEBUG SED SOUNDMODULE \
HAVE_OPENGL HAVE_REGEX_H_FLAG USE_ZIP_IO \ HAVE_OPENGL HAVE_REGEX_H_FLAG USE_ZIP_IO \
INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR \ INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR \
REZ WINDRES" REZ WINDRES"
+21 -15
View File
@@ -22,21 +22,27 @@ For unknown dependencies, additions to config_proginfo might need to be
made. The other files should not be modified. made. The other files should not be modified.
Only build.sh is to be called directly. Only build.sh is to be called directly.
ansi ansi colour definitions. ansi ansi colour definitions.
build.config configuration options for the program to build. build.config configuration options for the program to build.
It contains the description of the configuration It contains the description of the configuration
menu, and specifies the dependencies. menu, and specifies the dependencies.
The format of the menu description is listed briefly The format of the menu description is listed briefly
below. below.
build.sh the sh script that is to be called for configuration, build.sh the sh script that is to be called for configuration,
building, and installation. building, and installation.
build_functions auxiliary functions to build.sh for building. build_functions auxiliary functions to build.sh for building.
config_functions auxiliary functions to build.sh for configuration. config_functions auxiliary functions to build.sh for configuration.
config_proginfo contains descriptions of dependencies. config_proginfo_build contains descriptions of dependencies for the
The information in this file is used in particular for system where the code is being built.
detecting if those libraries and other external programs The information in this file is used in particular
are present. for detecting if those libraries and other external
menu_functions auxiliary functions to build.sh for menus. programs are present.
config_proginfo_host contains descriptions of dependencies for the
system where the software will eventually be run.
The information in this file is used in particular
for detecting if those libraries and other external
programs are present.
menu_functions auxiliary functions to build.sh for menus.
The menu (from build.config) The menu (from build.config)
+15 -5
View File
@@ -36,7 +36,7 @@ usage() {
} }
escape_string() { escape_string() {
$PROG_sed_FILE -e s,[\\\'\"\`\ \ \$\&\\\*\\\?\#\!],\\\\\&,g << EOF $SED -e s,[\\\'\"\`\ \ \$\&\\\*\\\?\#\!],\\\\\&,g << EOF
$1 $1
EOF EOF
} }
@@ -136,7 +136,12 @@ build_rec_collect_o_files() {
# Start the configure program. # Start the configure program.
# $1 = target # $1 = target
build_config() { build_config() {
prepare_build_system
config_requirements config_requirements
prepare_host_system
if [ "$BUILD_SYSTEM" '!=' "$HOST_SYSTEM" ]; then
build_message "Cross-compiling to $HOST_SYSTEM."
fi
eval "${TARGET}_requirements" eval "${TARGET}_requirements"
eval "${TARGET}_prepare_config" eval "${TARGET}_prepare_config"
eval "${TARGET}_load_config" eval "${TARGET}_load_config"
@@ -149,7 +154,12 @@ build_reconfig() {
echo "*** Warning: file 'config.state' not found - using defaults." echo "*** Warning: file 'config.state' not found - using defaults."
fi fi
prepare_build_system
config_requirements config_requirements
prepare_host_system
if [ "$BUILD_SYSTEM" '!=' "$HOST_SYSTEM" ]; then
build_message "Cross-compiling to $HOST_SYSTEM."
fi
eval "${TARGET}_requirements" eval "${TARGET}_requirements"
eval "${TARGET}_prepare_config" eval "${TARGET}_prepare_config"
eval "${TARGET}_load_config" eval "${TARGET}_load_config"
@@ -212,10 +222,10 @@ build_distclean() {
# Description: check if the config files are present and load them. # Description: check if the config files are present and load them.
# If they're not present, remake them. # If they're not present, remake them.
build_check_config() { build_check_config() {
[ ! -e "$BUILD_WORK/build.vars" ] || return if [ ! -e "$BUILD_WORK/build.vars" ]; then
build_config || exit $?
build_config || exit $? build_process_config
build_process_config fi
. "$BUILD_WORK/build.vars" . "$BUILD_WORK/build.vars"
. "${BUILD_REC_PATH:=./}Makeinfo" . "${BUILD_REC_PATH:=./}Makeinfo"
} }
+92 -12
View File
@@ -533,7 +533,30 @@ add_symbol() {
} }
check_endianness() { check_endianness() {
try_compile_and_run_c << EOF local ENDIAN
if [ "$BUILD_SYSTEM" '!=' "$HOST_SYSTEM" ]; then
case "$BUILD_HOST_ENDIAN" in
"")
build_message "Cross-compiling - assuming little-endian host."
ENDIAN=little
;;
big)
build_message "Cross-compiling for a big-endian host."
ENDIAN=big
;;
little)
build_message "Cross-compiling for a little-endian host."
ENDIAN=little
;;
*)
build_message "Bad endianness specified. Use \"little\" or \"big\""
exit 1
;;
esac
else
# Detect endianness
try_compile_and_run_c << EOF
int main() { int main() {
int i; int i;
@@ -541,15 +564,25 @@ int main() {
return *((unsigned char *) &i); return *((unsigned char *) &i);
} }
EOF EOF
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
build_message "Big-endian machine." build_message "Big-endian machine detected."
add_symbol WORDS_BIGENDIAN "#define WORDS_BIGENDIAN" ENDIAN=big
add_symbol "WORDS_BIGENDIAN_FLAG" 1 else
else build_message "Little-endian machine detected."
build_message "Little-endian machine." ENDIAN=little
add_symbol WORDS_BIGENDIAN "#undef WORDS_BIGENDIAN" fi
add_symbol "WORDS_BIGENDIAN_FLAG" 0
fi fi
case "$ENDIAN" in
big)
add_symbol WORDS_BIGENDIAN "#define WORDS_BIGENDIAN"
add_symbol "WORDS_BIGENDIAN_FLAG" 1
;;
little)
add_symbol WORDS_BIGENDIAN "#undef WORDS_BIGENDIAN"
add_symbol "WORDS_BIGENDIAN_FLAG" 0
;;
esac
} }
@@ -660,10 +693,58 @@ EOF
rm -- "${TEMPFILE}.sed" rm -- "${TEMPFILE}.sed"
} }
# Define the build system type.
set_build_system() {
BUILD_SYSTEM=`uname -s`
}
# Define the host system type.
set_host_system() {
local UHOST
# Include information about programs we can detect if [ -z "$BUILD_HOST" ]; then
. build/unix/config_proginfo HOST_SYSTEM=$BUILD_SYSTEM
else
case "$BUILD_HOST" in
*-*-*)
HOST_SYSTEM="${BUILD_HOST#*-}"
HOST_SYSTEM="${OSNAME%-*}"
;;
esac
# Use a single capitalization.
# What is used is whatever 'uname -s' would give on such a platform.
UHOST=`$TR "[:lower:]" "[:upper:]" << EOF
$BUILD_HOST
EOF
`
case "$UHOST" in
LINUX) HOST_SYSTEM="Linux" ;;
FREEBSD) HOST_SYSTEM="FreeBSD" ;;
OPENBSD) HOST_SYSTEM="OpenBSD" ;;
MINGW|MINGW32) HOST_SYSTEM="MINGW32" ;;
DARWIN) HOST_SYSTEM="Darwin" ;;
SUNOS) HOST_SYSTEM="SunOS" ;;
QNX) HOST_SYSTEM="QNX" ;;
*)
build_message "Warning: host type '$BUILD_HOST' unknown. Using defaults."
;;
esac
fi
}
prepare_build_system() {
set_build_system
# Include information about programs we can detect for the build system.
. build/unix/config_proginfo_build
}
prepare_host_system() {
set_host_system
# Include information about programs we can detect for the host system.
. build/unix/config_proginfo_host
}
# Some initialisations # Some initialisations
HAVE_SYMBOLS="" HAVE_SYMBOLS=""
@@ -680,4 +761,3 @@ config_requirements() {
MAKE="$PROG_make_FILE" MAKE="$PROG_make_FILE"
} }
+132
View File
@@ -0,0 +1,132 @@
# Set information on used programs and libraries
# This file contains the information for the programs that test the
# system on which the software is built.
# Copyright (c) 2002 Serge van den Boom
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
# Describe the programs (possibly) used: #
##############################################################################
### gcc ###
PROG_gcc_NAME="GNU C compiler"
PROG_gcc_FILE="gcc"
PROG_gcc_ACTION=""
PROG_gcc_VERSION='$(gcc --version)'
### sed ###
PROG_sed_NAME="Sed stream editor"
PROG_sed_FILE="sed"
PROG_sed_ACTION=""
PROG_sed_VERSION=''
### echo -n ###
PROG_echon_NAME="'echo -n' capable echo"
PROG_echon_FILE=""
PROG_echon_ACTION=""
PROG_echon_VERSION=''
PROG_echon_DETECT="echon_detect"
echon_detect() {
local TEST LOCATIONS LOCATION
# Default echo (probably builtin)
TEST=`echo -n X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="echo -n"
return 0;
fi
# External echo
LOCATIONS="/bin/ /usr/ucb/"
for LOCATION in $LOCATIONS; do
if [ -x ${LOCATION}echo ]; then
TEST=`${LOCATION}echo -n X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="${LOCATION}echo -n"
return 0;
fi
fi
done
# Using printf as echo
TEST=`printf %s X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="printf %s"
return 0;
fi
# No good echo found
return 1
}
### GNU Make ###
PROG_make_NAME="Make"
case "$BUILD_SYSTEM" in
FreeBSD|OpenBSD|SunOS)
PROG_make_FILE="gmake"
;;
*)
PROG_make_FILE="make"
;;
esac
PROG_make_ACTION=""
PROG_make_VERSION=''
### tr ###
PROG_tr_NAME="tr"
PROG_tr_FILE="tr"
PROG_tr_ACTION=""
PROG_tr_VERSION=''
### windres (for Windows) ###
PROG_windres_NAME=windres
PROG_windres_FILE=windres
PROG_windres_ACTION=""
PROG_windres_VERSION='windres --version'
### Rez resource compiler (for MacOS X) only ###
PROG_Rez_NAME="Rez resource compiler (Apple Developer Tools)"
PROG_Rez_FILE="/Developer/Tools/Rez"
PROG_Rez_ACTION=""
PROG_Rez_VERSION=''
### pkg-config ###
PROG_pkgconfig_NAME="pkg-config"
PROG_pkgconfig_FILE="pkg-config"
PROG_pkgconfig_ACTION=""
PROG_pkgconfig_VERSION='$(pkg-config --version)'
##############################################################################
# Describe the libaries (possibly) used: #
##############################################################################
##############################################################################
# Describe the symbols (possibly) used: #
##############################################################################
@@ -1,4 +1,6 @@
# Set information on used programs and libraries # Set information on used programs and libraries
# This file contains the information for the programs that test the
# system on which the software will be run.
# Copyright (c) 2002 Serge van den Boom # Copyright (c) 2002 Serge van den Boom
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
@@ -15,108 +17,12 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
OSNAME=`uname -s`
############################################################################## ##############################################################################
# Describe the programs (possibly) used: # # Describe the programs (possibly) used: #
############################################################################## ##############################################################################
### gcc ###
PROG_gcc_NAME="GNU C compiler"
PROG_gcc_FILE="gcc"
PROG_gcc_ACTION=""
PROG_gcc_VERSION='$(gcc --version)'
### sed ###
PROG_sed_NAME="Sed stream editor"
PROG_sed_FILE="sed"
PROG_sed_ACTION=""
PROG_sed_VERSION=''
### echo -n ###
PROG_echon_NAME="'echo -n' capable echo"
PROG_echon_FILE=""
PROG_echon_ACTION=""
PROG_echon_VERSION=''
PROG_echon_DETECT="echon_detect"
echon_detect() {
local TEST LOCATIONS LOCATION
# Default echo (probably builtin)
TEST=`echo -n X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="echo -n"
return 0;
fi
# External echo
LOCATIONS="/bin/ /usr/ucb/"
for LOCATION in $LOCATIONS; do
if [ -x ${LOCATION}echo ]; then
TEST=`${LOCATION}echo -n X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="${LOCATION}echo -n"
return 0;
fi
fi
done
# Using printf as echo
TEST=`printf %s X`
if [ "$TEST" = X ]; then
PROG_echon_FILE="printf %s"
return 0;
fi
# No good echo found
return 1
}
### GNU Make ###
PROG_make_NAME="Make"
case "$OSNAME" in
FreeBSD|OpenBSD|SunOS)
PROG_make_FILE="gmake"
;;
*)
PROG_make_FILE="make"
;;
esac
PROG_make_ACTION=""
PROG_make_VERSION=''
### tr ###
PROG_tr_NAME="tr"
PROG_tr_FILE="tr"
PROG_tr_ACTION=""
PROG_tr_VERSION=''
### windres (for Windows) ###
PROG_windres_NAME=windres
PROG_windres_FILE=windres
PROG_windres_ACTION=""
PROG_windres_VERSION='windres --version'
### Rez resource compiler (for MacOS X) only ###
PROG_Rez_NAME="Rez resource compiler (Apple Developer Tools)"
PROG_Rez_FILE="/Developer/Tools/Rez"
PROG_Rez_ACTION=""
PROG_Rez_VERSION=''
### pkg-config ###
PROG_pkgconfig_NAME="pkg-config"
PROG_pkgconfig_FILE="pkg-config"
PROG_pkgconfig_ACTION=""
PROG_pkgconfig_VERSION='$(pkg-config --version)'
############################################################################## ##############################################################################
# Describe the libaries (possibly) used: # # Describe the libaries (possibly) used: #
@@ -125,7 +31,7 @@ PROG_pkgconfig_VERSION='$(pkg-config --version)'
### SDL ### ### SDL ###
LIB_SDL_NAME="Simple DirectMedia Layer" LIB_SDL_NAME="Simple DirectMedia Layer"
case "$OSNAME" in case "$TARGET_SYSTEM" in
FreeBSD) FreeBSD)
LIB_SDL_CFLAGS='$(sdl11-config --cflags)' LIB_SDL_CFLAGS='$(sdl11-config --cflags)'
LIB_SDL_LDFLAGS='$(sdl11-config --libs)' LIB_SDL_LDFLAGS='$(sdl11-config --libs)'
@@ -156,7 +62,7 @@ LIB_SDL_mixer_VERSION=""
### SDL_image ### ### SDL_image ###
LIB_SDL_image_NAME="SDL_image" LIB_SDL_image_NAME="SDL_image"
case "$OSNAME" in case "$TARGET_SYSTEM" in
Darwin) Darwin)
LIB_SDL_image_CFLAGS='' LIB_SDL_image_CFLAGS=''
LIB_SDL_image_LDFLAGS="-framework SDL_image" LIB_SDL_image_LDFLAGS="-framework SDL_image"
@@ -172,7 +78,7 @@ LIB_SDL_image_VERSION=""
### OpenAL ### ### OpenAL ###
LIB_openal_NAME="OpenAL" LIB_openal_NAME="OpenAL"
LIB_openal_CFLAGS="" LIB_openal_CFLAGS=""
case "$OSNAME" in case "$TARGET_SYSTEM" in
FreeBSD|OpenBSD) FreeBSD|OpenBSD)
LIB_openal_LDFLAGS="-L/usr/local/lib -pthread -lopenal" LIB_openal_LDFLAGS="-L/usr/local/lib -pthread -lopenal"
;; ;;
@@ -194,7 +100,7 @@ LIB_openal_DEPEND_DETECT_BIN="pkgconfig"
### OpenGL ### ### OpenGL ###
LIB_opengl_NAME="OpenGL" LIB_opengl_NAME="OpenGL"
case "$OSNAME" in case "$TARGET_SYSTEM" in
FreeBSD|OpenBSD) FreeBSD|OpenBSD)
LIB_opengl_CFLAGS="-I/usr/X11R6/include -D_THREAD_SAFE" LIB_opengl_CFLAGS="-I/usr/X11R6/include -D_THREAD_SAFE"
LIB_opengl_LDFLAGS="-L/usr/X11R6/lib -lX11 -lXext -pthread -lGL" LIB_opengl_LDFLAGS="-L/usr/X11R6/lib -lX11 -lXext -pthread -lGL"
@@ -224,11 +130,15 @@ LIB_vorbis_VERSION=""
### Vorbisfile ### ### Vorbisfile ###
LIB_vorbisfile_NAME="vorbisfile" LIB_vorbisfile_NAME="vorbisfile"
case "$OSNAME" in case "$TARGET_SYSTEM" in
FreeBSD|OpenBSD) FreeBSD|OpenBSD)
LIB_vorbisfile_CFLAGS="-I/usr/local/include" LIB_vorbisfile_CFLAGS="-I/usr/local/include"
LIB_vorbisfile_LDFLAGS="-L/usr/local/lib -lvorbisfile -lvorbis" LIB_vorbisfile_LDFLAGS="-L/usr/local/lib -lvorbisfile -lvorbis"
;; ;;
MINGW32*)
LIB_vorbisfile_CFLAGS=""
LIB_vorbisfile_LDFLAGS="-lvorbisfile -lvorbis -lm -logg"
;;
Darwin) Darwin)
LIB_vorbisfile_CFLAGS="-D__MACOSX__" LIB_vorbisfile_CFLAGS="-D__MACOSX__"
LIB_vorbisfile_LDFLAGS="-framework Ogg -framework Vorbis" LIB_vorbisfile_LDFLAGS="-framework Ogg -framework Vorbis"
@@ -250,7 +160,14 @@ LIB_vorbisfile_DEPEND_DETECT_BIN="pkgconfig"
### zlib ### ### zlib ###
LIB_zlib_NAME="zlib" LIB_zlib_NAME="zlib"
LIB_zlib_CFLAGS="" LIB_zlib_CFLAGS=""
LIB_zlib_LDFLAGS="-lz" case "$TARGET_SYSTEM" in
MINGW32*)
LIB_zlib_LDFLAGS="-lzdll"
;;
*)
LIB_zlib_LDFLAGS="-lz"
;;
esac
LIB_zlib_VERSION="" LIB_zlib_VERSION=""
LIB_zlib_DETECT="try_pkgconfig_lib zlib zlib" LIB_zlib_DETECT="try_pkgconfig_lib zlib zlib"
LIB_zlib_DEPEND_DETECT_BIN="pkgconfig" LIB_zlib_DEPEND_DETECT_BIN="pkgconfig"
@@ -276,3 +193,4 @@ SYMBOL_wint_t_EXTRA="#include <wchar.h>"
SYMBOL_iswgraph_EXTRA="#include <wctype.h>" SYMBOL_iswgraph_EXTRA="#include <wctype.h>"