==SCons==
authorNathan Letwory <nathan@letworyinteractive.com>
Mon, 13 Mar 2006 11:42:49 +0000 (11:42 +0000)
committerNathan Letwory <nathan@letworyinteractive.com>
Mon, 13 Mar 2006 11:42:49 +0000 (11:42 +0000)
* 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 :)

config/linuxcross-config.py
intern/ghost/SConscript
source/blender/blenpluginapi/intern/pluginapi.c
source/blender/makesdna/intern/SConscript
tools/Blender.py

index 28d80f8d4b3ac8708b67e17290ed574ba992d0a1..247d46309264fbcb636c8820af6b51e06589729a 100644 (file)
-LCGDIR = '../lib/linux2'
-BF_PYTHON = '/usr'
+LCGDIR = '#../lib/windows'
+BF_PYTHON = LCGDIR + '/python'
 BF_PYTHON_VERSION = '2.4'
-BF_PYTHON_INC = BF_PYTHON + '/include/python' + BF_PYTHON_VERSION
-BF_PYTHON_BINARY = BF_PYTHON+'/bin/python'+BF_PYTHON_VERSION
-BF_PYTHON_LIB = 'python' + BF_PYTHON_VERSION #BF_PYTHON+'/lib/python'+BF_PYTHON_VERSION+'/config/libpython'+BF_PYTHON_VERSION+'.a'
+BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
+BF_PYTHON_BINARY = 'python'
+BF_PYTHON_LIB = 'python24'
+BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
 
 WITH_BF_OPENAL = 'true'
-BF_OPENAL = '/usr'
-BF_OPENAL_INC = BF_OPENAL+'/include'
-BF_OPENAL_LIB = 'openal'
+BF_OPENAL = LCGDIR + '/openal'
+BF_OPENAL_INC = '${BF_OPENAL}/include'
+BF_OPENAL_LIB = 'openal_static'
+BF_OPENAL_LIBPATH = '${BF_OPENAL}/lib'
 
 WITH_BF_SDL = 'true'
-BF_SDL = '/usr' #$(shell sdl-config --prefix)
-BF_SDL_INC = BF_SDL + '/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
-BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+BF_SDL = LCGDIR + '/sdl'
+BF_SDL_INC = '${BF_SDL}/include'
+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'
 BF_FMOD = LCGDIR + '/fmod'
 
+WITH_BF_OPENEXR = 'true'
+BF_OPENEXR = LCGDIR + '/gcc/openexr'
+BF_OPENEXR_INC = '${BF_OPENEXR}/include ${BF_OPENEXR}/include/OpenEXR'
+BF_OPENEXR_LIB = ' Half IlmImf Iex '
+BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
+
 WITH_BF_JPEG = 'true'
-BF_JPEG = '/usr'
-BF_JPEG_INC = BF_JPEG + '/include'
+BF_JPEG = LCGDIR + '/jpeg'
+BF_JPEG_INC = '${BF_JPEG}/include'
 BF_JPEG_LIB = 'jpeg'
-
-WITH_BF_OPENEXR = 'true'
-BF_OPENEXR = '/usr'
-BF_OPENEXR_INC = BF_OPENEXR + '/include/OpenEXR'
-BF_OPENEXR_LIB = ' Iex Half IlmImf Imath '
+BF_JPEG_LIBPATH = '${BF_JPEG}/lib'
 
 WITH_BF_PNG = 'true'
-BF_PNG = '/usr'
-BF_PNG_INC = BF_PNG + '/include'
+BF_PNG = LCGDIR + '/png'
+BF_PNG_INC = '${BF_PNG}/include'
 BF_PNG_LIB = 'png'
+BF_PNG_LIBPATH = '${BF_PNG}/lib'
 
-BF_TIFF = '/usr'
-BF_TIFF_INC = BF_TIFF + '/include'
+BF_TIFF = LCGDIR + '/tiff'
+BF_TIFF_INC = '${BF_TIFF}/include'
 
 WITH_BF_ZLIB = 'true'
-BF_ZLIB = '/usr'
-BF_ZLIB_INC = BF_ZLIB + '/include'
-BF_ZLIB_LIB = 'z'
+BF_ZLIB = LCGDIR + '/zlib'
+BF_ZLIB_INC = '${BF_ZLIB}/include'
+#BF_ZLIB_LIB = 'z'
+BF_ZLIB_LIBPATH = '${BF_ZLIB}/lib'
 
 WITH_BF_INTERNATIONAL = 'true'
 
-BF_GETTEXT = '/usr'
-BF_GETTEXT_INC = BF_GETTEXT + '/include'
-BF_GETTEXT_LIB = BF_GETTEXT + '/lib/libintl.a'
+BF_GETTEXT = LCGDIR + '/gettext'
+BF_GETTEXT_INC = '${BF_GETTEXT}/include'
+BF_GETTEXT_LIB = 'gnu_gettext'
+BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
 
 WITH_BF_FTGL = 'true'
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = BF_FTGL + '/include'
+BF_FTGL = LCGDIR + '/ftgl'
+BF_FTGL_INC = '${BF_FTGL}/include'
 BF_FTGL_LIB = 'extern_ftgl'
 
+WITH_BF_GAMEENGINE = 'false'
 
-WITH_BF_ODE = 'false'
+WITH_BF_ODE = 'true'
 BF_ODE = LCGDIR + '/ode'
 BF_ODE_INC = BF_ODE + '/include'
 BF_ODE_LIB = BF_ODE + '/lib/libode.a'
 
 WITH_BF_BULLET = 'true'
 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_SOLID = '#extern/solid'
