1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
if(NOT HAVE_JULIA)
message(STATUS "Julia not found. Not compiling Julia Bindings. ${HAVE_JULIA}")
ocv_module_disable(julia)
elseif(NOT PYTHON_DEFAULT_EXECUTABLE)
message(WARNING "Python required for Julia bindings...disabling")
ocv_module_disable(julia)
endif()
# WARN_MIXED_PRECISION
macro(WARN_MIXED_PRECISION COMPILER_BITNESS JULIA_BITNESS)
set(MSG "Your compiler is ${COMPILER_BITNESS}-bit")
set(MSG "${MSG} but your version of Julia is ${JULIA_BITNESS}-bit.")
set(MSG "${MSG} To build Julia bindings, please switch to a ${JULIA_BITNESS}-bit compiler.")
message(WARNING ${MSG})
endmacro()
math(EXPR ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
if (${ARCH} EQUAL 32 AND ${Julia_WORD_SIZE} MATCHES "64")
warn_mixed_precision("32" "64")
ocv_module_disable(julia)
return()
elseif (${ARCH} EQUAL 64 AND NOT ${Julia_WORD_SIZE} MATCHES "64")
warn_mixed_precision("64" "32")
ocv_module_disable(julia)
return()
endif()
if(NOT JlCxx_DIR)
execute_process(
COMMAND "${Julia_EXECUTABLE}" --startup-file=no -e "using CxxWrap; print(CxxWrap.CxxWrapCore.prefix_path())"
OUTPUT_VARIABLE JlCxx_DIR
)
endif()
if(JlCxx_DIR)
if(EXISTS ${JlCxx_DIR}/JlCxxConfig.cmake)
else()
message(STATUS "JlCxx found but not source build - disabling Julia module")
ocv_module_disable(julia)
endif()
endif()
find_package(JlCxx QUIET)
if(NOT JlCxx_FOUND)
message(STATUS "JlCxx not found")
ocv_module_disable(julia)
return()
else()
message(STATUS "JlCxx_DIR: ${JlCxx_DIR}")
endif()
set(JlCxx_DIR "${JlCxx_DIR}" CACHE STRING ADVANCED)
set(HAVE_JULIA "YES" CACHE STRING ADVANCED)
set(the_description "The Julia bindings")
ocv_add_module(
julia
BINDINGS
OPTIONAL
opencv_core
opencv_imgproc
opencv_imgcodecs
opencv_highgui
opencv_videoio
opencv_dnn
opencv_features2d
opencv_objdetect
opencv_calib3d
)
set(HDR_PARSER_PATH ${CMAKE_SOURCE_DIR}/modules/python/src2/hdr_parser.py)
set(opencv_hdrs "")
foreach(m ${OPENCV_MODULES_BUILD})
list(APPEND opencv_hdrs ${OPENCV_MODULE_${m}_HEADERS})
endforeach(m)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/gen/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/gen)
file(COPY ${HDR_PARSER_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/gen)
message(STATUS "Generating Julia Binding Files")
execute_process(
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen"
COMMAND ${PYTHON_DEFAULT_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/gen/gen_all.py" ${CMAKE_SOURCE_DIR}/modules ${OPENCV_MODULES_BUILD}
)
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/gen/cpp_files/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/gen/autogen_cpp)
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/gen/jl_cxx_files/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/gen/autogen_jl)
ocv_glob_module_sources()
ocv_module_include_directories()
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wmissing-prototypes -Wmissing-declarations)
ocv_add_library(${the_module} SHARED ${OPENCV_MODULE_${the_module}_HEADERS}
${OPENCV_MODULE_${the_module}_SOURCES}
"${CMAKE_CURRENT_BINARY_DIR}/gen/autogen_cpp/cv_core.cpp")
if(NOT JULIA_PKG_INSTALL_PATH)
set(JULIA_PKG_INSTALL_PATH ${CMAKE_BINARY_DIR})
endif()
set(JULIA_PKG_INSTALL_PATH_HOOK ${JULIA_PKG_INSTALL_PATH} CACHE STRING "" FORCE)
mark_as_advanced(JULIA_PKG_INSTALL_PATH_HOOK)
message(STATUS "Installing ${the_module} bindings at ${JULIA_PKG_INSTALL_PATH}")
install(DIRECTORY package/ DESTINATION ${JULIA_PKG_INSTALL_PATH})
install(TARGETS ${the_module} LIBRARY DESTINATION ${JULIA_PKG_INSTALL_PATH}/OpenCV/src/lib)
if(JULIA_PKG_INSTALL_ENV)
set(JULIA_PKG_EXECS "Pkg.activate(${JULIA_PKG_INSTALL_ENV});${JULIA_PKG_EXECS}")
endif()
set(JULIA_COMMAND "\"${Julia_EXECUTABLE}\" -e \"using Pkg; ${JULIA_PKG_EXECS}\"")
# message(STATUS "Installing Julia bindings using ${JULIA_COMMAND}")
if(NOT INSTALL_CREATE_DISTRIB)
install(CODE "
set(JULIA_PKG_PATH \"${JULIA_PKG_INSTALL_PATH}/OpenCV\")
execute_process(COMMAND \"${Julia_EXECUTABLE}\" ${CMAKE_CURRENT_LIST_DIR}/package/install_package.jl \${JULIA_PKG_PATH} OUTPUT_VARIABLE JULIA_INSTALL_OUT)
message(STATUS \"Install output: \${JULIA_INSTALL_OUT}\")
")
endif()
# ocv_create_module()
# ocv_add_accuracy_tests()
# ocv_add_perf_tests()
ocv_add_samples()
message(STATUS ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK})
ocv_target_link_libraries(${the_module} PUBLIC ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}
INTERFACE ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK}
)
ocv_target_link_libraries(${the_module} PUBLIC ${OPENCV_MODULE_${the_module}_DEPS_EXT}
INTERFACE ${OPENCV_MODULE_${the_module}_DEPS_EXT}
)
ocv_target_link_libraries(${the_module} PRIVATE ${OPENCV_LINKER_LIBS} ${OPENCV_HAL_LINKER_LIBS} ${IPP_LIBS} ${ARGN})
ocv_target_link_libraries(${the_module} JlCxx::cxxwrap_julia)
ocv_target_link_libraries(${the_module} JlCxx::cxxwrap_julia_stl)
# targets# opencv_julia_sources --> opencv_julia
add_custom_command(TARGET ${the_module}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/package/OpenCV ${CMAKE_BINARY_DIR}/OpenCV
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/gen/autogen_jl/ ${CMAKE_BINARY_DIR}/OpenCV/src
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${the_module}> ${CMAKE_BINARY_DIR}/OpenCV/src/lib/libopencv_julia
COMMENT "Copying over julia package"
)
if (BUILD_TESTS)
add_subdirectory(test)
endif()
|