Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-12-02 16:09:06 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-12-02 16:11:58 +0300
commit956bd92a6036ce3e47047dfdbee68f447c23b61d (patch)
treec1d6508d1bc2247d0e18658ad519fd26757532d9 /build_files/buildbot/slave_compile.py
parentca3d014bd1358abfb2708bf33742f70ab26d7b96 (diff)
Buildbot: Initial work to move linux build environment to CMake
This is so called "seems to work in dry tests" commit which is aimed to switch linux release environment to CMake. Some notes: - There's no special handle of libstdc++, but it wasn't really static for quite some time in SCons configuration and nobody really complained. - It was quite tricky to get OpenMP linked statically with just using some configuration so we went ahead and added a special option to CMake now which is only exist on Linux and advertised as shouldn't be used. - Packing is happening manually in slave_pack.py. This is because we have to add some really special files to the archive (mesa libraries for example) which we can't really handle from CMake/CPack in a nice generic way. Don't think it's bad approach, at least crappynness is localized and it's not _that_ crappy anyway. - Windows buildbot should keep working, but needs doublechecing. It's just a build folder changed, but you never know what it might imply. - Some further tweaks are likely needed to ensure all builders are working. Thanks Campbell for assistance in this patch!
Diffstat (limited to 'build_files/buildbot/slave_compile.py')
-rw-r--r--build_files/buildbot/slave_compile.py136
1 files changed, 107 insertions, 29 deletions
diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py
index ee89bc90225..d055822f69d 100644
--- a/build_files/buildbot/slave_compile.py
+++ b/build_files/buildbot/slave_compile.py
@@ -31,43 +31,121 @@ if len(sys.argv) < 2:
builder = sys.argv[1]
# we run from build/ directory
-blender_dir = '../blender.git'
+blender_dir = os.path.join('..', 'blender.git')
if 'cmake' in builder:
# cmake
- # set build options
+ # Some fine-tuning configuration
+ blender_dir = os.path.join('..', blender_dir)
+ build_dir = os.path.abspath(os.path.join('..', 'build', builder))
+ install_dir = os.path.abspath(os.path.join('..', 'install', builder))
+ targets = ['blender']
+
+ chroot_name = None # If not None command will be delegated to that chroot
+ build_cubins = True # Whether to build Cycles CUDA kernels
+ remove_cache = False # Remove CMake cache to be sure config is totally up-to-date
+ remove_install_dir = False # Remove installation folder before building
+
+ # Config file to be used (relative to blender's sources root)
+ cmake_config_file = "build_files/cmake/config/blender_full.cmake"
+ cmake_player_config_file = None
+ cmake_cuda_config_file = None
+
+ # Set build options.
cmake_options = ['-DCMAKE_BUILD_TYPE:STRING=Release']
- if builder.endswith('mac_x86_64_cmake'):
- cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64')
- elif builder.endswith('mac_i386_cmake'):
- cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=i386')
- elif builder.endswith('mac_ppc_cmake'):
- cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=ppc')
-
- if 'win64' in builder:
- cmake_options.append(['-G', '"Visual Studio 12 2013 Win64"'])
- elif 'win32' in builder:
- cmake_options.append(['-G', '"Visual Studio 12 2013"'])
-
- cmake_options.append("-C../blender.git/build_files/cmake/config/blender_full.cmake")
- if 'win32' not in builder:
- cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=1")
- else:
- cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=0")
- # configure and make
- retcode = subprocess.call(['cmake', blender_dir] + cmake_options)
- if retcode != 0:
- sys.exit(retcode)
+ if builder.startswith('mac'):
+ # Set up OSX architecture
+ if builder.endswith('x86_64_cmake'):
+ cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64')
+ elif builder.endswith('i386_cmake'):
+ cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=i386')
+ elif builder.endswith('ppc_cmake'):
+ cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=ppc')
+
+ elif builder.startswith('win'):
+ if builder.startwith('win64'):
+ cmake_options.append(['-G', '"Visual Studio 12 2013 Win64"'])
+ elif builder.startswith('win32'):
+ cmake_options.append(['-G', '"Visual Studio 12 2013"'])
+ build_cubins = False
+
+ elif builder.startswith('linux'):
+ remove_cache = True
+ remove_install_dir = True
+ cmake_config_file = "build_files/buildbot/config/blender_linux.cmake"
+ cmake_player_config_file = "build_files/buildbot/config/blender_player_linux.cmake"
+ cmake_cuda_config_file = "build_files/buildbot/config/blender_cuda_linux.cmake"
+ if builder.endswith('x86_64_cmake'):
+ chroot_name = 'buildbot_squeeze_x86_64'
+ build_cubins = False
+ targets = ['player', 'blender']
+ elif builder.endswith('i386_cmake'):
+ chroot_name = 'buildbot_squeeze_i686'
+ build_cubins = False
+ targets = ['player', 'blender']
+
+ cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=%d" % (build_cubins))
+
+ if install_dir:
+ cmake_options.append("-DCMAKE_INSTALL_PREFIX=%s" % (install_dir))
+
+ cmake_options.append("-C" + os.path.join(blender_dir, cmake_config_file))
+
+ # Prepare chroot command prefix if needed
- if 'win32' in builder:
- retcode = subprocess.call(['msbuild', 'INSTALL.vcxproj', '/Property:PlatformToolset=v120_xp', '/p:Configuration=Release'])
- elif 'win64' in builder:
- retcode = subprocess.call(['msbuild', 'INSTALL.vcxproj', '/p:Configuration=Release'])
+ if chroot_name:
+ chroot_prefix = ['schroot', '-c', chroot_name, '--']
else:
- retcode = subprocess.call(['make', '-s', '-j4', 'install'])
- sys.exit(retcode)
+ chroot_prefix = []
+
+ # Make sure no garbage remained from the previous run
+ # (only do it if builder requested this)
+ if remove_install_dir:
+ if os.path.isdir(install_dir):
+ shutil.rmtree(install_dir)
+
+ for target in targets:
+ print("Building target %s" % (target))
+ # Construct build directory name based on the target
+ target_build_dir = build_dir
+ if target != 'blender':
+ target_build_dir += '_' + target
+ # Make sure build directory exists and enter it
+ if not os.path.isdir(target_build_dir):
+ os.mkdir(target_build_dir)
+ os.chdir(target_build_dir)
+ # Tweaking CMake options to respect the target
+ target_cmake_options = cmake_options[:]
+ if target == 'player':
+ target_cmake_options.append("-C" + os.path.join(blender_dir, cmake_player_config_file))
+ elif target == 'cuda':
+ target_cmake_options.append("-C" + os.path.join(blender_dir, cmake_cuda_config_file))
+ # Configure the build
+ print("CMake options:")
+ print(target_cmake_options)
+ if remove_cache and os.path.exists('CMakeCache.txt'):
+ print("Removing CMake cache")
+ os.remove('CMakeCache.txt')
+ retcode = subprocess.call(chroot_prefix + ['cmake', blender_dir] + target_cmake_options)
+ if retcode != 0:
+ print('Condifuration FAILED!')
+ sys.exit(retcode)
+
+ if 'win32' in builder:
+ command = ['msbuild', 'INSTALL.vcxproj', '/Property:PlatformToolset=v120_xp', '/p:Configuration=Release']
+ elif 'win64' in builder:
+ command = ['msbuild', 'INSTALL.vcxproj', '/p:Configuration=Release']
+ else:
+ command = chroot_prefix + ['make', '-s', '-j2', 'install']
+
+ print("Executing command:")
+ print(command)
+ retcode = subprocess.call(command)
+
+ if retcode != 0:
+ sys.exit(retcode)
else:
python_bin = 'python'
if builder.find('linux') != -1: