==SCons==

* These changes bring cross-compiling Blender for Windows on Linux one step
  closer to reality. The 'biggest' change is in makesdna SConscript to make
  sure a linux native makesdna is built, that can be run, too. Next to that
  proper checks for env['OURPLATFORM']=='linuxcross' are added in various
  places.

  Switch change in pluginapi.c was necessary, and AFAIK it should work like
  that also on WIN32, if not, slap me.

  Note: everything *compiles* now nicely, it is just that the final *linking*
  doesn't work (yet). Anyone who fixes this will be the
  hero of cross-compilers :)
This commit is contained in:
Nathan Letwory 2006-03-13 11:42:49 +00:00
parent 34a5739a8a
commit 36a4af22c3
5 changed files with 90 additions and 89 deletions

@ -1,131 +1,124 @@
LCGDIR = '../lib/linux2' LCGDIR = '#../lib/windows'
BF_PYTHON = '/usr' BF_PYTHON = LCGDIR + '/python'
BF_PYTHON_VERSION = '2.4' BF_PYTHON_VERSION = '2.4'
BF_PYTHON_INC = BF_PYTHON + '/include/python' + BF_PYTHON_VERSION BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
BF_PYTHON_BINARY = BF_PYTHON+'/bin/python'+BF_PYTHON_VERSION BF_PYTHON_BINARY = 'python'
BF_PYTHON_LIB = 'python' + BF_PYTHON_VERSION #BF_PYTHON+'/lib/python'+BF_PYTHON_VERSION+'/config/libpython'+BF_PYTHON_VERSION+'.a' BF_PYTHON_LIB = 'python24'
BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
WITH_BF_OPENAL = 'true' WITH_BF_OPENAL = 'true'
BF_OPENAL = '/usr' BF_OPENAL = LCGDIR + '/openal'
BF_OPENAL_INC = BF_OPENAL+'/include' BF_OPENAL_INC = '${BF_OPENAL}/include'
BF_OPENAL_LIB = 'openal' BF_OPENAL_LIB = 'openal_static'
BF_OPENAL_LIBPATH = '${BF_OPENAL}/lib'
WITH_BF_SDL = 'true' WITH_BF_SDL = 'true'
BF_SDL = '/usr' #$(shell sdl-config --prefix) BF_SDL = LCGDIR + '/sdl'
BF_SDL_INC = BF_SDL + '/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags) BF_SDL_INC = '${BF_SDL}/include'
BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer BF_SDL_LIB = 'SDL'
BF_SDL_LIBPATH = '${BF_SDL}/lib'
BF_PTHREADS = LCGDIR + '/pthreads'
BF_PTHREADS_INC = '${BF_PTHREADS}/include'
BF_PTHREADS_LIB = 'pthreadGC2'
BF_PTHREADS_LIBPATH = '${BF_PTHREADS}/lib'
WITH_BF_FMOD = 'false' WITH_BF_FMOD = 'false'
BF_FMOD = LCGDIR + '/fmod' BF_FMOD = LCGDIR + '/fmod'
WITH_BF_JPEG = 'true'
BF_JPEG = '/usr'
BF_JPEG_INC = BF_JPEG + '/include'
BF_JPEG_LIB = 'jpeg'
WITH_BF_OPENEXR = 'true' WITH_BF_OPENEXR = 'true'
BF_OPENEXR = '/usr' BF_OPENEXR = LCGDIR + '/gcc/openexr'
BF_OPENEXR_INC = BF_OPENEXR + '/include/OpenEXR' BF_OPENEXR_INC = '${BF_OPENEXR}/include ${BF_OPENEXR}/include/OpenEXR'
BF_OPENEXR_LIB = ' Iex Half IlmImf Imath ' BF_OPENEXR_LIB = ' Half IlmImf Iex '
BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
WITH_BF_JPEG = 'true'
BF_JPEG = LCGDIR + '/jpeg'
BF_JPEG_INC = '${BF_JPEG}/include'
BF_JPEG_LIB = 'jpeg'
BF_JPEG_LIBPATH = '${BF_JPEG}/lib'
WITH_BF_PNG = 'true' WITH_BF_PNG = 'true'
BF_PNG = '/usr' BF_PNG = LCGDIR + '/png'
BF_PNG_INC = BF_PNG + '/include' BF_PNG_INC = '${BF_PNG}/include'
BF_PNG_LIB = 'png' BF_PNG_LIB = 'png'
BF_PNG_LIBPATH = '${BF_PNG}/lib'
BF_TIFF = '/usr' BF_TIFF = LCGDIR + '/tiff'
BF_TIFF_INC = BF_TIFF + '/include' BF_TIFF_INC = '${BF_TIFF}/include'
WITH_BF_ZLIB = 'true' WITH_BF_ZLIB = 'true'
BF_ZLIB = '/usr' BF_ZLIB = LCGDIR + '/zlib'
BF_ZLIB_INC = BF_ZLIB + '/include' BF_ZLIB_INC = '${BF_ZLIB}/include'
BF_ZLIB_LIB = 'z' #BF_ZLIB_LIB = 'z'
BF_ZLIB_LIBPATH = '${BF_ZLIB}/lib'
WITH_BF_INTERNATIONAL = 'true' WITH_BF_INTERNATIONAL = 'true'
BF_GETTEXT = '/usr' BF_GETTEXT = LCGDIR + '/gettext'
BF_GETTEXT_INC = BF_GETTEXT + '/include' BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = BF_GETTEXT + '/lib/libintl.a' BF_GETTEXT_LIB = 'gnu_gettext'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
WITH_BF_FTGL = 'true' WITH_BF_FTGL = 'true'
BF_FTGL = '#extern/bFTGL' BF_FTGL = LCGDIR + '/ftgl'
BF_FTGL_INC = BF_FTGL + '/include' BF_FTGL_INC = '${BF_FTGL}/include'
BF_FTGL_LIB = 'extern_ftgl' BF_FTGL_LIB = 'extern_ftgl'
WITH_BF_GAMEENGINE = 'false'
WITH_BF_ODE = 'false' WITH_BF_ODE = 'true'
BF_ODE = LCGDIR + '/ode' BF_ODE = LCGDIR + '/ode'
BF_ODE_INC = BF_ODE + '/include' BF_ODE_INC = BF_ODE + '/include'
BF_ODE_LIB = BF_ODE + '/lib/libode.a' BF_ODE_LIB = BF_ODE + '/lib/libode.a'
WITH_BF_BULLET = 'true' WITH_BF_BULLET = 'true'
BF_BULLET = '#extern/bullet' BF_BULLET = '#extern/bullet'
BF_BULLET_INC = BF_BULLET + '/LinearMath ' + BF_BULLET + '/BulletDynamics ' + BF_BULLET + '/Bullet' BF_BULLET_INC = '${BF_BULLET}/LinearMath ${BF_BULLET}/BulletDynamics ${BF_BULLET}/Bullet'
BF_BULLET_LIB = 'extern_bullet' BF_BULLET_LIB = 'extern_bullet'
BF_SOLID = '#extern/solid' BF_SOLID = '#extern/solid'
BF_SOLID_INC = BF_SOLID + '/include ' + BF_SOLID BF_SOLID_INC = '${BF_SOLID}'
BF_SOLID_LIB = 'extern_solid' BF_SOLID_LIB = 'extern_solid'
#WITH_BF_NSPR = 'true'
#BF_NSPR = $(LCGDIR)/nspr
#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
#BF_NSPR_LIB =
# Uncomment the following line to use Mozilla inplace of netscape
#CPPFLAGS += -DMOZ_NOT_NET
# Location of MOZILLA/Netscape header files...
#BF_MOZILLA = $(LCGDIR)/mozilla
#BF_MOZILLA_INC = -I$(BF_MOZILLA)/include/mozilla/nspr -I$(BF_MOZILLA)/include/mozilla -I$(BF_MOZILLA)/include/mozilla/xpcom -I$(BF_MOZILLA)/include/mozilla/idl
#BF_MOZILLA_LIB =
# Will fall back to look in BF_MOZILLA_INC/nspr and BF_MOZILLA_LIB
# if this is not set.
#
# Be paranoid regarding library creation (do not update archives)
#BF_PARANOID = 'true'
# enable freetype2 support for text objects # enable freetype2 support for text objects
BF_FREETYPE = '/usr' BF_FREETYPE = LCGDIR + '/gcc/freetype'
BF_FREETYPE_INC = BF_FREETYPE + '/include ' + BF_FREETYPE + '/include/freetype2' BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
BF_FREETYPE_LIB = 'freetype' BF_FREETYPE_LIB = 'freetype'
BF_FREETYPE_LIBPATH = '${BF_FREETYPE}/lib'
WITH_BF_QUICKTIME = 'false' # -DWITH_QUICKTIME WITH_BF_QUICKTIME = 'false' # -DWITH_QUICKTIME
BF_QUICKTIME = '/usr/local' BF_QUICKTIME = '/usr/local'
BF_QUICKTIME_INC = BF_QUICKTIME + '/include' BF_QUICKTIME_INC = '${BF_QUICKTIME}/include'
# Mesa Libs should go here if your using them as well.... # Mesa Libs should go here if your using them as well....
WITH_BF_STATICOPENGL = 'true' WITH_BF_STATICOPENGL = 'false'
BF_OPENGL = '/usr/X11R6' BF_OPENGL = 'C:\\MingW'
BF_OPENGL_INC = BF_OPENGL + '/include' BF_OPENGL_INC = '${BF_OPENGL}/include'
BF_OPENGL_LIB = 'GL GLU Xmu Xext X11 Xi' BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'
BF_OPENGL_LIB_STATIC = BF_OPENGL + '/lib/libGL.a ' + BF_OPENGL + '/lib/libGLU.a ' + BF_OPENGL + '/lib/libXmu.a ' + BF_OPENGL + '/lib/libXext.a ' + BF_OPENGL + '/lib/libX11.a ' + BF_OPENGL + '/lib/libXi.a' BF_OPENGL_LIB = 'opengl32 glu32'
## BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a',
##CC = gcc '${BF_OPENGL}/lib/libXmu.a', '${BF_OPENGL}/lib/libXext.a',
##CCC = g++ '${BF_OPENGL}/lib/libX11.a', '${BF_OPENGL}/lib/libXi.a' ]
##ifeq ($CPU),alpha)
## CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee
CFLAGS = '-pipe -funsigned-char -fno-strict-aliasing' CC = 'i586-mingw32msvc-gcc'
CXX = 'i586-mingw32msvc-g++'
CPPFLAGS = '-DXP_UNIX' CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ]
CCFLAGS = '-pipe -funsigned-char -fno-strict-aliasing'
REL_CFLAGS = '-O2'
REL_CCFLAGS = '-O2'
##BF_DEPEND = 'true'
##
##AR = ar
##ARFLAGS = ruv
##ARFLAGSQUIET = ru
##
C_WARN = '-Wall -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wredundant-decls'
CC_WARN = '-Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wredundant-decls -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wsign-promo -Wsynth' CPPFLAGS = [ '-DXP_UNIX', '-DWIN32', '-DFREE_WINDOWS' ]
CXXFLAGS = ['-pipe', '-mwindows', '-funsigned-char', '-fno-strict-aliasing' ]
REL_CFLAGS = [ '-O2' ]
REL_CCFLAGS = [ '-O2' ]
C_WARN = [ '-Wall' , '-Wno-char-subscripts' ]
##FIX_STUBS_WARNINGS = -Wno-unused CC_WARN = [ '-Wall' ]
LLIBS = 'util c m dl pthread stdc++'
##LOPTS = --dynamic LLIBS = [ '-ldxguid', '-lgdi32', '-lmsvcrt', '-lwinmm', '-lmingw32', '-lm', '-lws2_32', '-lz'] #'-lutil', '-lc', '-lm', '-ldl', '-lpthread' ]
##DYNLDFLAGS = -shared $(LDFLAGS)
BF_DEBUG = 'false'
BF_DEBUG_FLAGS= ''
BF_BUILDDIR = '../build/linuxcross' BF_BUILDDIR = '../build/linuxcross'
BF_INSTALLDIR='../install/linuxcross' BF_INSTALLDIR='../install/linuxcross'

