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:
Diffstat (limited to 'build_files/cmake/macros.cmake')
-rw-r--r--build_files/cmake/macros.cmake315
1 files changed, 243 insertions, 72 deletions
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index ca1dd79cd8e..34301458a06 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -1,63 +1,142 @@
# -*- mode: cmake; indent-tabs-mode: t; -*-
# $Id$
+
+# foo_bar.spam --> foo_barMySuffix.spam
+macro(file_suffix
+ file_name_new file_name file_suffix
+ )
+
+ get_filename_component(_file_name_PATH ${file_name} PATH)
+ get_filename_component(_file_name_NAME_WE ${file_name} NAME_WE)
+ get_filename_component(_file_name_EXT ${file_name} EXT)
+ set(${file_name_new} "${_file_name_PATH}/${_file_name_NAME_WE}${file_suffix}${_file_name_EXT}")
+
+ unset(_file_name_PATH)
+ unset(_file_name_NAME_WE)
+ unset(_file_name_EXT)
+endmacro()
+
+# usefil for adding debug suffix to library lists:
+# /somepath/foo.lib --> /somepath/foo_d.lib
+macro(file_list_suffix
+ fp_list_new fp_list fn_suffix
+ )
+
+ # incase of empty list
+ set(_fp)
+ set(_fp_suffixed)
+
+ set(fp_list_new)
+
+ foreach(_fp ${fp_list})
+ file_suffix(_fp_suffixed "${_fp}" "${fn_suffix}")
+ list(APPEND "${fp_list_new}" "${_fp_suffixed}")
+ endforeach()
+
+ unset(_fp)
+ unset(_fp_suffixed)
+
+endmacro()
+
+
+macro(target_link_libraries_optimized TARGET LIBS)
+ foreach(_LIB ${LIBS})
+ target_link_libraries(${TARGET} optimized "${_LIB}")
+ endforeach()
+ unset(_LIB)
+endmacro()
+
+macro(target_link_libraries_debug TARGET LIBS)
+ foreach(_LIB ${LIBS})
+ target_link_libraries(${TARGET} debug "${_LIB}")
+ endforeach()
+ unset(_LIB)
+endmacro()
+
# Nicer makefiles with -I/1/foo/ instead of -I/1/2/3/../../foo/
# use it instead of include_directories()
macro(blender_include_dirs
includes)
+ set(_ALL_INCS "")
+ foreach(_INC ${ARGV})
+ get_filename_component(_ABS_INC ${_INC} ABSOLUTE)
+ list(APPEND _ALL_INCS ${_ABS_INC})
+ endforeach()
+ include_directories(${_ALL_INCS})
+ unset(_INC)
+ unset(_ABS_INC)
+ unset(_ALL_INCS)
+endmacro()
- foreach(inc ${ARGV})
- get_filename_component(abs_inc ${inc} ABSOLUTE)
- list(APPEND all_incs ${abs_inc})
+macro(blender_include_dirs_sys
+ includes)
+ set(_ALL_INCS "")
+ foreach(_INC ${ARGV})
+ get_filename_component(_ABS_INC ${_INC} ABSOLUTE)
+ list(APPEND _ALL_INCS ${_ABS_INC})
endforeach()
- include_directories(${all_incs})
+ include_directories(SYSTEM ${_ALL_INCS})
+ unset(_INC)
+ unset(_ABS_INC)
+ unset(_ALL_INCS)
endmacro()
+macro(blender_source_group
+ sources)
+
+ # Group by location on disk
+ source_group("Source Files" FILES CMakeLists.txt)
+
+ foreach(_SRC ${sources})
+ get_filename_component(_SRC_EXT ${_SRC} EXT)
+ if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp"))
+ source_group("Header Files" FILES ${_SRC})
+ else()
+ source_group("Source Files" FILES ${_SRC})
+ endif()
+ endforeach()
+
+ unset(_SRC)
+ unset(_SRC_EXT)
+endmacro()
+
+
# only MSVC uses SOURCE_GROUP
macro(blender_add_lib_nolist
name
sources
- includes)
+ includes
+ includes_sys)
# message(STATUS "Configuring library ${name}")
+ # include_directories(${includes})
+ # include_directories(SYSTEM ${includes_sys})
blender_include_dirs("${includes}")
+ blender_include_dirs_sys("${includes_sys}")
+
add_library(${name} ${sources})
- # Group by location on disk
- source_group("Source Files" FILES CMakeLists.txt)
- foreach(SRC ${sources})
- get_filename_component(SRC_EXT ${SRC} EXT)
- if(${SRC_EXT} MATCHES ".h" OR ${SRC_EXT} MATCHES ".hpp")
- source_group("Header Files" FILES ${SRC})
- else()
- source_group("Source Files" FILES ${SRC})
- endif()
- endforeach()
+ # works fine without having the includes
+ # listed is helpful for IDE's (QtCreator/MSVC)
+ blender_source_group("${sources}")
+
endmacro()
-# # works fine but having the includes listed is helpful for IDE's (QtCreator/MSVC)
-# macro(blender_add_lib_nolist
-# name
-# sources
-# includes)
-#
-# message(STATUS "Configuring library ${name}")
-# include_directories(${includes})
-# add_library(${name} ${sources})
-# endmacro()
macro(blender_add_lib
name
sources
- includes)
+ includes
+ includes_sys)
- blender_add_lib_nolist(${name} "${sources}" "${includes}")
+ blender_add_lib_nolist(${name} "${sources}" "${includes}" "${includes_sys}")
set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name})
-
endmacro()
+
macro(SETUP_LIBDIRS)
# see "cmake --help-policy CMP0003"
if(COMMAND cmake_policy)
@@ -88,9 +167,6 @@ macro(SETUP_LIBDIRS)
if(WITH_IMAGE_OPENJPEG AND UNIX AND NOT APPLE)
link_directories(${OPENJPEG_LIBPATH})
endif()
- if(WITH_LCMS)
- link_directories(${LCMS_LIBPATH})
- endif()
if(WITH_CODEC_QUICKTIME)
link_directories(${QUICKTIME_LIBPATH})
endif()
@@ -104,7 +180,7 @@ macro(SETUP_LIBDIRS)
link_directories(${SNDFILE_LIBPATH})
endif()
if(WITH_SAMPLERATE)
- link_directories(${LIBSAMPLERATE_LIBPATH})
+ link_directories(${SAMPLERATE_LIBPATH})
endif()
if(WITH_FFTW3)
link_directories(${FFTW3_LIBPATH})
@@ -114,6 +190,9 @@ macro(SETUP_LIBDIRS)
link_directories(${PCRE_LIBPATH})
link_directories(${EXPAT_LIBPATH})
endif()
+ if(WITH_MEM_JEMALLOC)
+ link_directories(${JEMALLOC_LIBPATH})
+ endif()
if(WIN32 AND NOT UNIX)
link_directories(${PTHREADS_LIBPATH})
@@ -122,19 +201,29 @@ endmacro()
macro(setup_liblinks
target)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ")
- target_link_libraries(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${LLIBS})
+ 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}")
+
+ target_link_libraries(${target}
+ ${OPENGL_gl_LIBRARY}
+ ${OPENGL_glu_LIBRARY}
+ ${JPEG_LIBRARIES}
+ ${PNG_LIBRARIES}
+ ${ZLIB_LIBRARIES}
+ ${PLATFORM_LINKLIBS})
# 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
target_link_libraries(${target} ${PYTHON_LINKFLAGS})
if(WIN32 AND NOT UNIX)
- target_link_libraries(${target} debug ${PYTHON_LIBRARY}_d)
- target_link_libraries(${target} optimized ${PYTHON_LIBRARY})
+ file_list_suffix(PYTHON_LIBRARIES_DEBUG "${PYTHON_LIBRARIES}" "_d")
+ target_link_libraries_debug(${target} "${PYTHON_LIBRARIES_DEBUG}")
+ target_link_libraries_optimized(${target} "${PYTHON_LIBRARIES}")
+ unset(PYTHON_LIBRARIES_DEBUG)
else()
- target_link_libraries(${target} ${PYTHON_LIBRARY})
+ target_link_libraries(${target} ${PYTHON_LIBRARIES})
endif()
endif()
@@ -142,14 +231,18 @@ macro(setup_liblinks
target_link_libraries(${target} ${GLEW_LIBRARY})
endif()
- target_link_libraries(${target} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES})
- target_link_libraries(${target} ${FREETYPE_LIBRARY})
+ target_link_libraries(${target}
+ ${OPENGL_glu_LIBRARY}
+ ${JPEG_LIBRARIES}
+ ${PNG_LIBRARIES}
+ ${ZLIB_LIBRARIES}
+ ${FREETYPE_LIBRARY})
if(WITH_INTERNATIONAL)
target_link_libraries(${target} ${GETTEXT_LIB})
if(WIN32 AND NOT UNIX)
- target_link_libraries(${target} ${ICONV_LIB})
+ target_link_libraries(${target} ${ICONV_LIBRARIES})
endif()
endif()
@@ -157,71 +250,72 @@ macro(setup_liblinks
target_link_libraries(${target} ${OPENAL_LIBRARY})
endif()
if(WITH_FFTW3)
- target_link_libraries(${target} ${FFTW3_LIB})
+ target_link_libraries(${target} ${FFTW3_LIBRARIES})
endif()
if(WITH_JACK)
- target_link_libraries(${target} ${JACK_LIB})
+ target_link_libraries(${target} ${JACK_LIBRARIES})
endif()
if(WITH_CODEC_SNDFILE)
- target_link_libraries(${target} ${SNDFILE_LIB})
+ target_link_libraries(${target} ${SNDFILE_LIBRARIES})
endif()
if(WITH_SAMPLERATE)
- target_link_libraries(${target} ${LIBSAMPLERATE_LIB})
+ target_link_libraries(${target} ${SAMPLERATE_LIBRARIES})
endif()
if(WITH_SDL)
target_link_libraries(${target} ${SDL_LIBRARY})
endif()
if(WITH_CODEC_QUICKTIME)
- target_link_libraries(${target} ${QUICKTIME_LIB})
+ target_link_libraries(${target} ${QUICKTIME_LIBRARIES})
endif()
if(WITH_IMAGE_TIFF)
target_link_libraries(${target} ${TIFF_LIBRARY})
endif()
if(WITH_IMAGE_OPENEXR)
if(WIN32 AND NOT UNIX)
- foreach(loop_var ${OPENEXR_LIB})
- target_link_libraries(${target} debug ${loop_var}_d)
- target_link_libraries(${target} optimized ${loop_var})
- endforeach()
+ file_list_suffix(OPENEXR_LIBRARIES_DEBUG "${OPENEXR_LIBRARIES}" "_d")
+ target_link_libraries_debug(${target} "${OPENEXR_LIBRARIES_DEBUG}")
+ target_link_libraries_optimized(${target} "${OPENEXR_LIBRARIES}")
+ unset(OPENEXR_LIBRARIES_DEBUG)
else()
- target_link_libraries(${target} ${OPENEXR_LIB})
+ target_link_libraries(${target} ${OPENEXR_LIBRARIES})
endif()
endif()
if(WITH_IMAGE_OPENJPEG AND UNIX AND NOT APPLE)
- target_link_libraries(${target} ${OPENJPEG_LIB})
- endif()
- if(WITH_LCMS)
- target_link_libraries(${target} ${LCMS_LIBRARY})
+ target_link_libraries(${target} ${OPENJPEG_LIBRARIES})
endif()
if(WITH_CODEC_FFMPEG)
- target_link_libraries(${target} ${FFMPEG_LIB})
+ target_link_libraries(${target} ${FFMPEG_LIBRARIES})
endif()
if(WITH_OPENCOLLADA)
if(WIN32 AND NOT UNIX)
- foreach(loop_var ${OPENCOLLADA_LIB})
- target_link_libraries(${target} debug ${loop_var}_d)
- target_link_libraries(${target} optimized ${loop_var})
- endforeach()
- target_link_libraries(${target} debug ${PCRE_LIB}_d)
- target_link_libraries(${target} optimized ${PCRE_LIB})
+ file_list_suffix(OPENCOLLADA_LIBRARIES_DEBUG "${OPENCOLLADA_LIBRARIES}" "_d")
+ target_link_libraries_debug(${target} "${OPENCOLLADA_LIBRARIES_DEBUG}")
+ target_link_libraries_optimized(${target} "${OPENCOLLADA_LIBRARIES}")
+ unset(OPENCOLLADA_LIBRARIES_DEBUG)
+
+ file_list_suffix(PCRE_LIB_DEBUG "${PCRE_LIB}" "_d")
+ target_link_libraries_debug(${target} "${PCRE_LIB_DEBUG}")
+ target_link_libraries_optimized(${target} "${PCRE_LIB}")
+ unset(PCRE_LIB_DEBUG)
+
if(EXPAT_LIB)
- target_link_libraries(${target} debug ${EXPAT_LIB}_d)
- target_link_libraries(${target} optimized ${EXPAT_LIB})
+ file_list_suffix(EXPAT_LIB_DEBUG "${EXPAT_LIB}" "_d")
+ target_link_libraries_debug(${target} "${EXPAT_LIB_DEBUG}")
+ target_link_libraries_optimized(${target} "${EXPAT_LIB}")
+ unset(EXPAT_LIB_DEBUG)
endif()
else()
- target_link_libraries(${target} ${OPENCOLLADA_LIB})
- target_link_libraries(${target} ${PCRE_LIB})
- target_link_libraries(${target} ${EXPAT_LIB})
+ target_link_libraries(${target}
+ ${OPENCOLLADA_LIBRARIES}
+ ${PCRE_LIB}
+ ${EXPAT_LIB})
endif()
endif()
- if(WITH_LCMS)
- if(WIN32 AND NOT UNIX)
- target_link_libraries(${target} debug ${LCMS_LIB}_d)
- target_link_libraries(${target} optimized ${LCMS_LIB})
- endif()
+ if(WITH_MEM_JEMALLOC)
+ target_link_libraries(${target} ${JEMALLOC_LIBRARIES})
endif()
if(WIN32 AND NOT UNIX)
- target_link_libraries(${target} ${PTHREADS_LIB})
+ target_link_libraries(${target} ${PTHREADS_LIBRARIES})
endif()
endmacro()
@@ -394,3 +488,80 @@ macro(get_blender_version)
# message(STATUS "Version (Internal): ${BLENDER_VERSION}.${BLENDER_SUBVERSION}, Version (external): ${BLENDER_VERSION}${BLENDER_VERSION_CHAR}-${BLENDER_VERSION_CYCLE}")
endmacro()
+
+
+# hacks to override initial project settings
+# these macros must be called directly before/after project(Blender)
+macro(blender_project_hack_pre)
+ # ----------------
+ # MINGW HACK START
+ # ignore system set flag, use our own
+ # must be before project(...)
+ # if the user wants to add their own its ok after first run.
+ if(DEFINED CMAKE_C_STANDARD_LIBRARIES)
+ set(_reset_standard_libraries OFF)
+ else()
+ set(_reset_standard_libraries ON)
+ endif()
+
+ # ------------------
+ # GCC -O3 HACK START
+ # needed because O3 can cause problems but
+ # allow the builder to set O3 manually after.
+ if(DEFINED CMAKE_C_FLAGS_RELEASE)
+ set(_reset_standard_cflags_rel OFF)
+ else()
+ set(_reset_standard_cflags_rel ON)
+ endif()
+ if(DEFINED CMAKE_CXX_FLAGS_RELEASE)
+ set(_reset_standard_cxxflags_rel OFF)
+ else()
+ set(_reset_standard_cxxflags_rel ON)
+ endif()
+endmacro()
+
+
+macro(blender_project_hack_post)
+ # --------------
+ # MINGW HACK END
+ if (_reset_standard_libraries)
+ # Must come after project(...)
+ #
+ # MINGW workaround for -ladvapi32 being included which surprisingly causes
+ # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender
+ # with a meaningless stack trace. by overriding this flag we ensure we only
+ # have libs we define and that cmake & scons builds match.
+ set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
+ mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES)
+ mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES)
+ endif()
+ unset(_reset_standard_libraries)
+
+
+ # ----------------
+ # GCC -O3 HACK END
+ if(_reset_standard_cflags_rel)
+ string(REGEX REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE)
+ mark_as_advanced(CMAKE_C_FLAGS_RELEASE)
+ endif()
+
+ if(_reset_standard_cxxflags_rel)
+ string(REGEX REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE)
+ mark_as_advanced(CMAKE_CXX_FLAGS_RELEASE)
+ endif()
+
+ unset(_reset_standard_cflags_rel)
+ unset(_reset_standard_cxxflags_rel)
+
+ # ------------------------------------------------------------------
+ # workaround for omission in cmake 2.8.4's GNU.cmake, fixed in 2.8.5
+ if(CMAKE_COMPILER_IS_GNUCC)
+ if(NOT DARWIN)
+ set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
+ endif()
+ endif()
+
+endmacro()