Skip to content

swarminglogic/scons-x-compile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scons-x-compile

Cross-Compilation (windows/linux) SCons build helper.

Serves as examples in an article on cross-compiling an SDL project for windows, from linux.

The repository has many branches that can be checked out, each adding to the prerequisites.

Cross-compilation is done using x86_64-w64-mingw32. On debian/ubuntu, install using:

sudo apt-get install g++-mingw-w64 mingw-w64-{tools,x86-64-dev}

Build setup uses SCons. On debian/ubuntu, install with:

sudo apt-get install scons

How to use:

  1. Cross-compile all the prequisites and SDL libraries and GLEW as described further down.
  2. Check out a desired branch, e.g. git checkout hello-sdl
  3. Build for linux with scons or windows scons --win64

Branches and utilized libraries:

Branch Libraries Used Target Executable
basic None main
hello-sdl SDL2 Hello_SDL
hello-sdl-image -"- + SDL2_image Hello_SDL_image
hello-sdl-mixer -"- + SDL2_mixer Hello_SDL_mixer
hello-sdl-ttf -"- + SDL2_ttf Hello_SDL_ttf
hello-opengl -"- + GLEW Hello_OpenGL

Cross-compiling libraries using crosscompile_libs.sh

Library Arguments Required env. variable
zlib --x-comp-zlib
libpng --x-comp-libpng
libjpeg --x-comp-libjpeg
libogg --x-comp-libogg
libvorbis --x-comp-libvorbis
libfreetype --x-comp-libfreetype
glew --x-comp-glew
SDL2 --x-comp-sdl SDL2_SRC_DIR
SDL2_image --x-comp-sdl-image SDL2_IMAGE_SRC_DIR
SDL2_mixer --x-comp-sdl-mixer SDL2_MIXER_SRC_DIR
SDL2_ttf --x-comp-sdl-ttf SDL2_TTF_SRC_DIR

Example libogg compile:

./crosscompile_libs.sh --x-comp-libogg

Example SDL2 compile:

export SDL2_SRC_DIR=/opt/sdl2/SDL
./crosscompile_libs.sh --x-comp-sdl

If environment variables SDL2_SRC_DIR, SDL2_IMAGE_SRC_DIR, SDL2_MIXER_SRC_DIR, and SDL2_TTF_SRC_DIR are set, you can cross-compile all libraries, including prerequisites with

./crosscompile_libs.sh --x-comp-all

Cross-compile zlib (prereq)

# We do this in /tmp
cd /tmp

# Download zlib 1.2.8
wget http://zlib.net/zlib128.zip
unzip zlib128.zip
cd zlib-1.2.8

# Specify our toolset in the makefile
perl -i -pe 's,(PREFIX =)$,$1 x86_64-w64-mingw32-,' win32/Makefile.gcc

# Call make
make -f win32/Makefile.gcc

# Install it to our cross-tools directory
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
sudo DESTDIR=$PREFIX/$TOOLSET/ \
    INCLUDE_PATH=include  LIBRARY_PATH=lib  BINARY_PATH=bin \
    make install -f win32/Makefile.gcc

Cross-compile libpng (prereq for SDL2_image, SDL2_ttf)

# We do this in /tmp
cd /tmp

# Download libpng 1.2.50
wget http://download.sourceforge.net/libpng/libpng-1.2.50.tar.gz
tar xf libpng-1.2.50.tar.gz
cd libpng-1.2.50

# Configure
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"
./configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# make and install
make
sudo make install

Cross-compile libjpeg (prereq for SDL2_image)

# We do this in /tmp
cd /tmp

# check if you have nasm assembler, if not, install it
if ! command -v nasm ; then
  sudo apt-get install nasm
fi

# Download libjpeg-turbo 1.3.0
wget "http://downloads.sourceforge.net/project/"\
"libjpeg-turbo/1.3.0/libjpeg-turbo-1.3.0.tar.gz"
tar xf libjpeg-turbo-1.3.0.tar.gz
cd libjpeg-turbo-1.3.0/

PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"
./configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# Make and install
make
sudo make install

Cross-compile libogg (prereq for SDL2_mixer)

# We do this in /tmp
cd /tmp

# Download libogg 1.3.1
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar xf libogg-1.3.1.tar.gz
cd libogg-1.3.1/

PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET
./configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# Make and install
make
sudo make install

Cross-compile libvorbis (prereq for SDL2_mixer)

# We do this in /tmp
cd /tmp

# Download libvorbis 1.3.2
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.gz
tar xf libvorbis-1.3.2.tar.gz
cd libvorbis-1.3.2/

PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"
./configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# Make and install
make
sudo make install

Cross-compile libfreetype (prereq for SDL2_ttf)

# We do this in /tmp
cd /tmp

# Download freetype-2.5.2
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.2.tar.gz
tar xf freetype-2.5.2.tar.gz
cd freetype-2.5.2/

PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET
PATH=${CROSSPATH}/bin:$PATH
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"
export LIBPNG="`libpng-config --libs`"
export LIBPNG_CFLAGS="`libpng-config --cflags`"
export LIBPNG_LDFLAGS="`libpng-config --ldflags`"

./configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# Make and install
make
sudo make install

Cross-compiling SDL2:

# From SDL source directory
# create build-win64 directory and cd to it
mkdir build-win64 && cd $_

# Set up some common variables
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
# We make CC variablee available to child processes
export CC="$TOOLSET-gcc -static-libgcc"

# Configure build
../configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$PREFIX/$TOOLSET
# building and installing
make
sudo make install

Cross-compiling SDL2_image:

# From SDL_image source directory
# create build-win64 directory and cd to it
mkdir build-win64 && cd $_

# Set up some common variables
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET

export CC="$TOOLSET-gcc -static-libgcc"
export PKG_CONFIG_PATH=${CROSSPATH}/lib/pkgconfig
export PATH=${CROSSPATH}/bin:$PATH
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"

# Configure build (it should find both libjpeg and libpng now)
../configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH \
             --disable-webp

# Build and install
make
sudo make install

Cross-compiling SDL2_mixer:

# From SDL_mixer source directory
# create build-win64 directory and cd to it
mkdir build-win64 && cd $_

# Set up some common variables
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET

export CC="$TOOLSET-gcc -static-libgcc"
export PKG_CONFIG_PATH=${CROSSPATH}/lib/pkgconfig
export PATH=${CROSSPATH}/bin:$PATH
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"

# Configure build (it should find ogg and vorbis)
../configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH \
             --disable-music-mp3-smpeg

# Build and install
make
sudo make install

Cross-compiling SDL2_ttf:

# From SDL_ttf source directory
# create build-win64 directory and cd to it
mkdir build-win64 && cd $_

# Set up some common variables
PREFIX=/usr/local/cross-tools/
TOOLSET=x86_64-w64-mingw32
CROSSPATH=$PREFIX/$TOOLSET

export CC="$TOOLSET-gcc -static-libgcc"
export PKG_CONFIG_PATH=${CROSSPATH}/lib/pkgconfig
export PATH=${CROSSPATH}/bin:$PATH
export CFLAGS="-I${CROSSPATH}/include"
export LDFLAGS="-L${CROSSPATH}/lib"

# Configure build (it should find libfreetype now)
../configure --target=$TOOLSET --host=$TOOLSET \
             --build=x86_64-linux --prefix=$CROSSPATH

# Build and install
make
sudo make install

About

Cross-Compilation (windows/linux) SCons with examples for use with SDL2

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published