@ -14,7 +14,7 @@ if window_system == 'linux2':
for f in pf: for f in pf:
sources.remove('intern' + os.sep + f + 'Win32.cpp') sources.remove('intern' + os.sep + f + 'Win32.cpp')
sources.remove('intern' + os.sep + f + 'Carbon.cpp') sources.remove('intern' + os.sep + f + 'Carbon.cpp')
elif window_system in ('win32-vc', 'win32-mingw', 'cygwin'): elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross'):
for f in pf: for f in pf:
sources.remove('intern' + os.sep + f + 'X11.cpp') sources.remove('intern' + os.sep + f + 'X11.cpp')
sources.remove('intern' + os.sep + f + 'Carbon.cpp') sources.remove('intern' + os.sep + f + 'Carbon.cpp')

@ -42,7 +42,7 @@
*/ */
#ifdef WIN32 #ifdef WIN32
#include "blenpluginapi\util.h" #include "blenpluginapi/util.h"
#else #else
#include "blenpluginapi/util.h" #include "blenpluginapi/util.h"
#endif #endif

@ -7,7 +7,7 @@ cflags = ''
defines = [] defines = []
root_build_dir=env['BF_BUILDDIR'] root_build_dir=env['BF_BUILDDIR']
source_files = ['makesdna.c'] source_files = ['makesdna.c', '#intern/guardedalloc/intern/mallocn.c']
makesdna_tool = env.Copy() makesdna_tool = env.Copy()
dna = env.Copy() dna = env.Copy()
@ -16,16 +16,24 @@ makesdna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesdna/\\"" '
makesdna_tool.Append (CPPPATH = ['#/intern/guardedalloc', makesdna_tool.Append (CPPPATH = ['#/intern/guardedalloc',
'../../makesdna']) '../../makesdna'])
if env['OURPLATFORM'] == 'linuxcross':
makesdna_tool.Replace(CC='gcc')
makesdna_tool.Replace(AR='ar')
makesdna_tool.Replace(LINK='gcc')
if sys.platform != 'cygwin': if sys.platform != 'cygwin':
makesdna_tool.Append (CCFLAGS = cflags) makesdna_tool.Append (CCFLAGS = cflags)
makesdna_tool.Append (CPPDEFINES = defines) makesdna_tool.Append (CPPDEFINES = defines)
makesdna_tool.Append (LIBPATH = '#'+root_build_dir+'/lib') makesdna_tool.Append (LIBPATH = '#'+root_build_dir+'/lib')
makesdna_tool.Append (LIBS = 'bf_guardedalloc')
makesdna_tool.Program (target = '#'+root_build_dir+os.sep+'makesdna', source = source_files) makesdna_tool.Program (target = '#'+root_build_dir+os.sep+'makesdna', source = source_files)
dna_dict = dna.Dictionary() dna_dict = dna.Dictionary()
makesdna_name = root_build_dir+'/makesdna' + dna_dict['PROGSUFFIX'] makesdna_name = root_build_dir+'/makesdna' + dna_dict['PROGSUFFIX']
dna.Depends ('dna.c', '#'+makesdna_name) dna.Depends ('dna.c', '#'+makesdna_name)
if env['OURPLATFORM'] != 'linuxcross':
dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET") dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
else:
dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
obj = 'intern/dna.c' obj = 'intern/dna.c'
Return ('obj') Return ('obj')

