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