diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-06-29 17:41:00 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-06-29 18:18:11 +0300 |
commit | d140e70c496122915eb5c05aba83153e2e0d7998 (patch) | |
tree | 1e589247d69da64aa7b0e7802319237ec050b5d6 /build_files | |
parent | 147bd16ed1bb3415b30408b0eab110d0854eadd2 (diff) | |
parent | 295d0c52a26730edc6d4ed1276e4051cce006be5 (diff) |
Merge branch 'master' into temp-ghash-experimentstemp-ghash-experiments
Note that 'store hash' feature was removed for now - to complex to maintain (conflicts)
and relatively easy to re-add if we ever really want this one day.
Conflicts:
source/blender/blenlib/BLI_ghash.h
source/blender/blenlib/intern/BLI_ghash.c
source/blender/blenlib/intern/hash_mm2a.c
source/blender/bmesh/tools/bmesh_region_match.c
tests/gtests/blenlib/BLI_ghash_performance_test.cc
tests/gtests/blenlib/BLI_ghash_test.cc
tests/gtests/blenlib/CMakeLists.txt
Diffstat (limited to 'build_files')
25 files changed, 586 insertions, 319 deletions
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh index 1c78858ac59..0d44ef96154 100755 --- a/build_files/build_environment/install_deps.sh +++ b/build_files/build_environment/install_deps.sh @@ -510,7 +510,7 @@ OSL_SOURCE_REPO_UID="22ee5ea298fd215430dfbd160b5aefd507f06db0" OSL_SOURCE_REPO_BRANCH="blender-fixes" OPENCOLLADA_SOURCE=( "https://github.com/KhronosGroup/OpenCOLLADA.git" ) -OPENCOLLADA_REPO_UID="18da7f4109a8eafaa290a33f5550501cc4c8bae8" +OPENCOLLADA_REPO_UID="3335ac164e68b2512a40914b14c74db260e6ff7d" FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" ) @@ -1374,7 +1374,7 @@ EOF cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst" cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON" cmake_d="$cmake_d -D LLVM_TARGETS_TO_BUILD=X86" - cmake_d="$cmake_d -D -DLLVM_ENABLE_TERMINFO=OFF" + cmake_d="$cmake_d -D LLVM_ENABLE_TERMINFO=OFF" if [ -d $_FFI_INCLUDE_DIR ]; then cmake_d="$cmake_d -D FFI_INCLUDE_DIR=$_FFI_INCLUDE_DIR" @@ -1537,7 +1537,7 @@ clean_OpenCOLLADA() { compile_OpenCOLLADA() { # To be changed each time we make edits that would modify the compiled results! - opencollada_magic=8 + opencollada_magic=9 _init_opencollada # Clean install if needed! @@ -2287,7 +2287,7 @@ install_RPM() { OGG_DEV="libogg-devel" THEORA_DEV="libtheora-devel" - _packages="gcc gcc-c++ make scons libtiff-devel freetype-devel libjpeg-devel\ + _packages="gcc gcc-c++ make scons libtiff-devel libjpeg-devel\ libpng-devel libX11-devel libXi-devel wget ncurses-devel \ readline-devel $OPENJPEG_DEV openal-soft-devel \ glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \ @@ -2301,7 +2301,7 @@ install_RPM() { if [ $RPM = "FEDORA" -o $RPM = "RHEL" ]; then OPENEXR_DEV="openexr-devel" - _packages="$_packages libsqlite3x-devel fftw-devel SDL-devel" + _packages="$_packages freetype-devel libsqlite3x-devel fftw-devel SDL-devel" if $WITH_ALL; then _packages="$_packages jack-audio-connection-kit-devel" @@ -2339,7 +2339,7 @@ install_RPM() { elif [ $RPM = "SUSE" ]; then OPENEXR_DEV="libopenexr-devel" - _packages="$_packages cmake sqlite3-devel fftw3-devel libSDL-devel" + _packages="$_packages cmake freetype2-devel sqlite3-devel fftw3-devel libSDL-devel" PRINT "" install_packages_RPM $_packages diff --git a/build_files/buildbot/config/user-config-mac-i386.py b/build_files/buildbot/config/user-config-mac-i386.py index ab93628c78d..c1beefcf83d 100644 --- a/build_files/buildbot/config/user-config-mac-i386.py +++ b/build_files/buildbot/config/user-config-mac-i386.py @@ -5,3 +5,5 @@ WITH_BF_CYCLES_CUDA_BINARIES = True WITH_BF_CYCLES_OSL = False # OSL never worked on OSX 32bit ! +WITH_BF_COLLADA = False # we drop 32bit, newest collada is only x86_64 ! + diff --git a/build_files/buildbot/config/user-config-mac-x86_64.py b/build_files/buildbot/config/user-config-mac-x86_64.py index ac923f48abe..6a13c80f6ce 100644 --- a/build_files/buildbot/config/user-config-mac-x86_64.py +++ b/build_files/buildbot/config/user-config-mac-x86_64.py @@ -1,5 +1,6 @@ +CC = "../lib/darwin-9.x.universal/clang-omp-3.5/bin/clang" +CXX = "../lib/darwin-9.x.universal/clang-omp-3.5/bin/clang++" MACOSX_ARCHITECTURE = 'x86_64' # valid archs: ppc, i386, ppc64, x86_64 WITH_BF_CYCLES_CUDA_BINARIES = True - diff --git a/build_files/buildbot/master_unpack.py b/build_files/buildbot/master_unpack.py index 46131c5e1de..ec44705931c 100644 --- a/build_files/buildbot/master_unpack.py +++ b/build_files/buildbot/master_unpack.py @@ -124,10 +124,12 @@ else: directory = 'public_html/download' try: + filename = os.path.join(directory, packagename) zf = z.open(package) - f = file(os.path.join(directory, packagename), "wb") + f = file(filename, "wb") shutil.copyfileobj(zf, f) + os.chmod(filename, 0644) zf.close() z.close() diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py index cbe345e764c..7b3f848a198 100644 --- a/build_files/buildbot/slave_compile.py +++ b/build_files/buildbot/slave_compile.py @@ -116,6 +116,8 @@ else: if config.find('player') != -1: scons_options.append('BF_BUILDDIR=%s_player' % (build_dir)) + elif config.find('cuda') != -1: + scons_options.append('BF_BUILDDIR=%s_cuda' % (build_dir)) else: scons_options.append('BF_BUILDDIR=%s' % (build_dir)) @@ -140,7 +142,7 @@ else: retcode = subprocess.call(cur_scons_cmd + scons_options) if retcode != 0: - print('Error building rules wuth config ' + config) + print('Error building rules with config ' + config) sys.exit(retcode) sys.exit(0) diff --git a/build_files/cmake/Modules/FindEigen3.cmake b/build_files/cmake/Modules/FindEigen3.cmake new file mode 100644 index 00000000000..400e8eb047d --- /dev/null +++ b/build_files/cmake/Modules/FindEigen3.cmake @@ -0,0 +1,56 @@ +# - Find Eigen3 library +# Find the native Eigen3 includes and library +# This module defines +# EIGEN3_INCLUDE_DIRS, where to find spnav.h, Set when +# EIGEN3_INCLUDE_DIR is found. +# EIGEN3_ROOT_DIR, The base directory to search for Eigen3. +# This can also be an environment variable. +# EIGEN3_FOUND, If false, do not try to use Eigen3. +# +#============================================================================= +# Copyright 2015 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If EIGEN3_ROOT_DIR was defined in the environment, use it. +IF(NOT EIGEN3_ROOT_DIR AND NOT $ENV{EIGEN3_ROOT_DIR} STREQUAL "") + SET(EIGEN3_ROOT_DIR $ENV{EIGEN3_ROOT_DIR}) +ENDIF() + +SET(_eigen3_SEARCH_DIRS + ${EIGEN3_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(EIGEN3_INCLUDE_DIR + NAMES + # header has no '.h' suffix + Eigen/Eigen + HINTS + ${_eigen3_SEARCH_DIRS} + PATH_SUFFIXES + include/eigen3 +) + +# handle the QUIETLY and REQUIRED arguments and set EIGEN3_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Eigen3 DEFAULT_MSG + EIGEN3_INCLUDE_DIR) + +IF(EIGEN3_FOUND) + SET(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) +ENDIF(EIGEN3_FOUND) + +MARK_AS_ADVANCED( + EIGEN3_INCLUDE_DIR +) diff --git a/build_files/cmake/Modules/FindLLVM.cmake b/build_files/cmake/Modules/FindLLVM.cmake new file mode 100644 index 00000000000..43791c8df8c --- /dev/null +++ b/build_files/cmake/Modules/FindLLVM.cmake @@ -0,0 +1,94 @@ +# - Find LLVM library +# Find the native LLVM includes and library +# This module defines +# LLVM_INCLUDE_DIRS, where to find LLVM.h, Set when LLVM_INCLUDE_DIR is found. +# LLVM_LIBRARIES, libraries to link against to use LLVM. +# LLVM_ROOT_DIR, The base directory to search for LLVM. +# This can also be an environment variable. +# LLVM_FOUND, If false, do not try to use LLVM. +# +# also defined, but not for general use are +# LLVM_LIBRARY, where to find the LLVM library. + +#============================================================================= +# Copyright 2015 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +if(LLVM_ROOT_DIR) + if(DEFINED LLVM_VERSION) + find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION} HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH) + endif() + if(NOT LLVM_CONFIG) + find_program(LLVM_CONFIG llvm-config HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH) + endif() +else() + if(DEFINED LLVM_VERSION) + message(running llvm-config-${LLVM_VERSION}) + find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION}) + endif() + if(NOT LLVM_CONFIG) + find_program(LLVM_CONFIG llvm-config) + endif() +endif() + +if(NOT DEFINED LLVM_VERSION) + execute_process(COMMAND ${LLVM_CONFIG} --version + OUTPUT_VARIABLE LLVM_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(LLVM_VERSION ${LLVM_VERSION} CACHE STRING "Version of LLVM to use") +endif() +if(NOT LLVM_ROOT_DIR) + execute_process(COMMAND ${LLVM_CONFIG} --prefix + OUTPUT_VARIABLE LLVM_ROOT_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation") +endif() +if(NOT LLVM_LIBPATH) + execute_process(COMMAND ${LLVM_CONFIG} --libdir + OUTPUT_VARIABLE LLVM_LIBPATH + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(LLVM_LIBPATH ${LLVM_LIBPATH} CACHE PATH "Path to the LLVM library path") + mark_as_advanced(LLVM_LIBPATH) +endif() + +if(LLVM_STATIC) + find_library(LLVM_LIBRARY + NAMES LLVMAnalysis # first of a whole bunch of libs to get + PATHS ${LLVM_LIBPATH}) +else() + find_library(LLVM_LIBRARY + NAMES LLVM-${LLVM_VERSION} + PATHS ${LLVM_LIBPATH}) +endif() + + +if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH) + if(LLVM_STATIC) + # if static LLVM libraries were requested, use llvm-config to generate + # the list of what libraries we need, and substitute that in the right + # way for LLVM_LIBRARY. + execute_process(COMMAND ${LLVM_CONFIG} --libfiles + OUTPUT_VARIABLE LLVM_LIBRARY + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE " " ";" LLVM_LIBRARY "${LLVM_LIBRARY}") + endif() +endif() + + +# handle the QUIETLY and REQUIRED arguments and set SDL2_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LLVM DEFAULT_MSG + LLVM_LIBRARY) + +MARK_AS_ADVANCED( + LLVM_LIBRARY +) + diff --git a/build_files/cmake/Modules/FindOpenImageIO.cmake b/build_files/cmake/Modules/FindOpenImageIO.cmake index 5e454b6e5cd..789097dfd51 100644 --- a/build_files/cmake/Modules/FindOpenImageIO.cmake +++ b/build_files/cmake/Modules/FindOpenImageIO.cmake @@ -59,7 +59,8 @@ FIND_LIBRARY(OPENIMAGEIO_LIBRARY FIND_FILE(OPENIMAGEIO_IDIFF NAMES idiff - ${OPENIMAGEIO_ROOT_DIR} + HINTS + ${OPENIMAGEIO_ROOT_DIR} PATH_SUFFIXES bin ) diff --git a/build_files/cmake/Modules/FindPCRE.cmake b/build_files/cmake/Modules/FindPCRE.cmake index 9d73e9200d9..ff4b7261555 100644 --- a/build_files/cmake/Modules/FindPCRE.cmake +++ b/build_files/cmake/Modules/FindPCRE.cmake @@ -40,7 +40,6 @@ FIND_PATH(PCRE_INCLUDE_DIR pcre.h ${_pcre_SEARCH_DIRS} PATH_SUFFIXES include - include ) FIND_LIBRARY(PCRE_LIBRARY diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake index 1fb27e7898c..e4236fb4c24 100644 --- a/build_files/cmake/Modules/FindPythonLibsUnix.cmake +++ b/build_files/cmake/Modules/FindPythonLibsUnix.cmake @@ -14,6 +14,7 @@ # PYTHON_INCLUDE_CONFIG_DIRS # PYTHON_LIBRARIES # PYTHON_LIBPATH, Used for installation +# PYTHON_SITE_PACKAGES, Used for installation (as a Python module) # PYTHON_LINKFLAGS # PYTHON_ROOT_DIR, The base directory to search for Python. # This can also be an environment variable. @@ -65,6 +66,14 @@ IF(DEFINED PYTHON_LIBPATH) SET(_IS_LIB_PATH_DEF ON) ENDIF() +STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) + +SET(_python_SEARCH_DIRS + ${PYTHON_ROOT_DIR} + "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" + "/opt/py${_PYTHON_VERSION_NO_DOTS}" + "/opt/lib/python-${PYTHON_VERSION}" +) # only search for the dirs if we havn't already IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_LIB_PATH_DEF)) @@ -74,14 +83,7 @@ IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_ "dm;dmu;du;d" # debug ) - STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) - SET(_python_SEARCH_DIRS - ${PYTHON_ROOT_DIR} - "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" - "/opt/py${_PYTHON_VERSION_NO_DOTS}" - "/opt/lib/python-${PYTHON_VERSION}" - ) FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS}) #IF(CMAKE_BUILD_TYPE STREQUAL Debug) @@ -146,6 +148,7 @@ IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_ ENDIF() IF(PYTHON_LIBRARY AND PYTHON_LIBPATH AND PYTHON_INCLUDE_DIR AND PYTHON_INCLUDE_CONFIG_DIR) + SET(_PYTHON_ABI_FLAGS "${_CURRENT_ABI_FLAGS}") break() ELSE() # ensure we dont find values from 2 different ABI versions @@ -168,7 +171,6 @@ IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_ UNSET(_CURRENT_PATH) UNSET(_python_ABI_FLAGS) - UNSET(_python_SEARCH_DIRS) ENDIF() UNSET(_IS_INC_DEF) @@ -187,17 +189,41 @@ IF(PYTHONLIBSUNIX_FOUND) SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_CONFIG_DIR}) SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) + FIND_FILE(PYTHON_SITE_PACKAGES + NAMES + # debian specific + dist-packages + site-packages + HINTS + ${PYTHON_LIBPATH}/python${PYTHON_VERSION} + ) + # we need this for installation # XXX No more valid with debian-like py3.4 packages... # GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH) - # not used - # SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") + # not required for build, just used when bundling Python. + FIND_PROGRAM( + PYTHON_EXECUTABLE + NAMES + "python${PYTHON_VERSION}${_PYTHON_ABI_FLAGS}" + "python${PYTHON_VERSION}" + "python" + HINTS + ${_python_SEARCH_DIRS} + PATH_SUFFIXES bin + ) ENDIF() +UNSET(_PYTHON_VERSION_NO_DOTS) +UNSET(_PYTHON_ABI_FLAGS) +UNSET(_python_SEARCH_DIRS) + MARK_AS_ADVANCED( PYTHON_INCLUDE_DIR PYTHON_INCLUDE_CONFIG_DIR PYTHON_LIBRARY PYTHON_LIBPATH + PYTHON_SITE_PACKAGES + PYTHON_EXECUTABLE ) diff --git a/build_files/cmake/buildinfo.cmake b/build_files/cmake/buildinfo.cmake index 8ef29b06213..74c1f8f1f8e 100644 --- a/build_files/cmake/buildinfo.cmake +++ b/build_files/cmake/buildinfo.cmake @@ -60,7 +60,8 @@ if(EXISTS ${SOURCE_DIR}/.git) execute_process(COMMAND git log HEAD..@{u} WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE _git_below_check - OUTPUT_STRIP_TRAILING_WHITESPACE) + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) if(NOT _git_below_check STREQUAL "") # If there're commits between HEAD and upstream this means # that we're reset-ed to older revision. Use it's hash then. diff --git a/build_files/cmake/cmake_consistency_check.py b/build_files/cmake/cmake_consistency_check.py index 0883bdbf2d7..d0bbdda1870 100755 --- a/build_files/cmake/cmake_consistency_check.py +++ b/build_files/cmake/cmake_consistency_check.py @@ -28,13 +28,17 @@ if not sys.version.startswith("3"): sys.version.partition(" ")[0]) sys.exit(1) -from cmake_consistency_check_config import IGNORE, UTF8_CHECK, SOURCE_DIR +from cmake_consistency_check_config import ( + IGNORE, + UTF8_CHECK, + SOURCE_DIR, + BUILD_DIR, + ) + import os from os.path import join, dirname, normpath, splitext -print("Scanning:", SOURCE_DIR) - global_h = set() global_c = set() global_refs = {} @@ -134,6 +138,7 @@ def cmake_get_src(f): if found: cmake_base = dirname(f) + cmake_base_bin = os.path.join(BUILD_DIR, os.path.relpath(cmake_base, SOURCE_DIR)) while it is not None: i += 1 @@ -154,6 +159,8 @@ def cmake_get_src(f): # replace dirs l = l.replace("${CMAKE_CURRENT_SOURCE_DIR}", cmake_base) + l = l.replace("${CMAKE_CURRENT_BINARY_DIR}", cmake_base_bin) + l = l.strip('"') if not l: pass @@ -193,13 +200,16 @@ def cmake_get_src(f): raise Exception("unknown file type - not c or h %s -> %s" % (f, new_file)) elif context_name == "INC": - if os.path.isdir(new_file): + if new_file.startswith(BUILD_DIR): + # assume generated path + pass + elif os.path.isdir(new_file): new_path_rel = os.path.relpath(new_file, cmake_base) if new_path_rel != l: print("overly relative path:\n %s:%d\n %s\n %s" % (f, i, l, new_path_rel)) - ## Save time. just replace the line + # # Save time. just replace the line # replace_line(f, i - 1, new_path_rel) else: @@ -230,10 +240,6 @@ def cmake_get_src(f): filen.close() -for cmake in source_list(SOURCE_DIR, is_cmake): - cmake_get_src(cmake) - - def is_ignore(f): for ig in IGNORE: if ig in f: @@ -241,73 +247,83 @@ def is_ignore(f): return False -# First do stupid check, do these files exist? -print("\nChecking for missing references:") -is_err = False -errs = [] -for f in (global_h | global_c): - if f.endswith("dna.c"): - continue - - if not os.path.exists(f): - refs = global_refs[f] - if refs: - for cf, i in refs: - errs.append((cf, i)) - else: - raise Exception("CMake referenecs missing, internal error, aborting!") - is_err = True - -errs.sort() -errs.reverse() -for cf, i in errs: - print("%s:%d" % (cf, i)) - # Write a 'sed' script, useful if we get a lot of these - # print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf)) - - -if is_err: - raise Exception("CMake referenecs missing files, aborting!") -del is_err -del errs - -# now check on files not accounted for. -print("\nC/C++ Files CMake doesnt know about...") -for cf in sorted(source_list(SOURCE_DIR, is_c)): - if not is_ignore(cf): - if cf not in global_c: - print("missing_c: ", cf) - - # check if automake builds a corrasponding .o file. - ''' - if cf in global_c: - out1 = os.path.splitext(cf)[0] + ".o" - out2 = os.path.splitext(cf)[0] + ".Po" - out2_dir, out2_file = out2 = os.path.split(out2) - out2 = os.path.join(out2_dir, ".deps", out2_file) - if not os.path.exists(out1) and not os.path.exists(out2): - print("bad_c: ", cf) - ''' - -print("\nC/C++ Headers CMake doesnt know about...") -for hf in sorted(source_list(SOURCE_DIR, is_c_header)): - if not is_ignore(hf): - if hf not in global_h: - print("missing_h: ", hf) - -if UTF8_CHECK: - # test encoding - import traceback - for files in (global_c, global_h): - for f in sorted(files): - if os.path.exists(f): - # ignore outside of our source tree - if "extern" not in f: - i = 1 - try: - for l in open(f, "r", encoding="utf8"): - i += 1 - except UnicodeDecodeError: - print("Non utf8: %s:%d" % (f, i)) - if i > 1: - traceback.print_exc() +def main(): + + print("Scanning:", SOURCE_DIR) + + for cmake in source_list(SOURCE_DIR, is_cmake): + cmake_get_src(cmake) + + # First do stupid check, do these files exist? + print("\nChecking for missing references:") + is_err = False + errs = [] + for f in (global_h | global_c): + if f.startswith(BUILD_DIR): + continue + + if not os.path.exists(f): + refs = global_refs[f] + if refs: + for cf, i in refs: + errs.append((cf, i)) + else: + raise Exception("CMake referenecs missing, internal error, aborting!") + is_err = True + + errs.sort() + errs.reverse() + for cf, i in errs: + print("%s:%d" % (cf, i)) + # Write a 'sed' script, useful if we get a lot of these + # print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf)) + + + if is_err: + raise Exception("CMake referenecs missing files, aborting!") + del is_err + del errs + + # now check on files not accounted for. + print("\nC/C++ Files CMake doesnt know about...") + for cf in sorted(source_list(SOURCE_DIR, is_c)): + if not is_ignore(cf): + if cf not in global_c: + print("missing_c: ", cf) + + # check if automake builds a corrasponding .o file. + ''' + if cf in global_c: + out1 = os.path.splitext(cf)[0] + ".o" + out2 = os.path.splitext(cf)[0] + ".Po" + out2_dir, out2_file = out2 = os.path.split(out2) + out2 = os.path.join(out2_dir, ".deps", out2_file) + if not os.path.exists(out1) and not os.path.exists(out2): + print("bad_c: ", cf) + ''' + + print("\nC/C++ Headers CMake doesnt know about...") + for hf in sorted(source_list(SOURCE_DIR, is_c_header)): + if not is_ignore(hf): + if hf not in global_h: + print("missing_h: ", hf) + + if UTF8_CHECK: + # test encoding + import traceback + for files in (global_c, global_h): + for f in sorted(files): + if os.path.exists(f): + # ignore outside of our source tree + if "extern" not in f: + i = 1 + try: + for l in open(f, "r", encoding="utf8"): + i += 1 + except UnicodeDecodeError: + print("Non utf8: %s:%d" % (f, i)) + if i > 1: + traceback.print_exc() + +if __name__ == "__main__": + main() diff --git a/build_files/cmake/cmake_consistency_check_config.py b/build_files/cmake/cmake_consistency_check_config.py index 729eecce233..1f75b9884bc 100644 --- a/build_files/cmake/cmake_consistency_check_config.py +++ b/build_files/cmake/cmake_consistency_check_config.py @@ -74,3 +74,6 @@ IGNORE = ( UTF8_CHECK = True SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")))) + +# doesn't have to exist, just use as reference +BUILD_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(SOURCE_DIR, "..", "build")))) diff --git a/build_files/cmake/cmake_netbeans_project.py b/build_files/cmake/cmake_netbeans_project.py index 81b1a460f67..d4cce46434d 100755 --- a/build_files/cmake/cmake_netbeans_project.py +++ b/build_files/cmake/cmake_netbeans_project.py @@ -29,18 +29,20 @@ Example linux usage Windows not supported so far """ -from project_info import (SIMPLE_PROJECTFILE, - SOURCE_DIR, - CMAKE_DIR, - PROJECT_DIR, - source_list, - is_project_file, - is_c_header, - # is_py, - cmake_advanced_info, - cmake_compiler_defines, - project_name_get, - ) +from project_info import ( + SIMPLE_PROJECTFILE, + SOURCE_DIR, + CMAKE_DIR, + PROJECT_DIR, + source_list, + is_project_file, + is_c_header, + # is_py, + cmake_advanced_info, + cmake_compiler_defines, + cmake_cache_var, + project_name_get, + ) import os @@ -70,6 +72,10 @@ def create_nb_project_main(): # be tricky, get the project name from git if we can! PROJECT_NAME = project_name_get() + + make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM") + make_exe_basename = os.path.basename(make_exe) + # --------------- NB spesific defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines] defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()] @@ -130,9 +136,9 @@ def create_nb_project_main(): f = open(join(PROJECT_DIR_NB, "configurations.xml"), 'w') f.write('<?xml version="1.0" encoding="UTF-8"?>\n') - f.write('<configurationDescriptor version="94">\n') + f.write('<configurationDescriptor version="95">\n') f.write(' <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">\n') - f.write(' <df name="0" root="%s">\n' % SOURCE_DIR) # base_root_rel + f.write(' <df root="%s" name="0">\n' % SOURCE_DIR) # base_root_rel # write files! files_rel_local = [normpath(relpath(join(CMAKE_DIR, path), SOURCE_DIR)) for path in files_rel] @@ -184,16 +190,27 @@ def create_nb_project_main(): f.write(' <toolsSet>\n') f.write(' <compilerSet>default</compilerSet>\n') + f.write(' <dependencyChecking>false</dependencyChecking>\n') + f.write(' <rebuildPropChanged>false</rebuildPropChanged>\n') f.write(' </toolsSet>\n') - f.write(' <dependencyChecking>false</dependencyChecking>\n') - f.write(' <rebuildPropChanged>false</rebuildPropChanged>\n') + f.write(' <codeAssistance>\n') + f.write(' </codeAssistance>\n') f.write(' <makefileType>\n') f.write(' <makeTool>\n') f.write(' <buildCommandWorkingDir>.</buildCommandWorkingDir>\n') - f.write(' <buildCommand>${MAKE} -f Makefile</buildCommand>\n') - f.write(' <cleanCommand>${MAKE} -f Makefile clean</cleanCommand>\n') + + if make_exe_basename == "ninja": + build_cmd = "ninja" + clean_cmd = "ninja -t clean" + else: + build_cmd = "${MAKE} -f Makefile" + clean_cmd = "${MAKE} -f Makefile clean" + + f.write(' <buildCommand>%s</buildCommand>\n' % build_cmd) + f.write(' <cleanCommand>%s</cleanCommand>\n' % clean_cmd) f.write(' <executablePath>./bin/blender</executablePath>\n') + del build_cmd, clean_cmd def write_toolinfo(): f.write(' <incDir>\n') @@ -220,10 +237,11 @@ def create_nb_project_main(): f.write(' \n') for path in files_rel_local: + is_c = path.endswith(".c") f.write(' <item path="%s"\n' % path) f.write(' ex="false"\n') - f.write(' tool="1"\n') - f.write(' flavor2="0">\n') + f.write(' tool="%d"\n' % (0 if is_c else 1)) + f.write(' flavor2="%d">\n' % (3 if is_c else 0)) f.write(' </item>\n') f.write(' <runprofile version="9">\n') diff --git a/build_files/cmake/cmake_qtcreator_project.py b/build_files/cmake/cmake_qtcreator_project.py index 1676d634cf2..67302c89a68 100755 --- a/build_files/cmake/cmake_qtcreator_project.py +++ b/build_files/cmake/cmake_qtcreator_project.py @@ -22,26 +22,27 @@ # <pep8 compliant> -""" +r""" +Example Linux usage: + python ~/blender-git/blender/build_files/cmake/cmake_qtcreator_project.py ~/blender-git/cmake + Example Win32 usage: c:\Python32\python.exe c:\blender_dev\blender\build_files\cmake\cmake_qtcreator_project.py c:\blender_dev\cmake_build - -example linux usage - python ~/blender-git/blender/build_files/cmake/cmake_qtcreator_project.py ~/blender-git/cmake """ -from project_info import (SIMPLE_PROJECTFILE, - SOURCE_DIR, - # CMAKE_DIR, - PROJECT_DIR, - source_list, - is_project_file, - is_c_header, - is_py, - cmake_advanced_info, - cmake_compiler_defines, - project_name_get, - ) +from project_info import ( + SIMPLE_PROJECTFILE, + SOURCE_DIR, + # CMAKE_DIR, + PROJECT_DIR, + source_list, + is_project_file, + is_c_header, + is_py, + cmake_advanced_info, + cmake_compiler_defines, + project_name_get, + ) import os import sys @@ -63,18 +64,19 @@ def create_qtc_project_main(): if SIMPLE_PROJECTFILE: # --- qtcreator specific, simple format PROJECT_NAME = "Blender" - with open(os.path.join(PROJECT_DIR, "%s.files" % PROJECT_NAME), 'w') as f: + FILE_NAME = PROJECT_NAME.lower() + with open(os.path.join(PROJECT_DIR, "%s.files" % FILE_NAME), 'w') as f: f.write("\n".join(files_rel)) - with open(os.path.join(PROJECT_DIR, "%s.includes" % PROJECT_NAME), 'w') as f: + with open(os.path.join(PROJECT_DIR, "%s.includes" % FILE_NAME), 'w') as f: f.write("\n".join(sorted(list(set(os.path.dirname(f) for f in files_rel if is_c_header(f)))))) - qtc_prj = os.path.join(PROJECT_DIR, "%s.creator" % PROJECT_NAME) + qtc_prj = os.path.join(PROJECT_DIR, "%s.creator" % FILE_NAME) with open(qtc_prj, 'w') as f: f.write("[General]\n") - qtc_cfg = os.path.join(PROJECT_DIR, "%s.config" % PROJECT_NAME) + qtc_cfg = os.path.join(PROJECT_DIR, "%s.config" % FILE_NAME) if not os.path.exists(qtc_cfg): with open(qtc_cfg, 'w') as f: f.write("// ADD PREDEFINED MACROS HERE!\n") diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index 3a702014bae..2a57e4c33d8 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -16,6 +16,7 @@ set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE) set(WITH_CYCLES OFF CACHE BOOL "" FORCE) set(WITH_FFTW3 OFF CACHE BOOL "" FORCE) set(WITH_LIBMV OFF CACHE BOOL "" FORCE) +set(WITH_LLVM OFF CACHE BOOL "" FORCE) set(WITH_GAMEENGINE OFF CACHE BOOL "" FORCE) set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE) set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index b266602fa63..c7398415c59 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -104,21 +104,31 @@ macro(file_list_suffix endmacro() -macro(target_link_libraries_optimized TARGET LIBS) +function(target_link_libraries_optimized + TARGET + LIBS + ) + foreach(_LIB ${LIBS}) target_link_libraries(${TARGET} optimized "${_LIB}") endforeach() - unset(_LIB) -endmacro() +endfunction() + +function(target_link_libraries_debug + TARGET + LIBS + ) -macro(target_link_libraries_debug TARGET LIBS) foreach(_LIB ${LIBS}) target_link_libraries(${TARGET} debug "${_LIB}") endforeach() - unset(_LIB) -endmacro() +endfunction() + +function(target_link_libraries_decoupled + target + libraries_var + ) -macro(target_link_libraries_decoupled target libraries_var) if(NOT MSVC) target_link_libraries(${target} ${${libraries_var}}) else() @@ -127,14 +137,15 @@ macro(target_link_libraries_decoupled target libraries_var) file_list_suffix(_libraries_debug "${${libraries_var}}" "_d") target_link_libraries_debug(${target} "${_libraries_debug}") target_link_libraries_optimized(${target} "${${libraries_var}}") - unset(_libraries_debug) endif() -endmacro() +endfunction() # Nicer makefiles with -I/1/foo/ instead of -I/1/2/3/../../foo/ # use it instead of include_directories() -macro(blender_include_dirs - includes) +function(blender_include_dirs + includes + ) + set(_ALL_INCS "") foreach(_INC ${ARGV}) get_filename_component(_ABS_INC ${_INC} ABSOLUTE) @@ -145,13 +156,12 @@ macro(blender_include_dirs ##endif() endforeach() include_directories(${_ALL_INCS}) - unset(_INC) - unset(_ABS_INC) - unset(_ALL_INCS) -endmacro() +endfunction() + +function(blender_include_dirs_sys + includes + ) -macro(blender_include_dirs_sys - includes) set(_ALL_INCS "") foreach(_INC ${ARGV}) get_filename_component(_ABS_INC ${_INC} ABSOLUTE) @@ -161,13 +171,11 @@ macro(blender_include_dirs_sys ##endif() endforeach() include_directories(SYSTEM ${_ALL_INCS}) - unset(_INC) - unset(_ABS_INC) - unset(_ALL_INCS) -endmacro() +endfunction() -macro(blender_source_group - sources) +function(blender_source_group + sources + ) # Group by location on disk source_group("Source Files" FILES CMakeLists.txt) @@ -177,23 +185,23 @@ macro(blender_source_group if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp") OR (${_SRC_EXT} MATCHES ".hh")) - source_group("Header Files" FILES ${_SRC}) + + set(GROUP_ID "Header Files") else() - source_group("Source Files" FILES ${_SRC}) + set(GROUP_ID "Source Files") endif() + source_group("${GROUP_ID}" FILES ${_SRC}) endforeach() - - unset(_SRC) - unset(_SRC_EXT) -endmacro() +endfunction() # only MSVC uses SOURCE_GROUP -macro(blender_add_lib_nolist +function(blender_add_lib_nolist name sources includes - includes_sys) + includes_sys + ) # message(STATUS "Configuring library ${name}") @@ -213,22 +221,24 @@ macro(blender_add_lib_nolist # Not for system includes because they can resolve to the same path # list_assert_duplicates("${includes_sys}") -endmacro() +endfunction() -macro(blender_add_lib +function(blender_add_lib name sources includes - includes_sys) + includes_sys + ) blender_add_lib_nolist(${name} "${sources}" "${includes}" "${includes_sys}") set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name}) -endmacro() +endfunction() -macro(SETUP_LIBDIRS) +function(SETUP_LIBDIRS) + link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH}) if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs @@ -288,24 +298,27 @@ macro(SETUP_LIBDIRS) if(WIN32 AND NOT UNIX) link_directories(${PTHREADS_LIBPATH}) endif() -endmacro() +endfunction() -macro(setup_liblinks - target) +function(setup_liblinks + target + ) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE) + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE) + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE) - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}" PARENT_SCOPE) + set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}" PARENT_SCOPE) - target_link_libraries(${target} - ${PNG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${FREETYPE_LIBRARY}) + target_link_libraries( + ${target} + ${PNG_LIBRARIES} + ${ZLIB_LIBRARIES} + ${FREETYPE_LIBRARY} + ) # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs @@ -402,11 +415,13 @@ macro(setup_liblinks unset(EXPAT_LIB_DEBUG) endif() else() - target_link_libraries(${target} - ${OPENCOLLADA_LIBRARIES} - ${PCRE_LIBRARIES} - ${XML2_LIBRARIES} - ${EXPAT_LIB}) + target_link_libraries( + ${target} + ${OPENCOLLADA_LIBRARIES} + ${PCRE_LIBRARIES} + ${XML2_LIBRARIES} + ${EXPAT_LIB} + ) endif() endif() if(WITH_MEM_JEMALLOC) @@ -436,9 +451,11 @@ macro(setup_liblinks ${BLENDER_GL_LIBRARIES}) target_link_libraries(${target} ${PLATFORM_LINKLIBS} ${CMAKE_DL_LIBS}) -endmacro() +endfunction() + + +function(SETUP_BLENDER_SORTED_LIBS) -macro(SETUP_BLENDER_SORTED_LIBS) get_property(BLENDER_LINK_LIBS GLOBAL PROPERTY BLENDER_LINK_LIBS) list(APPEND BLENDER_LINK_LIBS @@ -516,14 +533,15 @@ macro(SETUP_BLENDER_SORTED_LIBS) bf_ikplugin bf_modifiers bf_bmesh + bf_gpu bf_blenkernel bf_physics bf_nodes bf_rna - bf_gpu bf_blenloader bf_imbuf bf_blenlib + bf_depsgraph bf_intern_ghost bf_intern_string bf_avi @@ -673,14 +691,12 @@ macro(SETUP_BLENDER_SORTED_LIBS) message(STATUS "Blender Skipping: (${REM_MSG})") endif() - unset(SEARCHLIB) - unset(SORTLIB) - unset(REMLIB) - unset(REM_MSG) + + set(BLENDER_SORTED_LIBS ${BLENDER_SORTED_LIBS} PARENT_SCOPE) # for top-level tests set_property(GLOBAL PROPERTY BLENDER_SORTED_LIBS_PROP ${BLENDER_SORTED_LIBS}) -endmacro() +endfunction() macro(TEST_SSE_SUPPORT _sse_flags @@ -902,19 +918,22 @@ endmacro() # utility macro macro(remove_cc_flag - flag) - - string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") - string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") - string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") - string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") - - string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") - string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") - string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") - string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + _flag) + + foreach(flag ${ARGV}) + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + endforeach() + unset(flag) endmacro() @@ -928,28 +947,34 @@ endmacro() macro(remove_strict_flags) if(CMAKE_COMPILER_IS_GNUCC) - remove_cc_flag("-Wstrict-prototypes") - remove_cc_flag("-Wmissing-prototypes") - remove_cc_flag("-Wunused-parameter") - remove_cc_flag("-Wunused-macros") - remove_cc_flag("-Wwrite-strings") - remove_cc_flag("-Wredundant-decls") - remove_cc_flag("-Wundef") - remove_cc_flag("-Wshadow") - remove_cc_flag("-Wdouble-promotion") - remove_cc_flag("-Wold-style-definition") - remove_cc_flag("-Werror=[^ ]+") - remove_cc_flag("-Werror") + remove_cc_flag( + "-Wstrict-prototypes" + "-Wmissing-prototypes" + "-Wmissing-format-attribute" + "-Wunused-local-typedefs" + "-Wunused-macros" + "-Wunused-parameter" + "-Wwrite-strings" + "-Wredundant-decls" + "-Wundef" + "-Wshadow" + "-Wdouble-promotion" + "-Wold-style-definition" + "-Werror=[^ ]+" + "-Werror" + ) # negate flags implied by '-Wall' add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") - remove_cc_flag("-Wunused-parameter") - remove_cc_flag("-Wunused-variable") - remove_cc_flag("-Werror=[^ ]+") - remove_cc_flag("-Werror") + remove_cc_flag( + "-Wunused-parameter" + "-Wunused-variable" + "-Werror=[^ ]+" + "-Werror" + ) # negate flags implied by '-Wall' add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") @@ -961,6 +986,24 @@ macro(remove_strict_flags) endmacro() +macro(remove_extra_strict_flags) + if(CMAKE_COMPILER_IS_GNUCC) + remove_cc_flag( + "-Wunused-parameter" + ) + endif() + + if(CMAKE_C_COMPILER_ID MATCHES "Clang") + remove_cc_flag( + "-Wunused-parameter" + ) + endif() + + if(MSVC) + # TODO + endif() +endmacro() + # note, we can only append flags on a single file so we need to negate the options. # at the moment we cant shut up ffmpeg deprecations, so use this, but will # probably add more removals here. @@ -989,37 +1032,39 @@ macro(remove_strict_flags_file endmacro() -macro(ADD_CHECK_C_COMPILER_FLAG +function(ADD_CHECK_C_COMPILER_FLAG _CFLAGS _CACHE_VAR - _FLAG) + _FLAG + ) include(CheckCCompilerFlag) CHECK_C_COMPILER_FLAG("${_FLAG}" "${_CACHE_VAR}") if(${_CACHE_VAR}) # message(STATUS "Using CFLAG: ${_FLAG}") - set(${_CFLAGS} "${${_CFLAGS}} ${_FLAG}") + set(${_CFLAGS} "${${_CFLAGS}} ${_FLAG}" PARENT_SCOPE) else() message(STATUS "Unsupported CFLAG: ${_FLAG}") endif() -endmacro() +endfunction() -macro(ADD_CHECK_CXX_COMPILER_FLAG +function(ADD_CHECK_CXX_COMPILER_FLAG _CXXFLAGS _CACHE_VAR - _FLAG) + _FLAG + ) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("${_FLAG}" "${_CACHE_VAR}") if(${_CACHE_VAR}) # message(STATUS "Using CXXFLAG: ${_FLAG}") - set(${_CXXFLAGS} "${${_CXXFLAGS}} ${_FLAG}") + set(${_CXXFLAGS} "${${_CXXFLAGS}} ${_FLAG}" PARENT_SCOPE) else() message(STATUS "Unsupported CXXFLAG: ${_FLAG}") endif() -endmacro() +endfunction() function(get_blender_version) # extracts header vars and defines them in the parent scope: @@ -1169,7 +1214,7 @@ endmacro() # pair of macros to allow libraries to be specify files to install, but to # only install them at the end so the directories don't get cleared with # the files in them. used by cycles to install addon. -macro(delayed_install +function(delayed_install base files destination) @@ -1182,8 +1227,7 @@ macro(delayed_install endif() set_property(GLOBAL APPEND PROPERTY DELAYED_INSTALL_DESTINATIONS ${destination}) endforeach() - unset(f) -endmacro() +endfunction() # note this is a function instead of a macro so that ${BUILD_TYPE} in targetdir # does not get expanded in calling but is preserved @@ -1202,16 +1246,17 @@ function(delayed_do_install list(GET destinations ${i} d) install(FILES ${f} DESTINATION ${targetdir}/${d}) endforeach() - unset(f) endif() endfunction() -macro(data_to_c - file_from file_to - list_to_add) +function(data_to_c + file_from file_to + list_to_add + ) list(APPEND ${list_to_add} ${file_to}) + set(${list_to_add} ${${list_to_add}} PARENT_SCOPE) get_filename_component(_file_to_path ${file_to} PATH) @@ -1222,21 +1267,21 @@ macro(data_to_c DEPENDS ${file_from} datatoc) set_source_files_properties(${file_to} PROPERTIES GENERATED TRUE) - - unset(_file_to_path) -endmacro() +endfunction() # same as above but generates the var name and output automatic. -macro(data_to_c_simple - file_from - list_to_add) +function(data_to_c_simple + file_from + list_to_add + ) # remove ../'s get_filename_component(_file_from ${CMAKE_CURRENT_SOURCE_DIR}/${file_from} REALPATH) get_filename_component(_file_to ${CMAKE_CURRENT_BINARY_DIR}/${file_from}.c REALPATH) list(APPEND ${list_to_add} ${_file_to}) + set(${list_to_add} ${${list_to_add}} PARENT_SCOPE) get_filename_component(_file_to_path ${_file_to} PATH) @@ -1247,17 +1292,13 @@ macro(data_to_c_simple DEPENDS ${_file_from} datatoc) set_source_files_properties(${_file_to} PROPERTIES GENERATED TRUE) - - unset(_file_from) - unset(_file_to) - unset(_file_to_path) -endmacro() +endfunction() # macro for converting pixmap directory to a png and then a c file -macro(data_to_c_simple_icons - path_from - list_to_add - ) +function(data_to_c_simple_icons + path_from + list_to_add + ) # Conversion steps # path_from -> _file_from -> _file_to @@ -1269,6 +1310,7 @@ macro(data_to_c_simple_icons get_filename_component(_file_to ${CMAKE_CURRENT_BINARY_DIR}/${path_from}.png.c REALPATH) list(APPEND ${list_to_add} ${_file_to}) + set(${list_to_add} ${${list_to_add}} PARENT_SCOPE) get_filename_component(_file_to_path ${_file_to} PATH) @@ -1290,27 +1332,22 @@ macro(data_to_c_simple_icons ) set_source_files_properties(${_file_from} ${_file_to} PROPERTIES GENERATED TRUE) - - unset(_path_from_abs) - unset(_file_from) - unset(_file_to) - unset(_file_to_path) - unset(_icon_files) - -endmacro() +endfunction() # XXX Not used for now... -macro(svg_to_png - file_from - file_to - dpi - list_to_add) +function(svg_to_png + file_from + file_to + dpi + list_to_add + ) # remove ../'s get_filename_component(_file_from ${CMAKE_CURRENT_SOURCE_DIR}/${file_from} REALPATH) get_filename_component(_file_to ${CMAKE_CURRENT_SOURCE_DIR}/${file_to} REALPATH) list(APPEND ${list_to_add} ${_file_to}) + set(${list_to_add} ${${list_to_add}} PARENT_SCOPE) find_program(INKSCAPE_EXE inkscape) mark_as_advanced(INKSCAPE_EXE) @@ -1333,15 +1370,12 @@ macro(svg_to_png else() message(WARNING "Inkscape not found, could not re-generate ${_file_to} from ${_file_from}!") endif() +endfunction() - unset(_file_from) - unset(_file_to) - -endmacro() - -macro(msgfmt_simple - file_from - list_to_add) +function(msgfmt_simple + file_from + list_to_add + ) # remove ../'s get_filename_component(_file_from_we ${file_from} NAME_WE) @@ -1350,6 +1384,7 @@ macro(msgfmt_simple get_filename_component(_file_to ${CMAKE_CURRENT_BINARY_DIR}/${_file_from_we}.mo REALPATH) list(APPEND ${list_to_add} ${_file_to}) + set(${list_to_add} ${${list_to_add}} PARENT_SCOPE) get_filename_component(_file_to_path ${_file_to} PATH) @@ -1360,15 +1395,11 @@ macro(msgfmt_simple DEPENDS msgfmt ${_file_from}) set_source_files_properties(${_file_to} PROPERTIES GENERATED TRUE) +endfunction() - unset(_file_from_we) - unset(_file_from) - unset(_file_to) - unset(_file_to_path) -endmacro() - -macro(find_python_package - package) +function(find_python_package + package + ) string(TOUPPER ${package} _upper_package) @@ -1406,25 +1437,17 @@ macro(find_python_package "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/dist-packages/${package}', " "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/dist-packages/${package}', " "WITH_PYTHON_INSTALL_${_upper_package} option will be ignored when installing python") - set(WITH_PYTHON_INSTALL_${_upper_package} OFF) + set(WITH_PYTHON_INSTALL_${_upper_package} OFF PARENT_SCOPE) else() message(STATUS "${package} found at '${PYTHON_${_upper_package}_PATH}'") endif() - - unset(_PY_VER_SPLIT) - unset(_PY_VER_MAJOR) endif() - - unset(_upper_package) -endmacro() +endfunction() # like Python's 'print(dir())' -macro(print_all_vars) +function(print_all_vars) get_cmake_property(_vars VARIABLES) foreach(_var ${_vars}) message("${_var}=${${_var}}") endforeach() - unset(_vars) - unset(_var) -endmacro() - +endfunction() diff --git a/build_files/cmake/packaging.cmake b/build_files/cmake/packaging.cmake index 95bbb2b59a8..0cb13e0fc66 100644 --- a/build_files/cmake/packaging.cmake +++ b/build_files/cmake/packaging.cmake @@ -27,7 +27,8 @@ if(EXISTS ${CMAKE_SOURCE_DIR}/.git/) execute_process(COMMAND git rev-parse --short @{u} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE MY_WC_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE) + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) endif() endif() set(BUILD_REV ${MY_WC_HASH}) @@ -111,3 +112,9 @@ elseif(UNIX) "tar.bz2") endif() +unset(MAJOR_VERSION) +unset(MINOR_VERSION) +unset(PATCH_VERSION) + +unset(BUILD_REV) + diff --git a/build_files/cmake/project_info.py b/build_files/cmake/project_info.py index fcd4501f231..c9ea2497987 100755 --- a/build_files/cmake/project_info.py +++ b/build_files/cmake/project_info.py @@ -130,7 +130,7 @@ def is_project_file(filename): def cmake_advanced_info(): - """ Extracr includes and defines from cmake. + """ Extract includes and defines from cmake. """ make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM") diff --git a/build_files/package_spec/pacman/PKGBUILD b/build_files/package_spec/pacman/PKGBUILD index cc5198a88e3..961e35578b9 100644 --- a/build_files/package_spec/pacman/PKGBUILD +++ b/build_files/package_spec/pacman/PKGBUILD @@ -12,9 +12,9 @@ blender_version_char=$(sed -ne 's/.*BLENDER_VERSION_CHAR.*\([a-z]\)$/\1/p' $blen # map the version a -> 1 # not to be confused with blender's internal subversions if [ "$blender_version_char" ]; then - blender_version_full=${blender_version}.$(expr index abcdefghijklmnopqrstuvwxyz $blender_version_char) + blender_version_full=${blender_version}.$(expr index abcdefghijklmnopqrstuvwxyz $blender_version_char) else - blender_version_full=${blender_version} + blender_version_full=${blender_version} fi blender_ver_string=$blender_version+git$blender_version_full @@ -60,7 +60,7 @@ package() { cd $srcdir/build make DESTDIR="$pkgdir" install python -m compileall \ - $pkgdir/usr/share/blender/$blender_version/scripts/startup \ - $pkgdir/usr/share/blender/$blender_version/scripts/modules \ - $pkgdir/usr/share/blender/$blender_version/scripts/addons + $pkgdir/usr/share/blender/$blender_version/scripts/startup \ + $pkgdir/usr/share/blender/$blender_version/scripts/modules \ + $pkgdir/usr/share/blender/$blender_version/scripts/addons } diff --git a/build_files/scons/config/linux-config.py b/build_files/scons/config/linux-config.py index 455dd23cdb3..9607045662f 100644 --- a/build_files/scons/config/linux-config.py +++ b/build_files/scons/config/linux-config.py @@ -206,7 +206,7 @@ WITH_BF_CYCLES = WITH_BF_OIIO and WITH_BF_BOOST WITH_BF_CYCLES_CUDA_BINARIES = False BF_CYCLES_CUDA_NVCC = '/usr/local/cuda/bin/nvcc' -BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50'] +BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50', 'sm_52'] WITH_BF_OPENMP = True @@ -230,7 +230,8 @@ WITH_BF_FREESTYLE = True CC = 'gcc' CXX = 'g++' -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] +CFLAGS = ['-std=gnu89'] CXXFLAGS = [] CPPFLAGS = [] diff --git a/build_files/scons/config/win32-mingw-config.py b/build_files/scons/config/win32-mingw-config.py index 87c35e179cb..cbb7755637a 100644 --- a/build_files/scons/config/win32-mingw-config.py +++ b/build_files/scons/config/win32-mingw-config.py @@ -145,7 +145,7 @@ BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib/opencollada' WITH_BF_CYCLES = True WITH_BF_CYCLES_CUDA_BINARIES = False BF_CYCLES_CUDA_NVCC = "" # Path to the NVIDIA CUDA compiler -BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50'] +BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50', 'sm_52'] WITH_BF_OIIO = True BF_OIIO = LIBDIR + '/openimageio' diff --git a/build_files/scons/config/win64-mingw-config.py b/build_files/scons/config/win64-mingw-config.py index 57eaae81d49..e4def7e5a5c 100644 --- a/build_files/scons/config/win64-mingw-config.py +++ b/build_files/scons/config/win64-mingw-config.py @@ -144,7 +144,7 @@ BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib/opencollada' WITH_BF_CYCLES = True WITH_BF_CYCLES_CUDA_BINARIES = False BF_CYCLES_CUDA_NVCC = "" # Path to the NVIDIA CUDA compiler -BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50'] +BF_CYCLES_CUDA_BINARIES_ARCH = ['sm_20', 'sm_21', 'sm_30', 'sm_35', 'sm_50', 'sm_52'] WITH_BF_OIIO = True BF_OIIO = LIBDIR + '/openimageio' diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py index 060904e7cd7..0ed83d57f9f 100644 --- a/build_files/scons/tools/Blender.py +++ b/build_files/scons/tools/Blender.py @@ -372,7 +372,7 @@ def propose_priorities(): def creator(env): sources = ['creator.c']# + Blender.buildinfo(env, "dynamic") + Blender.resources - incs = ['#/intern/guardedalloc', '#/source/blender/blenlib', '#/source/blender/blenkernel', '#/source/blender/editors/include', '#/source/blender/blenloader', '#/source/blender/imbuf', '#/source/blender/renderconverter', '#/source/blender/render/extern/include', '#/source/blender/windowmanager', '#/source/blender/makesdna', '#/source/blender/makesrna', '#/source/gameengine/BlenderRoutines', '#/extern/glew/include', '#/source/blender/gpu', env['BF_OPENGL_INC']] + incs = ['#/intern/guardedalloc', '#/source/blender/blenlib', '#/source/blender/blenkernel', '#/source/blender/depsgraph', '#/source/blender/editors/include', '#/source/blender/blenloader', '#/source/blender/imbuf', '#/source/blender/renderconverter', '#/source/blender/render/extern/include', '#/source/blender/windowmanager', '#/source/blender/makesdna', '#/source/blender/makesrna', '#/source/gameengine/BlenderRoutines', '#/extern/glew/include', '#/source/blender/gpu', env['BF_OPENGL_INC']] defs = [] @@ -441,7 +441,7 @@ def buildinfo(lenv, build_type): no_upstream = False try : - build_hash = btools.get_command_output(['git', 'rev-parse', '--short', '@{u}']).strip() + build_hash = btools.get_command_output(['git', 'rev-parse', '--short', '@{u}'], stderr=subprocess.STDOUT).strip() except subprocess.CalledProcessError: # assume branch has no upstream configured build_hash = btools.get_command_output(['git', 'rev-parse', '--short', 'HEAD']).strip() @@ -630,7 +630,7 @@ def WinPyBundle(target=None, source=None, env=None): py_tar+= '/release/python' + env['BF_PYTHON_VERSION'].replace('.','') + '.tar.gz' py_target = env.subst(env['BF_INSTALLDIR']).lstrip("#") - py_target = os.path.join(py_target, VERSION, 'python', 'lib') + py_target = os.path.join(py_target, VERSION, 'python') def printexception(func,path,ex): if os.path.exists(path): #do not report if path does not exist. eg on a fresh build. print str(func) + ' failed on ' + str(path) @@ -670,6 +670,8 @@ def WinPyBundle(target=None, source=None, env=None): py_dir += '/release/site-packages' # grr, we have to do one by one because the dir exists for f in os.listdir(py_dir): + if f == '.svn': + continue fn_src = os.path.join(py_dir, f) fn_dst = os.path.join(py_target, f) @@ -762,7 +764,7 @@ def AppIt(target=None, source=None, env=None): commands.getoutput(cmd) cmd = 'cp -R %s/kernel/*.h %s/kernel/*.cl %s/kernel/*.cu %s/kernel/' % (croot, croot, croot, cinstalldir) commands.getoutput(cmd) - cmd = 'cp -R %s/kernel/svm %s/kernel/closure %s/kernel/geom %s/util/util_color.h %s/util/util_half.h %s/util/util_math.h %s/util/util_math_fast.h %s/util/util_transform.h %s/util/util_types.h %s/kernel/' % (croot, croot, croot, croot, croot, croot, croot, croot, croot, cinstalldir) + cmd = 'cp -R %s/kernel/svm %s/kernel/closure %s/kernel/geom %s/kernel/split %s/kernel/kernels %s/util/util_color.h %s/util/util_half.h %s/util/util_math.h %s/util/util_math_fast.h %s/util/util_transform.h %s/util/util_types.h %s/util/util_atomic.h %s/kernel/' % (croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, croot, cinstalldir) commands.getoutput(cmd) cmd = 'cp -R %s/../intern/cycles/kernel/*.cubin %s/lib/' % (builddir, cinstalldir) commands.getoutput(cmd) @@ -816,6 +818,8 @@ def AppIt(target=None, source=None, env=None): instname = env['LCGDIR'][1:] # made libiomp5 part of blender libs cmd = 'ditto --arch %s %s/openmp/lib/libiomp5.dylib %s/%s.app/Contents/Resources/lib/'%(osxarch, instname, installdir, binary) # copy libiomp5 commands.getoutput(cmd) + cmd = 'cp %s/openmp/LICENSE.txt %s/LICENSE-libiomp5.txt'%(instname, installdir) # copy libiomp5 license + commands.getoutput(cmd) # extract copy system python, be sure to update other build systems # when making changes to the files that are copied. @@ -839,6 +843,7 @@ def UnixPyBundle(target=None, source=None, env=None): py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] ) py_target = env.subst( dir + '/python/' + target_lib + '/python'+env['BF_PYTHON_VERSION'] ) + py_target_bin = env.subst(dir + '/python/bin') # This is a bit weak, but dont install if its been installed before, makes rebuilds quite slow. if os.path.exists(py_target): @@ -858,6 +863,11 @@ def UnixPyBundle(target=None, source=None, env=None): except: pass + # install the executable + run("rm -rf '%s'" % py_target_bin) + os.makedirs(py_target_bin) + run("cp '%s' '%s'" % (env.subst(env['BF_PYTHON_BINARY']), py_target_bin)) + run("cp -R '%s' '%s'" % (py_src, os.path.dirname(py_target))) run("rm -rf '%s/distutils'" % py_target) run("rm -rf '%s/lib2to3'" % py_target) diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index c5342d6f349..76450fbd223 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -199,7 +199,7 @@ def validate_arguments(args, bc): 'LLIBS', 'PLATFORM_LINKFLAGS', 'MACOSX_ARCHITECTURE', 'MACOSX_SDK', 'XCODE_CUR_VER', 'C_COMPILER_ID', 'BF_CYCLES_CUDA_BINARIES_ARCH', 'BF_PROGRAM_LINKFLAGS', 'MACOSX_DEPLOYMENT_TARGET', 'WITH_BF_CYCLES_DEBUG', 'WITH_BF_CYCLES_LOGGING', - 'WITH_BF_CPP11' + 'WITH_BF_CPP11', 'WITH_BF_LEGACY_DEPSGRAPH', ] @@ -657,6 +657,8 @@ def read_opts(env, cfg, args): ('BF_PROGRAM_LINKFLAGS', 'Link flags applied only to final binaries (blender and blenderplayer, not makesrna/makesdna)', ''), (BoolVariable('WITH_BF_CPP11', '"Build with C++11 standard enabled, for development use only!', False)), + + (BoolVariable('WITH_BF_LEGACY_DEPSGRAPH', 'Build Blender with legacy dependency graph', True)), ) # end of opts.AddOptions() return localopts |