cmakelists_tbb.txt 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. cmake_minimum_required (VERSION 2.8)
  2. project(tbb CXX)
  3. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  4. message(STATUS "Setting build type to 'Release' as none was specified.")
  5. set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
  6. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
  7. "MinSizeRel" "RelWithDebInfo")
  8. endif()
  9. include_directories(include src src/rml/include )
  10. option(TBB_BUILD_SHARED "Build TBB shared library" ON)
  11. option(TBB_BUILD_STATIC "Build TBB static library" ON)
  12. option(TBB_BUILD_TBBMALLOC "Build TBB malloc library" ON)
  13. option(TBB_BUILD_TBBMALLOC_PROXY "Build TBB malloc proxy library" ON)
  14. if(APPLE)
  15. set(CMAKE_MACOSX_RPATH ON)
  16. endif()
  17. file(GLOB tbb_src "${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/old/*.cpp")
  18. list(APPEND tbb_src ${CMAKE_CURRENT_SOURCE_DIR}/src/rml/client/rml_tbb.cpp)
  19. file(GLOB to_remove "${CMAKE_CURRENT_SOURCE_DIR}/src/old/test*.cpp")
  20. list(REMOVE_ITEM tbb_src ${to_remove})
  21. set(tbbmalloc_static_src
  22. src/tbbmalloc/backend.cpp
  23. src/tbbmalloc/large_objects.cpp
  24. src/tbbmalloc/backref.cpp
  25. src/tbbmalloc/tbbmalloc.cpp
  26. src/tbbmalloc/frontend.cpp
  27. src/tbb/itt_notify.cpp)
  28. set(tbbmalloc_src ${tbbmalloc_static_src})
  29. set(tbbmalloc_proxy_src
  30. src/tbbmalloc/proxy.cpp
  31. src/tbbmalloc/tbb_function_replacement.cpp)
  32. if (NOT APPLE)
  33. add_definitions(-DDO_ITT_NOTIFY)
  34. else()
  35. # Disable annoying "has no symbols" warnings
  36. set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
  37. set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
  38. set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
  39. set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
  40. endif()
  41. if (UNIX)
  42. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -DUSE_PTHREAD")
  43. if(NOT CMAKE_CXX_FLAGS MATCHES "-mno-rtm")
  44. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mrtm")
  45. endif()
  46. if (APPLE)
  47. set(ARCH_PREFIX "mac")
  48. else()
  49. set(ARCH_PREFIX "lin")
  50. endif()
  51. if (CMAKE_SIZEOF_VOID_P EQUAL 8)
  52. set(ARCH_PREFIX "${ARCH_PREFIX}64")
  53. else()
  54. set(ARCH_PREFIX "${ARCH_PREFIX}32")
  55. endif()
  56. set(ENABLE_RTTI "-frtti -fexceptions ")
  57. set(DISABLE_RTTI "-fno-rtti -fno-exceptions ")
  58. elseif(WIN32)
  59. cmake_minimum_required (VERSION 3.1)
  60. enable_language(ASM_MASM)
  61. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS- /Zc:wchar_t /Zc:forScope /DUSE_WINTHREAD")
  62. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_CRT_SECURE_NO_DEPRECATE /D_WIN32_WINNT=0x0600 /volatile:iso")
  63. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4800 /wd4146 /wd4244 /wd4018")
  64. if (CMAKE_SIZEOF_VOID_P EQUAL 8)
  65. list(APPEND tbb_src src/tbb/intel64-masm/atomic_support.asm
  66. src/tbb/intel64-masm/itsx.asm src/tbb/intel64-masm/intel64_misc.asm)
  67. list(APPEND tbbmalloc_src src/tbb/intel64-masm/atomic_support.asm)
  68. set(CMAKE_ASM_MASM_FLAGS "/DEM64T=1")
  69. set(ARCH_PREFIX "win64")
  70. else()
  71. list(APPEND tbb_src src/tbb/ia32-masm/atomic_support.asm
  72. src/tbb/ia32-masm/itsx.asm src/tbb/ia32-masm/lock_byte.asm)
  73. list(APPEND tbbmalloc_src src/tbb/ia32-masm/atomic_support.asm)
  74. set(ARCH_PREFIX "win32")
  75. endif()
  76. set(ENABLE_RTTI "/EHsc /GR ")
  77. set(DISABLE_RTTI "/EHs- /GR- ")
  78. endif()
  79. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  80. include(CheckCXXCompilerFlag)
  81. check_cxx_compiler_flag("-flifetime-dse=1" SUPPORTS_FLIFETIME)
  82. if (SUPPORTS_FLIFETIME)
  83. add_definitions(-flifetime-dse=1)
  84. endif()
  85. endif()
  86. # Linker export definitions
  87. if (WIN32)
  88. add_custom_command(OUTPUT tbb.def
  89. COMMAND ${CMAKE_CXX_COMPILER} /TC /EP ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include > tbb.def
  90. MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
  91. COMMENT "Preprocessing tbb.def"
  92. )
  93. add_custom_command(OUTPUT tbbmalloc.def
  94. COMMAND ${CMAKE_CXX_COMPILER} /TC /EP ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include > tbbmalloc.def
  95. MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
  96. COMMENT "Preprocessing tbbmalloc.def"
  97. )
  98. else()
  99. add_custom_command(OUTPUT tbb.def
  100. COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbb.def
  101. MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/${ARCH_PREFIX}-tbb-export.def
  102. COMMENT "Preprocessing tbb.def"
  103. )
  104. add_custom_command(OUTPUT tbbmalloc.def
  105. COMMAND ${CMAKE_CXX_COMPILER} -xc++ -E ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def -I ${CMAKE_CURRENT_SOURCE_DIR}/include -o tbbmalloc.def
  106. MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/tbbmalloc/${ARCH_PREFIX}-tbbmalloc-export.def
  107. COMMENT "Preprocessing tbbmalloc.def"
  108. )
  109. endif()
  110. add_custom_target(tbb_def_files DEPENDS tbb.def tbbmalloc.def)
  111. # TBB library
  112. if (TBB_BUILD_STATIC)
  113. add_library(tbb_static STATIC ${tbb_src})
  114. set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1")
  115. set_property(TARGET tbb_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_SOURCE_DIRECTLY_INCLUDED=1")
  116. set_property(TARGET tbb_static APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
  117. install(TARGETS tbb_static ARCHIVE DESTINATION lib)
  118. endif()
  119. if (TBB_BUILD_SHARED)
  120. add_library(tbb SHARED ${tbb_src})
  121. set_property(TARGET tbb APPEND PROPERTY COMPILE_DEFINITIONS "__TBB_BUILD=1")
  122. set_property(TARGET tbb APPEND_STRING PROPERTY COMPILE_FLAGS ${ENABLE_RTTI})
  123. add_dependencies(tbb tbb_def_files)
  124. if (APPLE)
  125. set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
  126. elseif(UNIX)
  127. set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
  128. elseif(WIN32)
  129. set_property(TARGET tbb APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbb.def")
  130. endif()
  131. install(TARGETS tbb DESTINATION lib)
  132. endif()
  133. if(CMAKE_COMPILER_IS_GNUCC)
  134. # Quench a warning on GCC
  135. set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/governor.cpp COMPILE_FLAGS "-Wno-missing-field-initializers ")
  136. elseif(MSVC)
  137. # Quench a warning on MSVC
  138. set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/tbb/scheduler.cpp COMPILE_FLAGS "/wd4458 ")
  139. endif()
  140. if(TBB_BUILD_TBBMALLOC)
  141. # TBB malloc library
  142. if (TBB_BUILD_STATIC)
  143. add_library(tbbmalloc_static STATIC ${tbbmalloc_static_src})
  144. set_property(TARGET tbbmalloc_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
  145. set_property(TARGET tbbmalloc_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
  146. install(TARGETS tbbmalloc_static ARCHIVE DESTINATION lib)
  147. endif()
  148. if (TBB_BUILD_SHARED)
  149. add_library(tbbmalloc SHARED ${tbbmalloc_src})
  150. set_property(TARGET tbbmalloc APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
  151. set_property(TARGET tbbmalloc APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
  152. add_dependencies(tbbmalloc tbb_def_files)
  153. if (APPLE)
  154. set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
  155. elseif(UNIX)
  156. set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "-Wl,-version-script,${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
  157. elseif(WIN32)
  158. set_property(TARGET tbbmalloc APPEND PROPERTY LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/tbbmalloc.def")
  159. endif()
  160. install(TARGETS tbbmalloc DESTINATION lib)
  161. endif()
  162. endif()
  163. if(TBB_BUILD_TBBMALLOC_PROXY)
  164. # TBB malloc proxy library
  165. if (TBB_BUILD_STATIC)
  166. add_library(tbbmalloc_proxy_static STATIC ${tbbmalloc_proxy_src})
  167. set_property(TARGET tbbmalloc_proxy_static APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
  168. set_property(TARGET tbbmalloc_proxy_static APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
  169. link_libraries(tbbmalloc_proxy_static tbbmalloc)
  170. install(TARGETS tbbmalloc_proxy_static ARCHIVE DESTINATION lib)
  171. endif()
  172. if (TBB_BUILD_SHARED)
  173. add_library(tbbmalloc_proxy SHARED ${tbbmalloc_proxy_src})
  174. set_property(TARGET tbbmalloc_proxy APPEND PROPERTY COMPILE_DEFINITIONS "__TBBMALLOC_BUILD=1")
  175. set_property(TARGET tbbmalloc_proxy APPEND_STRING PROPERTY COMPILE_FLAGS ${DISABLE_RTTI})
  176. link_libraries(tbbmalloc_proxy tbbmalloc)
  177. install(TARGETS tbbmalloc_proxy DESTINATION lib)
  178. endif()
  179. endif()
  180. install(DIRECTORY include/tbb DESTINATION include)