@ -129,7 +129,7 @@ def setup_staticlibs(lenv):
if lenv['WITH_BF_STATICOPENGL']: if lenv['WITH_BF_STATICOPENGL']:
statlibs += Split(lenv['BF_OPENGL_LIB_STATIC']) statlibs += Split(lenv['BF_OPENGL_LIB_STATIC'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw'): if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'):
libincs += Split(lenv['BF_PTHREADS_LIBPATH']) libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
return statlibs, libincs return statlibs, libincs
@ -155,7 +155,7 @@ def setup_syslibs(lenv):
syslibs += Split(lenv['BF_SDL_LIB']) syslibs += Split(lenv['BF_SDL_LIB'])
if not lenv['WITH_BF_STATICOPENGL']: if not lenv['WITH_BF_STATICOPENGL']:
syslibs += Split(lenv['BF_OPENGL_LIB']) syslibs += Split(lenv['BF_OPENGL_LIB'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw'): if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross'):
syslibs += Split(lenv['BF_PTHREADS_LIB']) syslibs += Split(lenv['BF_PTHREADS_LIB'])
syslibs += Split(lenv['LLIBS']) syslibs += Split(lenv['LLIBS'])
@ -327,7 +327,7 @@ class BlenderEnvironment(SConsEnvironment):
if not self or not libname or not source: if not self or not libname or not source:
print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC
Exit() Exit()
if self['OURPLATFORM'] not in ('win32-vc','win32-mingw'): if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross'):
print bc.FAIL+'BlenderRes is for windows only!'+bc.END print bc.FAIL+'BlenderRes is for windows only!'+bc.END
Exit() Exit()