diff options
Diffstat (limited to 'vcpkg/ports/vlfeat')
| -rw-r--r-- | vcpkg/ports/vlfeat/CMakeLists.txt | 141 | ||||
| -rw-r--r-- | vcpkg/ports/vlfeat/expose_missing_symbols.patch | 81 | ||||
| -rw-r--r-- | vcpkg/ports/vlfeat/fix-openmp-build.patch | 11 | ||||
| -rw-r--r-- | vcpkg/ports/vlfeat/portfile.cmake | 43 | ||||
| -rw-r--r-- | vcpkg/ports/vlfeat/vcpkg.json | 22 |
5 files changed, 298 insertions, 0 deletions
diff --git a/vcpkg/ports/vlfeat/CMakeLists.txt b/vcpkg/ports/vlfeat/CMakeLists.txt new file mode 100644 index 0000000..4e4edb8 --- /dev/null +++ b/vcpkg/ports/vlfeat/CMakeLists.txt @@ -0,0 +1,141 @@ +cmake_minimum_required(VERSION 3.10) +project(vlfeat LANGUAGES C) + +if(NOT DEFINED CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") +endif() + +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D__LITTLE_ENDIAN__) + add_compile_options(/Zp8) + add_compile_options(/wd4146) + if(CMAKE_C_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W1" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + endif() +endif() + +if(CMAKE_COMPILER_IS_GNUCC) + add_compile_options(-Wno-unused-function) + add_compile_options(-Wno-long-long) + add_compile_options(-Wno-variadic-macros) +endif() + +if(USE_SSE) + add_definitions(-D__SSE2__) + set(SSE2_VL_C_FILES "vl/mathop_sse2.c" "vl/imopv_sse2.c") + set(SSE2_VL_H_FILES "vl/mathop_sse2.h" "vl/imopv_sse2.h") +else() + add_definitions(-DVL_DISABLE_SSE2) +endif() + +if(USE_AVX) + set(AVX_VL_C_FILES "vl/mathop_avx.c") + set(AVX_VL_H_FILES "vl/mathop_avx.h") +else() + add_definitions(-DVL_DISABLE_AVX) +endif() + + +set (C_SOURCES + vl/aib.c + vl/array.c + vl/covdet.c + vl/dsift.c + vl/fisher.c + vl/generic.c + vl/getopt_long.c + vl/gmm.c + vl/hikmeans.c + vl/hog.c + vl/homkermap.c + vl/host.c + vl/ikmeans.c + vl/imopv.c + vl/kdtree.c + vl/kmeans.c + vl/lbp.c + vl/liop.c + vl/mathop.c + ${AVX_VL_C_FILES} + ${SSE2_VL_C_FILES} + vl/mser.c + vl/pgm.c + vl/quickshift.c + vl/random.c + vl/rodrigues.c + vl/scalespace.c + vl/sift.c + vl/slic.c + vl/stringop.c + vl/svm.c + vl/svmdataset.c + vl/vlad.c +) + +set (H_SOURCES + vl/aib.h + vl/array.h + vl/covdet.h + vl/dsift.h + vl/fisher.h + vl/generic.h + vl/getopt_long.h + vl/gmm.h + vl/heap-def.h + vl/hikmeans.h + vl/hog.h + vl/homkermap.h + vl/host.h + vl/ikmeans.h + vl/imopv.h + vl/kdtree.h + vl/kmeans.h + vl/lbp.h + vl/liop.h + vl/mathop.h + ${AVX_VL_H_FILES} + ${SSE2_VL_H_FILES} + vl/mser.h + vl/pgm.h + vl/qsort-def.h + vl/quickshift.h + vl/random.h + vl/rodrigues.h + vl/scalespace.h + vl/shuffle-def.h + vl/sift.h + vl/slic.h + vl/stringop.h + vl/svm.h + vl/svmdataset.h + vl/vlad.h +) + +include(GNUInstallDirs) + +add_library(vl ${C_SOURCES} ${H_SOURCES}) +set_property(TARGET vl PROPERTY POSITION_INDEPENDENT_CODE ON) +target_compile_definitions(vl PRIVATE -DVL_BUILD_DLL) +target_include_directories(vl PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) +target_compile_features(vl PRIVATE c_std_99) + +if(ENABLE_OPENMP) + find_package(OpenMP REQUIRED) + # PRIVATE because '#pragma omp' is only used in .c files + target_link_libraries(vl PRIVATE OpenMP::OpenMP_C) +endif() + +install(TARGETS vl + EXPORT vlfeatTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) +install(FILES ${H_SOURCES} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/vl") + +install(EXPORT vlfeatTargets + FILE vlfeatConfig.cmake + NAMESPACE unofficial::vlfeat:: + DESTINATION "share/vlfeat" +) diff --git a/vcpkg/ports/vlfeat/expose_missing_symbols.patch b/vcpkg/ports/vlfeat/expose_missing_symbols.patch new file mode 100644 index 0000000..b7cbc16 --- /dev/null +++ b/vcpkg/ports/vlfeat/expose_missing_symbols.patch @@ -0,0 +1,81 @@ +diff --git a/vl/generic.c b/vl/generic.c +index c6f84a9..8617ed2 100644 +--- a/vl/generic.c ++++ b/vl/generic.c +@@ -1513,13 +1513,13 @@ vl_thread_specific_state_delete (VlThreadState * self) + */ + + #if (defined(VL_OS_LINUX) || defined(VL_OS_MACOSX)) && defined(VL_COMPILER_GNUC) +-static void vl_constructor () __attribute__ ((constructor)) ; +-static void vl_destructor () __attribute__ ((destructor)) ; ++//static void vl_constructor () __attribute__ ((constructor)) ; ++//static void vl_destructor () __attribute__ ((destructor)) ; + #endif + + #if defined(VL_OS_WIN) +-static void vl_constructor () ; +-static void vl_destructor () ; ++//static void vl_constructor () ; ++//static void vl_destructor () ; + + BOOL WINAPI DllMain( + HINSTANCE hinstDLL, // handle to DLL module +@@ -1563,7 +1563,7 @@ BOOL WINAPI DllMain( + /* ---------------------------------------------------------------- */ + + /** @internal @brief Initialize VLFeat state */ +-static void ++void + vl_constructor (void) + { + VlState * state ; +@@ -1637,7 +1637,7 @@ vl_constructor (void) + } + + /** @internal @brief Destruct VLFeat */ +-static void ++void + vl_destructor () + { + VlState * state ; +diff --git a/vl/generic.h b/vl/generic.h +index 4ef87f2..30a974e 100644 +--- a/vl/generic.h ++++ b/vl/generic.h +@@ -206,5 +206,7 @@ VL_EXPORT double vl_toc (void) ; + VL_EXPORT double vl_get_cpu_time (void) ; + /** @} */ + ++VL_EXPORT void vl_constructor(); ++VL_EXPORT void vl_destructor(); + /* VL_GENERIC_H */ + #endif +diff --git a/vl/sift.c b/vl/sift.c +index 03963fe..6477a81 100644 +--- a/vl/sift.c ++++ b/vl/sift.c +@@ -1443,7 +1443,7 @@ vl_sift_detect (VlSiftFilt * f) + ** @remark The minimum octave size is 2x2xS. + **/ + +-static void ++void + update_gradient (VlSiftFilt *f) + { + int s_min = f->s_min ; +diff --git a/vl/sift.h b/vl/sift.h +index 50e03f4..f9558ad 100644 +--- a/vl/sift.h ++++ b/vl/sift.h +@@ -139,6 +139,11 @@ void vl_sift_keypoint_init (VlSiftFilt const *f, + double sigma) ; + /** @} */ + ++VL_EXPORT ++void vl_sift_update_gradient(VlSiftFilt* f); ++ ++#define update_gradient vl_sift_update_gradient ++ + /** @name Retrieve data and parameters + ** @{ + **/ diff --git a/vcpkg/ports/vlfeat/fix-openmp-build.patch b/vcpkg/ports/vlfeat/fix-openmp-build.patch new file mode 100644 index 0000000..2f8b2f7 --- /dev/null +++ b/vcpkg/ports/vlfeat/fix-openmp-build.patch @@ -0,0 +1,11 @@ +--- a/vl/kmeans.c ++++ b/vl/kmeans.c +@@ -669,7 +669,7 @@ VL_XCAT(_vl_kmeans_quantize_, SFX) + + #ifdef _OPENMP + #pragma omp parallel default(none) \ +- shared(self, distances, assignments, numData, distFn, data) \ ++ shared(self, distances, assignments, numData, distFn, data, vl_infinity_d) \ + num_threads(vl_get_max_threads()) + #endif + { diff --git a/vcpkg/ports/vlfeat/portfile.cmake b/vcpkg/ports/vlfeat/portfile.cmake new file mode 100644 index 0000000..7ff1f7d --- /dev/null +++ b/vcpkg/ports/vlfeat/portfile.cmake @@ -0,0 +1,43 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO vlfeat/vlfeat + REF 1b9075fc42fe54b42f0e937f8b9a230d8e2c7701 + SHA512 6d317a1a9496ccac80244553d555fe060b150ccc7ee397a353b64f3a8451f24d1f03d8c00ed04cd9fc2dc066a5c5089b03695c614cb43ffa09be363660278255 + PATCHES + expose_missing_symbols.patch + fix-openmp-build.patch +) + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + openmp ENABLE_OPENMP +) + +set(USE_SSE ON) +set(USE_AVX OFF) # feature is broken, so it's always off anyway + +if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm") + set(USE_SSE OFF) + set(USE_AVX OFF) +endif() + +file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DUSE_SSE=${USE_SSE} + -DUSE_AVX=${USE_AVX} + ${FEATURE_OPTIONS} +) + +vcpkg_cmake_install() +vcpkg_cmake_config_fixup() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/vl/host.h" "__declspec(dllimport)" "__declspec(dllexport)") +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" "${CURRENT_PACKAGES_DIR}/debug/share") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING") diff --git a/vcpkg/ports/vlfeat/vcpkg.json b/vcpkg/ports/vlfeat/vcpkg.json new file mode 100644 index 0000000..78fd67d --- /dev/null +++ b/vcpkg/ports/vlfeat/vcpkg.json @@ -0,0 +1,22 @@ +{ + "name": "vlfeat", + "version-date": "2020-07-10", + "port-version": 5, + "description": "An open library of computer vision algorithms", + "homepage": "https://www.vlfeat.org", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "features": { + "openmp": { + "description": "Enable OpenMP support" + } + } +} |