* 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 all of the rewrite work done on the SCons system. For
documentation see doc/blender-scons.txt and doc/blender-scons-dev.txt.
Also http://mediawiki.blender.org/index.php/BlenderDev/SconsRefactoring
contains valuable information, along with what still needs to be done.
- linux, os x and windows compile now.
- files are compiled to BF_INSTALLDIR (see config/(platform)-config.py)
- NOTE: Jean-Luc P will commit sometime during the weekend proper
appit() for OS X. For now, copy the resulting binary to an
existing .app bundle.
- features:
- cleaner structure for better maintenance
- cleaner output during compile
- better handling of build options
- general overall speed increase
- see the wiki for more info
Cygwin, FreeBSD and Solaris systems still need work. For these systems:
1) copy a config/(platform)-config.py to ie. config/cygwin-config.py
2) set the proper defaults for your platform
3) mail me at jesterking at letwory dot net with you configuration. if
you need any modifications to the system, do send a patch, too.
I'll be giving first-aid today and tomorrow, after that it'll be all
regular development work :)
/Nathan
- XCode project
- Scons :
scons stopped working for Os X in the last month (dont know when) :
* the '.' and '..' keywords in CCPPATH
are not recognized anymore for sconscripts compiling files at
a sub level
* when doing a scons clean, the 3 subdirs in build dir are removed
and scons then fail to recreate them (exten, intern, source)
this commit solve the first problem as a temp workaround
for the latter simply recreate the dirs manually
I will investigate that further when on vacations, which i should already
be.
;(
all 3 build systems are now working on Os X
using bandoler's patch as a basis (thanks!).
A couple of notes:
- This is for windows only, I did not have a chance to try linux yet.
- SConscript for PHY_Bullet may need tweaking (plus support
for other platforms), but at least it's in there :)
Any problems, shout :)
* add some ENV = os.environ's here and there (help those who have msvc toolkit installed)
Note for OSX users: check from your config.opts the correct info for the precompiled ftgl lib is used.
* Updates to the cygwin build.
the dna.c file used to be generated with a full path. Cygwin doesn't like
this. The problem was with some cflags and linkflags that are used to build
makesdna.exe
Hos nicely pointed this out and proposed a solution.
Now, these flags are only added to the command when the platform != 'cygwin'.
* Updated some variables in SConstruct.
* Added the following flags to config.opts:
- PYTHON_LINKFLAGS
- PLATFORM_LIBS
- PLATFORM_LIBPATH
- PLATFORM_LINKFLAGS
Backup your original config.opts file and run scons again to get these new
options.
* Use freetype-config instead of pkg-config for determining the freetype2
flags.
* The new PYTHON_LINKFLAGS now enable the dynamic linking on Linux and
possibly other platforms as well. This should resolve all linking problems
reported to the mailing lists. (At least for Linux, I can't test other
platforms).
* Blender static now links. By default this option is disabled on all
platforms. Simply set the option in config.opts to 'true'.
* Added the following flags to config.opts:
- HOST_CC. This is the C compiler for the host platform. This value is the
same as TARGET_CC when not cross compiling.
- HOST_CXX. This is the C++ compiler for the host platform. This value is
the same as TARGET_CXX when not cross compiling.
- TARGET_CC. This is the C compiler for the target platform.
- TARGET_CXX. This is the C++ compiler for the target platform.
- TARGET_AR. This is the linker command for linking libraries.
- PATH This is the standard search path
All SConscript files have been updated to reflect these changes. Now it's
possible to change only the root SConstruct file, and all compiler specific
variables are passed automatically to all SConscript files. Of course, this
does not apply to makesdna because there the host and target platform is
different from all other libraries.
To pass a variable that applies to all platforms, all we now have to do is
set the correct value in library_env
Note: as usual, to get the latest options in the config.opts file, first
remove your version.
* libraries are now generated in [BUILD_DIR]/lib
* passed the user_options to all libraries now.
This means I could remove a couple of Export/Import lines.
* Changed the order in source/blender/src/SConscript and
source/gameengine/SConscript.
All libraries are now sorted alphabetically. This has no impact on the build
process.
* All output is now generated in a seperate directory. By default this is
../build/
Currently all .lib / .a files are still build in lib/
So, I guess I need to update all SConscript files to build the lib now also
in the build_dir. TODO
* User configurable options have been added.
When running SCons for the first time, a new config.opts file is generated.
The defaults are taken from each section currently in SConstruct.
Currently implemented options:
- VERSION // Blender version. not used at the moment
- BUILD_BINARY // release or debug
- BUILD_DIR // target directory to build intermediate files
- USE_INTERNATIONAL // true or false
- BUILD_GAMEENGINE // true or false
- USE_PHYSICS // ode or solid
- USE_OPENAL // true or false
- USE_FMOD // true or false
- USE_QUICKTIME // true or false
Note that all options are strings, so quotes are necessary (')
There's currently some duplicate code in the SConstruct and SConscript
files, but this currently works and cleanup can be done in small steps
afterwards.
* Disabled international support on Linux by default for now.
There is something wrong with this currently. I'll fix it in the near
future.
* makesdna generates dna.c which in turn should be compiled with nice cflags,
linkflags etc. But, a small error slipped in which caused the .c file to be
compiled into a nice .o file without those flags.
Thanks to Hos for pointing out the error and persisting there indeed was an
error.
The makesdna tool is SDL 'aware', but I forgot to pass some crucial flags to
the build command.
While working in that file, did some cleanup to make it more consistent with
the other SConscript files.
You'll need SCons (www.scons.org) to build.
Platforms currently working:
* Linux (me)
- options for quicktime, openal and international disabled
- uses the system libs and include files for building - no option to build
with the precompiled libraries yet.
* Windows (jesterKing)
- builds with quicktime (optional)
- builds with openal (optional)
- builds with international support (optional)
- Use the DOS box to build
- builds with precompiled libraries
* Irix (Hos)
- Uses default Irix compiler
- Not all optimization levels correct yet
- options for quicktime, openal and international disabled
- builds with precompiled libraries
* Cygwin (me)
- has a problem in the linking stage
- uses free build tools (gcc)
- options for quicktime, openal and international disabled
- uses the system libs and include files for building - no option to build
with the precompiled libraries yet.
* MacOS (sgefant)
- builds with quicktime (optional)
- options for openal and international disabled
- builds a nice bundle
- builds with precompiled libraries
Thanks to IanWill for a bugfix in the Linux build.
Note: This is a work in progress. A lot still has to be done - for example the
optional parts are only to be enabled by directly setting 'true' or
'false' in the SConstruct file. This needs to be moved to a user config
file. Also, the .o/.obj files are stored in the source tree. This needs
to be fixed as well.
The game engine is not yet built.