2011-05-07 09:48:21 +02:00
#!/bin/bash
2011-12-15 19:01:07 +01:00
# Use this script to build MegaGlest using cmake
# ----------------------------------------------------------------------------
# Written by Mark Vejvoda <mark_vejvoda@hotmail.com>
2013-11-05 01:12:34 +01:00
# Copyright (c) 2011-2013 Mark Vejvoda under GNU GPL v3.0+
2010-12-11 08:24:03 +01:00
2013-12-09 22:26:16 +01:00
# ----------------------------------------------------------------------------
#
# Configuration section
#
# Default to English language output so we can understand your bug reports
export LANG = C
2014-01-22 08:21:56 +01:00
SCRIPTDIR = " $( dirname $( readlink -f $0 ) ) "
2013-12-18 02:35:51 +01:00
CPU_COUNT = -1
CMAKE_ONLY = 0
MAKE_ONLY = 0
CLANG_FORCED = 0
2013-12-30 20:02:43 +01:00
WANT_STATIC_LIBS = "-DWANT_STATIC_LIBS=ON"
2017-03-21 01:06:12 +01:00
WANT_STATIC_WX_LIBS = "-DWANT_STATIC_WX_LIBS=OFF"
2015-10-22 03:11:19 +02:00
FORCE_EMBEDDED_LIBS = 0
2016-10-18 04:05:21 +02:00
GCC_FORCED_VERSION = 0
2013-12-31 03:30:23 +01:00
LUA_FORCED_VERSION = 0
2014-01-09 06:19:14 +01:00
FORCE_32BIT_CROSS_COMPILE = 0
2016-01-18 20:59:21 +01:00
COMPILATION_WITHOUT = 0
2015-10-06 17:28:52 +02:00
BUILD_MEGAGLEST_TESTS = "ON"
2013-12-18 02:35:51 +01:00
2017-03-21 01:06:12 +01:00
while getopts "c:defg:hl:mnswx" option; do
2013-12-18 02:35:51 +01:00
case " ${ option } " in
2015-09-22 00:52:09 +02:00
c)
2013-12-18 02:35:51 +01:00
CPU_COUNT = ${ OPTARG }
# echo "${option} value: ${OPTARG}"
; ;
2015-09-22 00:52:09 +02:00
d)
2013-12-30 20:02:43 +01:00
WANT_STATIC_LIBS = "-DWANT_STATIC_LIBS=OFF"
2015-10-22 03:11:19 +02:00
# echo "${option} value: ${OPTARG}"
; ;
e)
FORCE_EMBEDDED_LIBS = 1
2013-12-30 20:02:43 +01:00
# echo "${option} value: ${OPTARG}"
; ;
2015-09-22 00:52:09 +02:00
f)
2013-12-31 03:30:23 +01:00
CLANG_FORCED = 1
2013-12-18 02:35:51 +01:00
# echo "${option} value: ${OPTARG}"
; ;
2016-10-18 04:05:21 +02:00
g)
GCC_FORCED_VERSION = ${ OPTARG }
echo " ${ option } value: ${ OPTARG } GCC_FORCED_VERSION [ ${ GCC_FORCED_VERSION } ] "
; ;
2015-09-22 00:52:09 +02:00
h)
2013-12-23 07:53:26 +01:00
echo " Usage: $0 <option> "
2016-10-18 04:05:21 +02:00
echo " where <option> can be: -c x, -d, -e, -f, -m, -n, -h, -l x, -w, -x -g"
2013-12-23 07:53:26 +01:00
echo " option descriptions:"
2013-12-31 03:30:23 +01:00
echo " -c x : Force the cpu / cores count to x - example: -c 4"
echo " -d : Force DYNAMIC compile (do not want static libs)"
2015-10-22 03:11:19 +02:00
echo " -e : Force compile with EMBEDDED libraries"
2013-12-31 03:30:23 +01:00
echo " -f : Force using CLANG compiler"
2016-10-18 04:05:21 +02:00
echo " -g x : Force using GCC version x - example: -g 6"
2015-09-22 00:52:09 +02:00
echo " -l x : Force using LUA version x - example: -l 5.3"
2013-12-31 03:30:23 +01:00
echo " -m : Force running CMAKE only to create Make files (do not compile)"
echo " -n : Force running MAKE only to compile (assume CMAKE already built make files)"
2017-03-21 01:06:12 +01:00
echo " -s : Force compilation of wxWidgets STATIC libs"
2016-01-18 20:59:21 +01:00
echo " -w : Force compilation 'Without using wxWidgets'"
2014-01-09 06:19:14 +01:00
echo " -x : Force cross compiling on x64 linux to produce an x86 32 bit binary"
2013-12-23 07:53:26 +01:00
echo " -h : Display this help usage"
2013-12-31 03:30:23 +01:00
2015-09-22 00:52:09 +02:00
exit 1
2013-12-23 07:53:26 +01:00
; ;
2015-09-22 00:52:09 +02:00
l)
2013-12-31 03:30:23 +01:00
LUA_FORCED_VERSION = ${ OPTARG }
# echo "${option} value: ${OPTARG} LUA_FORCED_VERSION [${LUA_FORCED_VERSION}]"
; ;
2015-09-22 00:52:09 +02:00
m)
2013-12-31 03:30:23 +01:00
CMAKE_ONLY = 1
# echo "${option} value: ${OPTARG}"
; ;
2015-09-22 00:52:09 +02:00
n)
2013-12-31 03:30:23 +01:00
MAKE_ONLY = 1
2017-03-21 01:06:12 +01:00
# echo "${option} value: ${OPTARG}"
; ;
s)
WANT_STATIC_WX_LIBS = "-DWANT_STATIC_WX_LIBS=ON"
2016-01-18 20:59:21 +01:00
# echo "${option} value: ${OPTARG}"
; ;
w)
COMPILATION_WITHOUT = 1
2013-12-31 03:30:23 +01:00
# echo "${option} value: ${OPTARG}"
; ;
2015-09-22 00:52:09 +02:00
x)
2014-01-09 06:19:14 +01:00
FORCE_32BIT_CROSS_COMPILE = 1
# echo "${option} value: ${OPTARG}"
; ;
2013-12-31 03:30:23 +01:00
\? )
echo " Script Invalid option: - $OPTARG " >& 2
exit 1
; ;
2013-12-18 02:35:51 +01:00
esac
done
#echo "CPU_COUNT = ${CPU_COUNT} CMAKE_ONLY = ${CMAKE_ONLY} CLANG_FORCED = ${CLANG_FORCED}"
#exit;
2013-12-09 22:26:16 +01:00
# Compiler selection
# Unless both the CC and CXX environment variables point to clang and clang++
2016-08-09 21:20:57 +02:00
# respectively, we use GCC. To enforce clang compilation:
2013-12-09 22:26:16 +01:00
# 1. Install clang (sudo apt-get install clang)
# 2. Set the two vars below:
# WANT_CLANG=YES and CLANG_BIN_PATH=<path_to_the_clang_binary>
2014-02-15 02:38:42 +01:00
CLANG_BIN_PATH = $( which clang 2>/dev/null )
CLANGPP_BIN_PATH = $( which clang++ 2>/dev/null )
2013-11-19 22:57:28 +01:00
2013-12-18 02:35:51 +01:00
cd ${ SCRIPTDIR }
2013-12-09 22:26:16 +01:00
# Google breakpad integration (cross platform memory dumps) - OPTIONAL
# Set this to the root path of your Google breakpad subversion working copy.
# By default, this script looks for a "google-breakpad" sub-directory within
# the directory this script resides in. If this directory is not found, Cmake
# will warn about it later.
# Instead of editing this variable, consider creating a symbolic link:
# ln -s ../../google-breakpad google-breakpad
2014-01-22 08:21:56 +01:00
BREAKPAD_ROOT = " $SCRIPTDIR /../../google-breakpad/ "
2013-12-09 22:26:16 +01:00
# CMake options
2016-08-09 21:20:57 +02:00
# The default configuration works fine for regular developers and is also used
2013-12-09 22:26:16 +01:00
# by our installers.
2016-08-09 21:20:57 +02:00
# For more cmake/build options refer to
2013-12-09 22:26:16 +01:00
# http://wiki.megaglest.org/Linux_Compiling#Building_using_CMake_by_Hand
EXTRA_CMAKE_OPTIONS =
# Build threads
2013-12-26 18:28:21 +01:00
# By default we use all physical CPU cores to build.
2013-05-15 07:30:51 +02:00
NUMCORES = ` lscpu -p | grep -cv '^#' `
2013-12-09 22:26:16 +01:00
echo " CPU cores detected: $NUMCORES "
2013-05-15 07:30:51 +02:00
if [ " $NUMCORES " = '' ] ; then NUMCORES = 1; fi
2013-12-18 02:35:51 +01:00
if [ $CPU_COUNT != -1 ] ; then NUMCORES = $CPU_COUNT ; fi
2013-12-09 22:26:16 +01:00
echo " CPU cores to be used: $NUMCORES "
# ----------------------------------------------------------------------------
2011-05-25 00:51:45 +02:00
2013-12-26 18:28:21 +01:00
# Load shared functions
2014-01-22 08:21:56 +01:00
. $SCRIPTDIR /mg_shared.sh
2013-12-26 18:28:21 +01:00
# ----------------------------------------------------------------------------
2016-08-09 21:20:57 +02:00
if [ $MAKE_ONLY = 0 ] ; then
2013-12-18 02:35:51 +01:00
mkdir -p build
fi
2010-12-11 08:24:03 +01:00
cd build
2010-12-11 13:53:38 +01:00
2016-08-09 21:20:57 +02:00
if [ $MAKE_ONLY = 0 ] ; then
2013-12-18 02:35:51 +01:00
if [ -f 'CMakeCache.txt' ] ; then rm -f 'CMakeCache.txt' ; fi
fi
2013-03-05 20:56:23 +01:00
2013-12-26 18:28:21 +01:00
# Included from shared functions
detect_system
2013-03-05 20:56:23 +01:00
echo 'We have detected the following system:'
echo ' [ ' " $distribution " ' ] [ ' " $release " ' ] [ ' " $codename " ' ] [ ' " $architecture " ' ]'
2015-12-14 01:55:38 +01:00
if [ " $release " = "rolling" ] && [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic LIBS ...'
WANT_STATIC_LIBS = "-DWANT_STATIC_LIBS=OFF"
fi
2015-10-26 20:56:55 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
2016-01-18 20:59:21 +01:00
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FontConfig=OFF "
2015-10-26 20:56:55 +01:00
fi
2015-12-13 23:50:43 +01:00
2016-08-09 21:20:57 +02:00
if [ " $distribution " != "Mageia" ] ; then
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DWANT_USE_OpenSSL=OFF "
fi
2013-03-05 20:56:23 +01:00
case $distribution in
2015-01-31 11:53:59 +01:00
Debian)
case $release in
2016-07-20 20:20:14 +02:00
6| 6.*| 7| 7.*) ; ;
8| 8.*)
2015-10-26 20:56:55 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, JPEG, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_JPEG=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
fi
2015-10-06 17:28:52 +02:00
if [ $CLANG_FORCED = 1 ] ; then BUILD_MEGAGLEST_TESTS = "OFF" ; fi
2015-01-31 11:53:59 +01:00
; ;
2016-07-20 20:20:14 +02:00
*)
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
fi
if [ $CLANG_FORCED = 1 ] ; then BUILD_MEGAGLEST_TESTS = "OFF" ; fi
# ^ may be removed ~ when default clang's version will be 3.9+
; ;
2015-01-31 11:53:59 +01:00
esac
; ;
2015-04-29 20:23:03 +02:00
Ubuntu)
case $release in
10.*| 11.*| 12.*| 13.*| 14.*) ; ;
2016-07-20 20:20:14 +02:00
15.*| 16.*)
2015-10-26 20:56:55 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, JPEG, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_JPEG=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
2016-07-20 20:20:14 +02:00
fi
; ;
*)
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
fi
; ;
2015-04-29 20:23:03 +02:00
esac
; ;
LinuxMint)
case $release in
13| 13.*| 14| 15| 16| 17| 17.*) ; ;
2016-07-20 20:20:14 +02:00
18| 18.*| 19| 19.*)
2015-10-26 20:56:55 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, JPEG, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_JPEG=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
2016-07-20 20:20:14 +02:00
fi
; ;
*)
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic FTGL, LUA, PNG ... and forcing use the embedded IRCCLIENT'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_FTGL=OFF -DSTATIC_LUA=OFF -DSTATIC_PNG=OFF -DSTATIC_OGG=OFF -DFORCE_USE_EMBEDDED_Ircclient=ON "
fi
; ;
2015-04-29 20:23:03 +02:00
esac
; ;
2016-08-09 21:20:57 +02:00
SuSE| SUSE?LINUX| Opensuse| Fedora| Mageia)
2013-03-05 20:56:23 +01:00
case $release in
*)
2015-10-26 20:56:55 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic CURL ...'
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DSTATIC_CURL=OFF "
fi ; ;
2013-03-05 20:56:23 +01:00
esac
; ;
2015-04-29 20:23:03 +02:00
2013-12-30 21:46:45 +01:00
Arch)
2015-12-14 01:55:38 +01:00
if [ " $WANT_STATIC_LIBS " = "-DWANT_STATIC_LIBS=ON" ] ; then
echo 'Turning ON dynamic LIBS ...'
WANT_STATIC_LIBS = "-DWANT_STATIC_LIBS=OFF"
fi
2015-04-29 20:23:03 +02:00
; ;
2013-03-05 20:56:23 +01:00
esac
2016-08-09 21:20:57 +02:00
# If, in the configuration section on top of this script, the user has
2013-12-09 22:26:16 +01:00
# indicated they want to use clang in favor of the default of GCC, use clang.
2016-08-09 21:20:57 +02:00
if [ $CLANG_FORCED = 1 ] ; then
2014-01-22 08:21:56 +01:00
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DCMAKE_C_COMPILER= ${ CLANG_BIN_PATH } -DCMAKE_CXX_COMPILER= ${ CLANGPP_BIN_PATH } "
2013-11-19 17:23:31 +01:00
echo " USER WANTS to use CLANG / LLVM compiler! EXTRA_CMAKE_OPTIONS = ${ EXTRA_CMAKE_OPTIONS } "
#exit 1;
2013-12-09 22:26:16 +01:00
# If both the $CC and $CXX environment variable point to something containing
# "clang", use whatever these environment variables point to.
2014-01-22 19:17:01 +01:00
elif [ " `echo $CC | grep -oF 'clang'` " = 'clang' -a " `echo $CXX | grep -oF 'clang'` " = 'clang' ] ; then
2014-02-12 00:55:29 +01:00
if [ " `echo $CC | grep -Fo '/'` " = '/' ] ; then
2013-12-08 23:00:25 +01:00
CLANG_CC = $CC
else
CLANG_CC = ` which $CC `
fi
2014-02-12 00:55:29 +01:00
if [ " `echo $CXX | grep -Fo '/'` " = '/' ] ; then
2013-12-08 23:00:25 +01:00
CLANG_CXX = $CXX
else
CLANG_CXX = ` which $CXX `
fi
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DCMAKE_C_COMPILER= ${ CLANG_CC } -DCMAKE_CXX_COMPILER= ${ CLANG_CXX } "
echo " USER WANTS to use CLANG / LLVM compiler! EXTRA_CMAKE_OPTIONS = ${ EXTRA_CMAKE_OPTIONS } "
#exit 1;
2013-11-19 17:23:31 +01:00
fi
2016-10-18 04:05:21 +02:00
if [ " $GCC_FORCED_VERSION " != "0" ] && [ " $GCC_FORCED_VERSION " != "" ] ; then
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DCMAKE_C_COMPILER= $( which gcc-$GCC_FORCED_VERSION ) -DCMAKE_CXX_COMPILER= $( which g++-$GCC_FORCED_VERSION ) "
echo " USER WANTS TO FORCE USE of GCC $GCC_FORCED_VERSION "
fi
2015-09-22 00:52:09 +02:00
if [ " $LUA_FORCED_VERSION " != "0" ] && [ " $LUA_FORCED_VERSION " != "" ] ; then
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DFORCE_LUA_VERSION= $LUA_FORCED_VERSION "
#echo "USER WANTS TO FORCE USE of LUA $LUA_FORCED_VERSION"
2013-12-31 03:30:23 +01:00
fi
2015-10-22 03:11:19 +02:00
if [ " $FORCE_EMBEDDED_LIBS " != "0" ] && [ " $FORCE_EMBEDDED_LIBS " != "" ] ; then
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DFORCE_EMBEDDED_LIBS=ON "
fi
2014-01-09 06:19:14 +01:00
if [ $FORCE_32BIT_CROSS_COMPILE != 0 ] ; then
2016-01-18 20:59:21 +01:00
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DCMAKE_TOOLCHAIN_FILE=../mk/cmake/Modules/Toolchain-linux32.cmake "
#LIBDIR_32bit='/usr/lib32/'
#export LD_LIBRARY_PATH="${LIBDIR_32bit}:${LD_LIBRARY_PATH}"
fi
2014-01-09 06:19:14 +01:00
2016-01-18 20:59:21 +01:00
if [ " $COMPILATION_WITHOUT " != "0" ] && [ " $COMPILATION_WITHOUT " != "" ] ; then
EXTRA_CMAKE_OPTIONS = " ${ EXTRA_CMAKE_OPTIONS } -DBUILD_MEGAGLEST_MAP_EDITOR=OFF -DBUILD_MEGAGLEST_MODEL_VIEWER=OFF "
2014-01-09 06:19:14 +01:00
fi
2015-10-06 17:28:52 +02:00
if [ $MAKE_ONLY = 0 ] ; then
2017-03-21 01:06:12 +01:00
echo " Calling cmake with EXTRA_CMAKE_OPTIONS = ${ EXTRA_CMAKE_OPTIONS } AND WANT_STATIC_LIBS = ${ WANT_STATIC_LIBS } AND WANT_STATIC_WX_LIBS = ${ WANT_STATIC_WX_LIBS } "
cmake -DCMAKE_INSTALL_PREFIX= '' -DWANT_DEV_OUTPATH= ON $WANT_STATIC_LIBS $WANT_STATIC_WX_LIBS -DBUILD_MEGAGLEST_TESTS= $BUILD_MEGAGLEST_TESTS -DBREAKPAD_ROOT= $BREAKPAD_ROOT $EXTRA_CMAKE_OPTIONS ../../..
2015-10-06 17:28:52 +02:00
if [ $? -ne 0 ] ; then
2013-12-18 02:35:51 +01:00
echo 'ERROR: CMAKE failed.' >& 2; exit 1
fi
2011-10-18 14:36:44 +02:00
fi
2015-10-06 17:28:52 +02:00
if [ $CMAKE_ONLY = 1 ] ; then
2013-12-18 02:35:51 +01:00
echo " ==================> You may now call make with $NUMCORES cores... <================== "
else
echo " ==================> About to call make with $NUMCORES cores... <================== "
make -j$NUMCORES
if [ $? -ne 0 ] ; then
echo 'ERROR: MAKE failed.' >& 2; exit 2
fi
cd ..
echo ''
echo 'BUILD COMPLETE.'
echo ''
echo 'To launch MegaGlest from the current directory, use:'
2014-01-22 08:21:56 +01:00
echo ' ./megaglest'
2016-08-09 21:20:57 +02:00
#echo 'Or change into mk/linux and run it from there:'
#echo ' ./megaglest --ini-path=./ --data-path=./'
2011-10-18 14:36:44 +02:00
fi