CMakeLists.txt 3.0 KB
Newer Older
1
set(the_description "All the selected OpenCV modules in a single binary")
2 3
set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
set(BUILD_opencv_world_INIT OFF)
4

5
ocv_add_module(world opencv_core)
6 7

if(MSVC)
8 9 10 11
  foreach(_var CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_MODULE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE
               CMAKE_EXE_LINKER_FLAGS_DEBUG   CMAKE_MODULE_LINKER_FLAGS_DEBUG   CMAKE_SHARED_LINKER_FLAGS_DEBUG)
    string(REPLACE "/INCREMENTAL:NO" "/INCREMENTAL:YES" ${_var} "${${_var}}")
  endforeach()
12 13
endif()

14 15 16
ocv_glob_module_sources()
ocv_module_include_directories()
ocv_create_module(SKIP_LINK)
17

18
#TODO: try to use try_compile to find real object file extension/location
19
if(CMAKE_GENERATOR MATCHES "^Visual.*$")
20 21
  set(have_cfg 1)
  set(objpath0 "<MODULE_NAME>.dir/<CONFIGURATION>/<SRC_NAME_WE>.obj")
22
elseif (CMAKE_GENERATOR MATCHES Xcode)
23 24
  set(have_cfg 1)
  set(objpath0 "OpenCV.build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/<MODULE_NAME>.build/Objects-normal/$(CURRENT_ARCH)/<SRC_NAME_WE>.o")
25
else()
26 27 28 29 30
  set(have_cfg 0)
  set(objpath0 "CMakeFiles/<MODULE_NAME>.dir/<RELATIVE_SRC_NAME>.o")
  if(MINGW OR MSVC)
    set(objpath0 "${objpath0}bj")
  endif()
31 32
endif()

33 34 35 36 37 38 39 40 41 42 43 44 45 46
set(objlist "")
foreach(m ${OPENCV_MODULE_${the_module}_DEPS})
  # build order dependencies
  add_dependencies(${the_module} ${m})
  # link dependencies
  string(REGEX REPLACE "(general|debug|optimized);opencv_[^;]*(;|$)" "" _link_deps "${${m}_LIB_DEPENDS}")
  if(_link_deps)
    target_link_libraries(${the_module} ${_link_deps})
  endif()

  string(REGEX REPLACE "<MODULE_NAME>" "${m}" objpath1 "${${m}_BINARY_DIR}/${objpath0}")
  foreach(src ${OPENCV_MODULE_${m}_SOURCES})
    if(IS_ABSOLUTE "${src}")
      file(RELATIVE_PATH srcname "${OPENCV_MODULE_${m}_LOCATION}" "${src}")
47
    else()
48 49 50 51 52 53 54 55 56
      set(srcname "${src}")
    endif()
    string(REPLACE ".." "__" srcname "${srcname}")
    if(srcname MATCHES "\\.(cpp|mm|c|cxx|cc)$")
      get_filename_component(srcname_we ${srcname} NAME_WE)
      string(REGEX REPLACE <SRC_NAME_WE> "${srcname_we}" objpath2 "${objpath1}")
      string(REGEX REPLACE <RELATIVE_SRC_NAME> "${srcname}" objpath3 "${objpath2}")
      file(RELATIVE_PATH objpath4 "${CMAKE_CURRENT_BINARY_DIR}" "${objpath3}")
      list(APPEND objlist "\"${objpath4}\"")
57
    endif()
58
  endforeach()
59 60
endforeach()

61 62
string(REPLACE ";" " " objlist "${objlist}")

63
if(have_cfg)
64 65 66 67 68
  string(REGEX REPLACE "<CONFIGURATION>" "Debug" objlist_dbg "${objlist}")
  string(REGEX REPLACE "<CONFIGURATION>" "Release" objlist_rls "${objlist}")
  set_target_properties(${the_module} PROPERTIES
    LINK_FLAGS_DEBUG ${objlist_dbg}
    LINK_FLAGS_RELEASE ${objlist_rls})
69
else()
70 71 72 73
  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/world_objects.list" "${objlist}")
  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/world_objects.list" "${CMAKE_CURRENT_BINARY_DIR}/world_objects.rsp" OUTPUT_QUIET)
  set_target_properties(${the_module} PROPERTIES
    LINK_FLAGS @world_objects.rsp)
74 75 76
endif()

ocv_add_precompiled_headers(${the_module})