aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo-Chuan Hsieh <sunpoet@FreeBSD.org>2023-12-14 16:22:37 +0000
committerPo-Chuan Hsieh <sunpoet@FreeBSD.org>2023-12-14 17:03:06 +0000
commit1cf964ed6e83f5ff2b26c72f9afc7c346a5fda89 (patch)
tree806cd45bafacda4a5b91003d0d9da969157766d2
parentaba7329a240ead0a9e01ef917093ec39874bdf52 (diff)
downloadports-1cf964ed6e83f5ff2b26c72f9afc7c346a5fda89.tar.gz
ports-1cf964ed6e83f5ff2b26c72f9afc7c346a5fda89.zip
misc/caffe: Fix build with protobuf 22+
-rw-r--r--misc/caffe/Makefile5
-rw-r--r--misc/caffe/files/patch-protobuf77
2 files changed, 80 insertions, 2 deletions
diff --git a/misc/caffe/Makefile b/misc/caffe/Makefile
index 040ebe90ed01..02ca395819c9 100644
--- a/misc/caffe/Makefile
+++ b/misc/caffe/Makefile
@@ -36,8 +36,8 @@ RUN_DEPENDS= ${PYNUMPY} \
${PYTHON_PKGNAMEPREFIX}scipy>0:science/py-scipy@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}
-USES= cmake fortran pkgconfig python
-USE_CXXSTD= c++14
+USES= cmake compiler:c++17-lang fortran localbase:ldflags pkgconfig python
+USE_CXXSTD= c++17
USE_LDCONFIG= yes
USE_GITHUB= yes
@@ -46,6 +46,7 @@ GH_ACCOUNT= BVLC
CMAKE_ARGS= -DBLAS=Open \
-DPYTHON_EXECUTABLE=${PYTHON_CMD} \
-DFREEBSD_PYTHONPREFIX_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR}
+LDFLAGS+= -lpython${PYTHON_VER}
PORTSCOUT= limit:^[0-9].*[0-9]$$ # should begin and end with a digit to prevent tags like rcnn-release and rc5
diff --git a/misc/caffe/files/patch-protobuf b/misc/caffe/files/patch-protobuf
new file mode 100644
index 000000000000..b1139c7e1bb7
--- /dev/null
+++ b/misc/caffe/files/patch-protobuf
@@ -0,0 +1,77 @@
+--- src/caffe/layers/hdf5_data_layer.cpp.orig 2020-02-13 07:20:36 UTC
++++ src/caffe/layers/hdf5_data_layer.cpp
+@@ -7,7 +7,9 @@ TODO:
+ :: don't forget to update hdf5_daa_layer.cu accordingly
+ - add ability to shuffle filenames if flag is set
+ */
++#include <algorithm>
+ #include <fstream> // NOLINT(readability/streams)
++#include <random>
+ #include <string>
+ #include <vector>
+
+@@ -38,6 +40,9 @@ void HDF5DataLayer<Dtype>::LoadHDF5FileData(const char
+ const int MIN_DATA_DIM = 1;
+ const int MAX_DATA_DIM = INT_MAX;
+
++ std::random_device rd;
++ std::mt19937 g(rd());
++
+ for (int i = 0; i < top_size; ++i) {
+ hdf_blobs_[i] = shared_ptr<Blob<Dtype> >(new Blob<Dtype>());
+ // Allow reshape here, as we are loading data not params
+@@ -62,7 +67,7 @@ void HDF5DataLayer<Dtype>::LoadHDF5FileData(const char
+
+ // Shuffle if needed.
+ if (this->layer_param_.hdf5_data_param().shuffle()) {
+- std::random_shuffle(data_permutation_.begin(), data_permutation_.end());
++ std::shuffle(data_permutation_.begin(), data_permutation_.end(), g);
+ DLOG(INFO) << "Successfully loaded " << hdf_blobs_[0]->shape(0)
+ << " rows (shuffled)";
+ } else {
+@@ -73,6 +78,8 @@ void HDF5DataLayer<Dtype>::LoadHDF5FileData(const char
+ template <typename Dtype>
+ void HDF5DataLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
+ const vector<Blob<Dtype>*>& top) {
++ std::random_device rd;
++ std::mt19937 g(rd());
+ // Refuse transformation parameters since HDF5 is totally generic.
+ CHECK(!this->layer_param_.has_transform_param()) <<
+ this->type() << " does not transform data.";
+@@ -105,7 +112,7 @@ void HDF5DataLayer<Dtype>::LayerSetUp(const vector<Blo
+
+ // Shuffle if needed.
+ if (this->layer_param_.hdf5_data_param().shuffle()) {
+- std::random_shuffle(file_permutation_.begin(), file_permutation_.end());
++ std::shuffle(file_permutation_.begin(), file_permutation_.end(), g);
+ }
+
+ // Load the first HDF5 file and initialize the line counter.
+@@ -138,14 +145,16 @@ bool HDF5DataLayer<Dtype>::Skip() {
+
+ template<typename Dtype>
+ void HDF5DataLayer<Dtype>::Next() {
++ std::random_device rd;
++ std::mt19937 g(rd());
+ if (++current_row_ == hdf_blobs_[0]->shape(0)) {
+ if (num_files_ > 1) {
+ ++current_file_;
+ if (current_file_ == num_files_) {
+ current_file_ = 0;
+ if (this->layer_param_.hdf5_data_param().shuffle()) {
+- std::random_shuffle(file_permutation_.begin(),
+- file_permutation_.end());
++ std::shuffle(file_permutation_.begin(),
++ file_permutation_.end(), g);
+ }
+ DLOG(INFO) << "Looping around to first file.";
+ }
+@@ -154,7 +163,7 @@ void HDF5DataLayer<Dtype>::Next() {
+ }
+ current_row_ = 0;
+ if (this->layer_param_.hdf5_data_param().shuffle())
+- std::random_shuffle(data_permutation_.begin(), data_permutation_.end());
++ std::shuffle(data_permutation_.begin(), data_permutation_.end(), g);
+ }
+ offset_++;
+ }