-BF_SOLID_INC = BF_SOLID + '/include ' + BF_SOLID
+BF_SOLID_INC = '${BF_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
-BF_FREETYPE = '/usr'
-BF_FREETYPE_INC = BF_FREETYPE + '/include ' + BF_FREETYPE + '/include/freetype2'
+BF_FREETYPE = LCGDIR + '/gcc/freetype'
+BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
 BF_FREETYPE_LIB = 'freetype'
+BF_FREETYPE_LIBPATH = '${BF_FREETYPE}/lib'
 
 WITH_BF_QUICKTIME = 'false' # -DWITH_QUICKTIME
 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....
-WITH_BF_STATICOPENGL = 'true'
-BF_OPENGL = '/usr/X11R6'
-BF_OPENGL_INC = BF_OPENGL + '/include'
-BF_OPENGL_LIB = 'GL GLU Xmu Xext X11 Xi'
-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'
-##
-##CC = gcc
-##CCC = g++
-##ifeq ($CPU),alpha)
-##   CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee
-
-CFLAGS = '-pipe -funsigned-char -fno-strict-aliasing'
-
-CPPFLAGS = '-DXP_UNIX'
-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'
-
-##FIX_STUBS_WARNINGS = -Wno-unused
-
-LLIBS = 'util c m dl pthread stdc++'
-##LOPTS = --dynamic
-##DYNLDFLAGS = -shared $(LDFLAGS)
+WITH_BF_STATICOPENGL = 'false'
+BF_OPENGL = 'C:\\MingW'
+BF_OPENGL_INC = '${BF_OPENGL}/include'
+BF_OPENGL_LIBINC = '${BF_OPENGL}/lib'
+BF_OPENGL_LIB = 'opengl32 glu32'
+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' ]
+
+CC = 'i586-mingw32msvc-gcc'
+CXX = 'i586-mingw32msvc-g++'
+
+CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ]
+
+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' ]
+
+CC_WARN = [ '-Wall' ]
+
+
+LLIBS = [ '-ldxguid', '-lgdi32', '-lmsvcrt', '-lwinmm', '-lmingw32', '-lm', '-lws2_32', '-lz'] #'-lutil', '-lc', '-lm', '-ldl', '-lpthread' ]
+
+BF_DEBUG = 'false'
+BF_DEBUG_FLAGS= ''
 
 BF_BUILDDIR = '../build/linuxcross'
 BF_INSTALLDIR='../install/linuxcross'
index 82c17017261491779cc87cd32d57a2957506fe6d..5a31f45aa89f4593349d86d88708d5e92302ec56 100644 (file)
@@ -14,7 +14,7 @@ if window_system == 'linux2':
     for f in pf:
         sources.remove('intern' + os.sep + f + 'Win32.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:
         sources.remove('intern' + os.sep + f + 'X11.cpp')
         sources.remove('intern' + os.sep + f + 'Carbon.cpp')
index bb64e9caa8fa714396b2024d66154df6dcf2b9ca..a60880fb5354fe6d8136232a5448b7622fe471c3 100644 (file)
@@ -42,7 +42,7 @@
  */
 
 #ifdef WIN32
-#include "blenpluginapi\util.h"
+#include "blenpluginapi/util.h"
 #else
 #include "blenpluginapi/util.h"
 #endif
index dab0625f50e577277d1a5012198fc250e023284d..706e57c206de3f33e4b487bf096c35b8095bc983 100644 (file)
@@ -7,7 +7,7 @@ cflags = ''
 defines = []
 root_build_dir=env['BF_BUILDDIR']
 
-source_files = ['makesdna.c']
+source_files = ['makesdna.c', '#intern/guardedalloc/intern/mallocn.c']
 
 makesdna_tool = 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'])
 
+if env['OURPLATFORM'] == 'linuxcross':
+    makesdna_tool.Replace(CC='gcc')
+    makesdna_tool.Replace(AR='ar')
+    makesdna_tool.Replace(LINK='gcc')
+
 if sys.platform != 'cygwin':
     makesdna_tool.Append (CCFLAGS = cflags)
 makesdna_tool.Append (CPPDEFINES = defines)
 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)
 
 dna_dict = dna.Dictionary()
 makesdna_name = root_build_dir+'/makesdna' + dna_dict['PROGSUFFIX']
 dna.Depends ('dna.c', '#'+makesdna_name)
-dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
+if env['OURPLATFORM'] != 'linuxcross':
+    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'
 Return ('obj')
index bf938686af8b3adf76986aa2e6347f666e38fb9d..8cfbc1150f23a73610ee4754e2069107d1877741 100644 (file)
@@ -129,7 +129,7 @@ def setup_staticlibs(lenv):
     if lenv['WITH_BF_STATICOPENGL']:
         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'])
 
     return statlibs, libincs
@@ -155,7 +155,7 @@ def setup_syslibs(lenv):
     syslibs += Split(lenv['BF_SDL_LIB'])
     if not lenv['WITH_BF_STATICOPENGL']:
         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['LLIBS'])
@@ -327,7 +327,7 @@ class BlenderEnvironment(SConsEnvironment):
         if not self or not libname or not source:
             print bc.FAIL+'Cannot continue.  Missing argument for BlenderRes '+libname+bc.ENDC
             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
             Exit()