Commit 8b232816 authored by Oliver Bock's avatar Oliver Bock
Browse files

Added MinGW based cross-compile build for Win32

* Includes a couple of dedicated patches
* Uses BOINC's MinGW specific build script (doesn't require configure)
parent 4ace8c02
......@@ -27,6 +27,8 @@
### globals ###############################################################
ROOT=`pwd`
PATH_ORG="$PATH"
PATH_MINGW="$PATH"
LOGFILE=$ROOT/build.log
TARGET=0
......@@ -126,8 +128,8 @@ prepare_generic()
svn checkout http://svn.libsdl.org/branches/SDL-1.2 . >> $LOGFILE 2>&1 || failure
fi
# cd $ROOT/3rdparty || failure
# echo "Retrieving SDL (this may take a while)..." | tee -a $LOGFILE
# cd $ROOT/3rdparty || failure
# wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz >> $LOGFILE 2>&1 || failure
# tar -xzf SDL-1.2.14.tar.gz >> $LOGFILE 2>&1 || failure
# rm SDL-1.2.14.tar.gz >> $LOGFILE 2>&1 || failure
......@@ -135,8 +137,8 @@ prepare_generic()
# rm -rf sdl >> $LOGFILE 2>&1 || failure
# mv SDL-1.2.14 sdl >> $LOGFILE 2>&1 || failure
cd $ROOT/3rdparty || failure
echo "Retrieving Freetype2 (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty || failure
wget http://mesh.dl.sourceforge.net/sourceforge/freetype/freetype-2.3.5.tar.bz2 >> $LOGFILE 2>&1 || failure
tar -xjf freetype-2.3.5.tar.bz2 >> $LOGFILE 2>&1 || failure
rm freetype-2.3.5.tar.bz2 >> $LOGFILE 2>&1 || failure
......@@ -187,8 +189,8 @@ prepare_win32()
cvs -z3 -d:pserver:anonymous@mingw.cvs.sourceforge.net:/cvsroot/mingw checkout -P xscripts >> $LOGFILE 2>&1 || failure
fi
cd $ROOT/3rdparty/mingw/xscripts || failure
echo "Preparing MinGW build script..." | tee -a $LOGFILE
cd $ROOT/3rdparty/mingw/xscripts || failure
# note: svn has no force/overwrite switch. the file might not be updated when patched
patch x86-mingw32-build.sh.conf < $ROOT/patches/x86-mingw32-build.sh.conf.patch >> $LOGFILE || failure
chmod +x x86-mingw32-build.sh >> $LOGFILE || failure
......@@ -199,8 +201,8 @@ prepare_win32()
build_generic()
{
cd $ROOT/3rdparty/sdl || failure
echo "Building SDL (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/sdl || failure
./autogen.sh >> $LOGFILE 2>&1 || failure
cd $ROOT/build/sdl || failure
$ROOT/3rdparty/sdl/configure --prefix=$ROOT/install --enable-shared=no --enable-static=yes >> $LOGFILE 2>&1 || failure
......@@ -208,8 +210,8 @@ build_generic()
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed SDL!" | tee -a $LOGFILE
cd $ROOT/3rdparty/freetype2 || failure
echo "Building Freetype2 (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/freetype2 || failure
chmod +x autogen.sh >> $LOGFILE 2>&1 || failure
chmod +x configure >> $LOGFILE 2>&1 || failure
./autogen.sh >> $LOGFILE 2>&1 || failure
......@@ -220,8 +222,8 @@ build_generic()
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed Freetype2!" | tee -a $LOGFILE
cd $ROOT/3rdparty/oglft || failure
echo "Patching OGLFT..." | tee -a $LOGFILE
cd $ROOT/3rdparty/oglft || failure
# note: svn has no force/overwrite switch. patched files might not be updated
# patch: use fixed settings for freetype, deactivate FindFreetype
FREETYPE2_INCLUDE_DIR="$ROOT/install/include"
......@@ -240,8 +242,8 @@ build_generic()
cp liboglft/liboglft.a $ROOT/install/lib >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed OGLFT!" | tee -a $LOGFILE
cd $ROOT/3rdparty/boinc || failure
echo "Building BOINC (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/boinc || failure
./_autosetup >> $LOGFILE 2>&1 || failure
cd $ROOT/build/boinc || failure
$ROOT/3rdparty/boinc/configure --prefix=$ROOT/install --enable-shared=no --enable-static=yes --disable-server --disable-client >> $LOGFILE 2>&1 || failure
......@@ -253,9 +255,122 @@ build_generic()
}
build_generic_win32()
{
# general config
PREFIX=$ROOT/install
TARGET_HOST=i586-pc-mingw32
BUILD_HOST=i386-linux
PATH_MINGW="$PREFIX/bin:$PREFIX/$TARGET_HOST/bin:$PATH"
PATH="$PATH_MINGW"
export PATH
echo "Building SDL (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/sdl || failure
./autogen.sh >> $LOGFILE 2>&1 || failure
if [ -f "$PREFIX/$TARGET_HOST/bin/$TARGET_HOST-sdl-config" ]; then
SDL_CONFIG="$PREFIX/$TARGET_HOST/bin/$TARGET_HOST-sdl-config"
export SDL_CONFIG
echo "Cross-compile SDL_CONFIG: $SDL_CONFIG" >> $LOGFILE
fi
cd $ROOT/build/sdl || failure
$ROOT/3rdparty/sdl/configure --host=$TARGET_HOST --build=$BUILD_HOST --prefix=$PREFIX --enable-shared=no --enable-static=yes >> $LOGFILE 2>&1 || failure
make >> $LOGFILE 2>&1 || failure
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed SDL!" | tee -a $LOGFILE
echo "Patching Freetype2..." | tee -a $LOGFILE
cd $ROOT/3rdparty/freetype2/builds || failure
# patch: deactivating invocation of apinames (would run win32 binary on linux host)
patch < $ROOT/patches/freetype2.exports.mk.patch >> $LOGFILE 2>&1 || failure
echo "Building Freetype2 (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/freetype2 || failure
chmod +x autogen.sh >> $LOGFILE 2>&1 || failure
chmod +x configure >> $LOGFILE 2>&1 || failure
./autogen.sh >> $LOGFILE 2>&1 || failure
if [ -f "$PREFIX/$TARGET_HOST/bin/$TARGET_HOST-freetype-config" ]; then
FT_CONFIG="$PREFIX/$TARGET_HOST/bin/$TARGET_HOST-freetype-config"
export FT_CONFIG
echo "Cross-compile FT_CONFIG: $FT_CONFIG" >> $LOGFILE
fi
cd $ROOT/build/freetype2 || failure
# note: freetype (or sdl?) probably doesn't need *no* configure when static -> ansi build, see readme!
$ROOT/3rdparty/freetype2/configure --host=$TARGET_HOST --build=$BUILD_HOST --prefix=$PREFIX --enable-shared=no --enable-static=yes >> $LOGFILE 2>&1 || failure
make >> $LOGFILE 2>&1 || failure
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed Freetype2!" | tee -a $LOGFILE
echo "Patching OGLFT..." | tee -a $LOGFILE
cd $ROOT/3rdparty/oglft || failure
# note: svn has no force/overwrite switch. patched files might not be updated
# patch: use fixed settings for freetype, deactivate FindFreetype
FREETYPE2_INCLUDE_DIR="$ROOT/install/include"
FREETYPE2_LIBRARIES="$ROOT/install/lib/libfreetype.a"
patch CMakeLists.txt < $ROOT/patches/CMakeLists.txt.oglft.patch >> $LOGFILE 2>&1 || failure
# patch: build static lib instead of shared
cd $ROOT/3rdparty/oglft/liboglft || failure
patch CMakeLists.txt < $ROOT/patches/CMakeLists.txt.liboglft.patch >> $LOGFILE 2>&1 || failure
## patch: include windows.h for all WIN32 builds (not only MSVC) -> already submitted upstream!!!!
#patch OGLFT.h.cmake < $ROOT/patches/OGLFT.h.cmake.patch >> $LOGFILE 2>&1 || failure
cp $ROOT/patches/toolchain-linux-mingw.oglft.cmake $ROOT/build/oglft >> $LOGFILE 2>&1 || failure
export OGLFT_INSTALL=$ROOT/install
echo "Building OGLFT..." | tee -a $LOGFILE
cd $ROOT/build/oglft || failure
cmake -DCMAKE_TOOLCHAIN_FILE="toolchain-linux-mingw.oglft.cmake" -DFREETYPE2_INCLUDE_DIR="$FREETYPE2_INCLUDE_DIR" -DFREETYPE2_LIBRARIES="$FREETYPE2_LIBRARIES" $ROOT/3rdparty/oglft >> $LOGFILE 2>&1 || failure
make >> $LOGFILE 2>&1 || failure
mkdir -p $ROOT/install/include/oglft >> $LOGFILE 2>&1 || failure
cp OGLFT.h $ROOT/install/include/oglft >> $LOGFILE 2>&1 || failure
cp liboglft/liboglft.a $ROOT/install/lib >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed OGLFT!" | tee -a $LOGFILE
echo "Patching BOINC..." | tee -a $LOGFILE
cd $ROOT/3rdparty/boinc/lib || failure
# patch: fix a couple of BOINC vs. MinGW issues
patch boinc_win.h < $ROOT/patches/boinc.boinc_win.h.minggw.patch >> $LOGFILE 2>&1 || failure
patch stackwalker_win.cpp < $ROOT/patches/boinc.stackwalker_win.cpp.minggw.patch >> $LOGFILE 2>&1 || failure
patch filesys.C < $ROOT/patches/boinc.filesys.C.mingw.patch >> $LOGFILE 2>&1 || failure
# patch: add graphics2 and customize build path (see below)
echo "Building BOINC (this may take a while)..." | tee -a $LOGFILE
cd $ROOT/3rdparty/boinc || failure
./_autosetup >> $LOGFILE 2>&1 || failure
cd $ROOT/build/boinc || failure
$ROOT/3rdparty/boinc/configure --host=$TARGET_HOST --build=$BUILD_HOST --prefix=$ROOT/install --includedir=$ROOT/install/include --oldincludedir=$ROOT/install/include --enable-shared=no --enable-static=yes --disable-server --disable-client >> $LOGFILE 2>&1 || failure
# # make >> $LOGFILE 2>&1 || failure
cd $ROOT/build/boinc/api || failure
cp $ROOT/3rdparty/boinc/api/Makefile.mingw . >> $LOGFILE 2>&1 || failure
patch Makefile.mingw < $ROOT/patches/boinc.Makefile.mingw.patch >> $LOGFILE 2>&1 || failure
export BOINC_SRC=$ROOT/3rdparty/boinc || failure
cd $ROOT/build/boinc || failure
make -f api/Makefile.mingw >> $LOGFILE 2>&1 || failure
# make install >> $LOGFILE 2>&1 || failure
# cp $ROOT/build/boinc/config.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
# cp $ROOT/build/boinc/version.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/build/boinc/libboinc.a $ROOT/install/lib >> $LOGFILE 2>&1 || failure
mkdir -p $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/api/boinc_api.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/api/graphics2.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/app_ipc.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/boinc_win.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/common_defs.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/hostinfo.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/proxy_info.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/prefs.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/miofile.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/mfile.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/parse.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
cp $ROOT/3rdparty/boinc/lib/util.h $ROOT/install/include/BOINC >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed BOINC!" | tee -a $LOGFILE
}
build_mingw()
{
echo "Not yet implemented: build_mingw()"
TARGET_HOST=i586-pc-mingw32
echo "Building MinGW (this will take quite a while)..." | tee -a $LOGFILE
# note: the script's current config for unattended setup expects it to be run from three levels below root!
cd $ROOT/3rdparty/mingw/xscripts || failure
./x86-mingw32-build.sh --unattended $TARGET_HOST >> $LOGFILE 2>&1 || failure
return 0
}
......@@ -263,6 +378,9 @@ build_mingw()
build_starsphere()
{
# make sure ORC is always compiled for host platform (it's exexuted during starsphere build!)
export PATH=$PATH_ORG
echo "Building Starsphere [ORC]..." | tee -a $LOGFILE
export ORC_SRC=$ROOT/src/orc || failure
export ORC_INSTALL=$ROOT/install || failure
......@@ -272,11 +390,22 @@ build_starsphere()
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed Starsphere [ORC]!" | tee -a $LOGFILE
# set main include directory
if [ "$1" == "$TARGET_WIN32" ]; then
export PATH=$PATH_MINGW
else
export PATH=$PATH_ORG
fi
echo "Building Starsphere [Framework]..." | tee -a $LOGFILE
export FRAMEWORK_SRC=$ROOT/src/framework || failure
export FRAMEWORK_INSTALL=$ROOT/install || failure
cd $ROOT/build/framework || failure
cp $ROOT/src/framework/Makefile . >> $LOGFILE 2>&1 || failure
if [ "$1" == "$TARGET_WIN32" ]; then
cp -f $ROOT/src/framework/Makefile.mingw Makefile >> $LOGFILE 2>&1 || failure
else
cp -f $ROOT/src/framework/Makefile . >> $LOGFILE 2>&1 || failure
fi
make >> $LOGFILE 2>&1 || failure
make install >> $LOGFILE 2>&1 || failure
echo "Successfully built and installed Starsphere [Framework]!" | tee -a $LOGFILE
......@@ -286,10 +415,12 @@ build_starsphere()
export STARSPHERE_INSTALL=$ROOT/install || failure
cd $ROOT/build/starsphere || failure
cp $ROOT/src/starsphere/*.res . >> $LOGFILE 2>&1 || failure
if [ "$1" != "$TARGET_MAC" ]; then
cp $ROOT/src/starsphere/Makefile . >> $LOGFILE 2>&1 || failure
if [ "$1" == "$TARGET_MAC" ]; then
cp -f $ROOT/src/starsphere/Makefile.macos Makefile >> $LOGFILE 2>&1 || failure
elif [ "$1" == "$TARGET_WIN32" ]; then
cp -f $ROOT/src/starsphere/Makefile.mingw Makefile >> $LOGFILE 2>&1 || failure
else
cp $ROOT/src/starsphere/Makefile.macos Makefile >> $LOGFILE 2>&1 || failure
cp -f $ROOT/src/starsphere/Makefile . >> $LOGFILE 2>&1 || failure
fi
make >> $LOGFILE 2>&1 || failure
make install >> $LOGFILE 2>&1 || failure
......@@ -319,11 +450,10 @@ build_mac()
build_win32()
{
echo "Not yet implemented: build_win32()"
# build_mingw
# build_generic
# build_starsphere
prepare_win32 || failure
build_mingw || failure
build_generic_win32 || failure
build_starsphere $TARGET_WIN32
return 0
}
......
--- Makefile.mingw
+++ Makefile.mingw.new 2008-06-11 15:08:56.000000000 +0200
@@ -1,6 +1,6 @@
-BOINCDIR = ./boinc
+BOINCDIR = $(BOINC_SRC)
DEBUG = -D__DEBUG__ -g3
-OBJ = boinc_api.o util.o win_util.o app_ipc.o diagnostics.o diagnostics_win.o filesys.o hostinfo.o md5.o md5_file.o mem_usage.o mfile.o miofile.o parse.o prefs.o proxy_info.o str_util.o shmem.o stackwalker_win.o base64.o
+OBJ = graphics2.o graphics2_util.o boinc_api.o util.o win_util.o app_ipc.o diagnostics.o diagnostics_win.o filesys.o hostinfo.o md5.o md5_file.o mem_usage.o mfile.o miofile.o parse.o prefs.o proxy_info.o str_util.o shmem.o stackwalker_win.o base64.o
LINKOBJ = $(OBJ)
LDFLAGS = -lwinmm -march=i386
INCS = -I"$(BOINCDIR)" -I"$(BOINCDIR)/db" -I"$(BOINCDIR)" -I"$(BOINCDIR)/lib" -I"$(BOINCDIR)/api"
--- boinc_win.h
+++ boinc_win.h 2008-06-03 17:35:38.000000000 +0200
@@ -110,7 +110,7 @@
#include <commctrl.h>
#include <raserror.h>
-#include <dbghelp.h>
+#include <imagehlp.h>
#include <tlhelp32.h>
#include <io.h>
@@ -143,7 +143,7 @@
// C headers
#include <sys/stat.h>
#include <sys/types.h>
-#include <fcntl.h>
+// #include <fcntl.h>
#include <malloc.h>
#if !defined(__MINGW32__) && !defined(__CYGWIN32__)
@@ -238,9 +238,9 @@
#endif
void __cdecl _fpreset (void);
void __cdecl fpreset (void);
-#define SetClassLongPtr SetClassLong
-#define GCLP_HICON GCL_HICON
-#define GCLP_HICONSM GCL_HICONSM
+// #define SetClassLongPtr SetClassLong
+// #define GCLP_HICON GCL_HICON
+// #define GCLP_HICONSM GCL_HICONSM
#ifdef __cplusplus
}
#endif
--- filesys.C
+++ filesys.C.new 2008-06-11 15:38:25.000000000 +0200
@@ -21,10 +21,11 @@
#include "boinc_win.h"
#endif
+#include <fcntl.h>
+
#if !defined(_WIN32) || defined(__CYGWIN32__)
#include "config.h"
#include <cstdio>
-#include <fcntl.h>
#include <cerrno>
#include <sys/stat.h>
#include <sys/file.h>
--- stackwalker_win.cpp
+++ stackwalker_win.cpp 2008-06-03 17:37:38.000000000 +0200
@@ -353,7 +353,7 @@
}
_ftprintf(stderr, _T("(%s Symbols Loaded)") , szSymbolType);
_ftprintf(stderr, _T("\n"));
- _ftprintf(stderr, _T(" Linked PDB Filename : %s\n") , Module.CVData);
+// _ftprintf(stderr, _T(" Linked PDB Filename : %s\n") , Module.CVData);
if (bFileVersionSupported && bFileVersionRetrieved) {
_ftprintf(stderr, _T(" File Version : %s\n") , szFileVersion);
_ftprintf(stderr, _T(" Company Name : %s\n") , szCompanyName);
@@ -657,7 +657,7 @@
// #################################################################################
// Here the Stackwalk-Part begins.
// Some of the code is from an example from a book
-// But I couldnt find the reference anymore... sorry...
+// But I couldn�t find the reference anymore... sorry...
// If someone knowns, please let me know...
// #################################################################################
// #################################################################################
--- exports.mk
+++ exports.mk.new 2008-06-02 12:24:03.000000000 +0200
@@ -61,7 +61,7 @@
# debuggers, to the EXPORTS_LIST.
#
$(EXPORTS_LIST): $(APINAMES_EXE) $(PUBLIC_HEADERS)
- $(subst /,$(SEP),$(APINAMES_EXE)) -o$@ $(APINAMES_OPTIONS) $(PUBLIC_HEADERS)
+# $(subst /,$(SEP),$(APINAMES_EXE)) -o$@ $(APINAMES_OPTIONS) $(PUBLIC_HEADERS)
@echo TT_New_Context >> $(EXPORTS_LIST)
@echo TT_RunIns >> $(EXPORTS_LIST)
# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i586-pc-mingw32-gcc)
SET(CMAKE_CXX_COMPILER i586-pc-mingw32-g++)
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH ${OGLFT_INSTALL})
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
###########################################################################
# Copyright (C) 2008 by Oliver Bock #
# oliver.bock[AT]aei.mpg.de #
# #
# This file is part of Einstein@Home. #
# #
# Einstein@Home 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, version 2 of the License. #
# #
# Einstein@Home 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 Einstein@Home. If not, see <http://www.gnu.org/licenses/>. #
# #
###########################################################################
# path settings
FRAMEWORK_SRC?=$(PWD)
FRAMEWORK_INSTALL?=$(PWD)
# config values
CXX?=g++
# variables
CPPFLAGS = $(shell $(FRAMEWORK_INSTALL)/bin/sdl-config --cflags)
CPPFLAGS += $(shell $(FRAMEWORK_INSTALL)/bin/freetype-config --cflags)
CPPFLAGS += -I$(FRAMEWORK_INSTALL)/include/BOINC -I$(FRAMEWORK_INSTALL)/include
DEPS = Makefile
OBJS = AbstractGraphicsEngine.o GraphicsEngineFactory.o WindowManager.o Resource.o ResourceFactory.o BOINCClientAdapter.o
DEBUGFLAGSCPP = -pg -ggdb -O0
# TODO: GraphicsEngineFactory obviously depends on the actual implementations (here starsphere)! need to change the structure! what about plugins?
CPPFLAGS += -I$(FRAMEWORK_SRC) -I$(FRAMEWORK_SRC)/../starsphere
# primary role based tagets
default: release
debug: libframework.a
memcheck: clean debug
callgrind: clean debug
release: clean libframework.a
# target specific options
debug: CPPFLAGS += $(DEBUGFLAGSCPP)
release: CPPFLAGS += -DNDEBUG -O3 -Wall -Wno-switch-enum
release: LDFLAGS += -s
# file based targets
libframework.a: $(OBJS)
ar rcs libframework.a $(OBJS)
AbstractGraphicsEngine.o: $(DEPS) $(FRAMEWORK_SRC)/AbstractGraphicsEngine.cpp $(FRAMEWORK_SRC)/AbstractGraphicsEngine.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/AbstractGraphicsEngine.cpp
GraphicsEngineFactory.o: $(DEPS) $(FRAMEWORK_SRC)/GraphicsEngineFactory.cpp $(FRAMEWORK_SRC)/GraphicsEngineFactory.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/GraphicsEngineFactory.cpp
WindowManager.o: $(DEPS) $(FRAMEWORK_SRC)/WindowManager.cpp $(FRAMEWORK_SRC)/WindowManager.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/WindowManager.cpp
BOINCClientAdapter.o: $(DEPS) $(FRAMEWORK_SRC)/BOINCClientAdapter.cpp $(FRAMEWORK_SRC)/BOINCClientAdapter.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/BOINCClientAdapter.cpp
ResourceFactory.o: $(DEPS) $(FRAMEWORK_SRC)/ResourceFactory.cpp $(FRAMEWORK_SRC)/ResourceFactory.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/ResourceFactory.cpp
Resource.o: $(DEPS) $(FRAMEWORK_SRC)/Resource.cpp $(FRAMEWORK_SRC)/Resource.h
$(CXX) -g ${CPPFLAGS} -c $(FRAMEWORK_SRC)/Resource.cpp
# tools
install:
cp libframework.a $(ORC_INSTALL)/lib
clean:
rm -f $(OBJS) libframework.a
###########################################################################
# Copyright (C) 2008 by Oliver Bock #
# oliver.bock[AT]aei.mpg.de #
# #
# This file is part of Einstein@Home. #
# #
# Einstein@Home 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, version 2 of the License. #
# #
# Einstein@Home 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 Einstein@Home. If not, see <http://www.gnu.org/licenses/>. #
# #
###########################################################################
# path settings
STARSPHERE_SRC?=$(PWD)
STARSPHERE_INSTALL?=$(PWD)
# config values
CXX ?= g++
# variables
LIBS = -Wl,-Bstatic -lframework -loglft -L$(STARSPHERE_INSTALL)/lib
LIBS += $(shell $(STARSPHERE_INSTALL)/bin/freetype-config --libs)
LIBS += -lboinc -L/usr/lib
LIBS += -Wl,-Bdynamic $(shell $(STARSPHERE_INSTALL)/bin/sdl-config --static-libs) -lopengl32 -lglu32
CPPFLAGS = -I$(STARSPHERE_INSTALL)/include
CPPFLAGS += $(shell $(STARSPHERE_INSTALL)/bin/sdl-config --cflags)
CPPFLAGS += $(shell $(STARSPHERE_INSTALL)/bin/freetype-config --cflags)
CPPFLAGS += -I$(STARSPHERE_INSTALL)/include/BOINC
DEPS = Makefile
OBJS = Starsphere.o StarsphereS5R3.o EinsteinS5R3Adapter.o starlist.o snr_list.o pulsar_list.o $(RESOURCESPEC).o
DEBUGFLAGSCPP = -pg -ggdb -O0
RESOURCESPEC = resources
# TODO: GraphicsEngineFactory obviously depends on the actual implementations (here starsphere)! need to change the structure! what about plugins?
CPPFLAGS += -I$(STARSPHERE_SRC) -I$(STARSPHERE_SRC)/../framework
# primary role based tagets
default: release
debug: starsphere
memcheck: clean debug starsphere
callgrind: clean debug starsphere
release: clean starsphere
# target specific options
debug: CPPFLAGS += $(DEBUGFLAGSCPP)
memcheck: CPPFLAGS += $(DEBUGFLAGSCPP) -DDEBUG_VALGRIND
callgrind: CPPFLAGS += $(DEBUGFLAGSCPP) -DDEBUG_VALGRIND
release: CPPFLAGS += -DNDEBUG -O3 -Wall -Wno-switch-enum
release: LDFLAGS += -s
# file based targets
starsphere: $(DEPS) $(STARSPHERE_SRC)/main.cpp $(OBJS)
$(CXX) -g $(CPPFLAGS) $(LDFLAGS) $(STARSPHERE_SRC)/main.cpp -o starsphere $(OBJS) $(LIBS)
Starsphere.o: $(DEPS) $(STARSPHERE_SRC)/Starsphere.cpp $(STARSPHERE_SRC)/Starsphere.h
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/Starsphere.cpp
StarsphereS5R3.o: $(DEPS) $(STARSPHERE_SRC)/StarsphereS5R3.cpp $(STARSPHERE_SRC)/StarsphereS5R3.h
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/StarsphereS5R3.cpp
EinsteinS5R3Adapter.o: Makefile $(STARSPHERE_SRC)/EinsteinS5R3Adapter.cpp $(STARSPHERE_SRC)/EinsteinS5R3Adapter.h
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/EinsteinS5R3Adapter.cpp
starlist.o: $(DEPS) $(STARSPHERE_SRC)/starlist.C
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/starlist.C
snr_list.o: $(DEPS) $(STARSPHERE_SRC)/snr_list.C
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/snr_list.C
pulsar_list.o: $(DEPS) $(STARSPHERE_SRC)/pulsar_list.C
$(CXX) -g $(CPPFLAGS) -c $(STARSPHERE_SRC)/pulsar_list.C
# resource compiler
$(RESOURCESPEC).o: $(STARSPHERE_SRC)/$(RESOURCESPEC).orc
$(STARSPHERE_INSTALL)/bin/orc $(STARSPHERE_SRC)/$(RESOURCESPEC).orc $(RESOURCESPEC).cpp
$(CXX) -g $(CPPFLAGS) -c $(RESOURCESPEC).cpp -o $(RESOURCESPEC).o
# tools
memcheck:
valgrind --tool=memcheck --track-fds=yes --time-stamp=yes --log-file=$(PWD)/memcheck.out.%p --leak-check=full $(PWD)/starsphere
callgrind:
valgrind --tool=callgrind --track-fds=yes --time-stamp=yes $(PWD)/starsphere
install:
cp starsphere $(STARSPHERE_INSTALL)/bin
clean:
rm -f $(RESOURCESPEC).cpp $(OBJS) starsphere
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment