diff --git a/.gitignore b/.gitignore index 28f2aca854b..9c9155c8d4d 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,21 @@ LOCK LOG* CURRENT MANIFEST-* +windows/bin/ +*.opensdf +*.sdf +*.suo +*.dll +*.lib +windows/extern/*/include/ +windows/extern/*/lib/ +windows/extern/*/bin/ +windows/tmp/ +*.pdb +*.pyd +windows/python/caffe/__init__.py +windows/python/caffe/classifier.py +windows/python/caffe/detector.py +windows/python/caffe/draw.py +windows/python/caffe/io.py +windows/python/caffe/pycaffe.py diff --git a/include/caffe/layer_factory.hpp b/include/caffe/layer_factory.hpp index 32e849de0d2..5ef8625aa54 100644 --- a/include/caffe/layer_factory.hpp +++ b/include/caffe/layer_factory.hpp @@ -56,48 +56,20 @@ class LayerRegistry { typedef shared_ptr > (*Creator)(const LayerParameter&); typedef std::map CreatorRegistry; - static CreatorRegistry& Registry() { - static CreatorRegistry* g_registry_ = new CreatorRegistry(); - return *g_registry_; - } + static CreatorRegistry& Registry(); // Adds a creator. - static void AddCreator(const string& type, Creator creator) { - CreatorRegistry& registry = Registry(); - CHECK_EQ(registry.count(type), 0) - << "Layer type " << type << " already registered."; - registry[type] = creator; - } + static void AddCreator(const string& type, Creator creator); // Get a layer using a LayerParameter. - static shared_ptr > CreateLayer(const LayerParameter& param) { - if (Caffe::root_solver()) { - LOG(INFO) << "Creating layer " << param.name(); - } - const string& type = param.type(); - CreatorRegistry& registry = Registry(); - CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type - << " (known types: " << LayerTypeList() << ")"; - return registry[type](param); - } + static shared_ptr > CreateLayer(const LayerParameter& param); private: // Layer registry should never be instantiated - everything is done with its // static variables. - LayerRegistry() {} - - static string LayerTypeList() { - CreatorRegistry& registry = Registry(); - string layer_types; - for (typename CreatorRegistry::iterator iter = registry.begin(); - iter != registry.end(); ++iter) { - if (iter != registry.begin()) { - layer_types += ", "; - } - layer_types += iter->first; - } - return layer_types; - } + LayerRegistry(); + + static string LayerTypeList(); }; @@ -105,10 +77,7 @@ template class LayerRegisterer { public: LayerRegisterer(const string& type, - shared_ptr > (*creator)(const LayerParameter&)) { - // LOG(INFO) << "Registering layer type: " << type; - LayerRegistry::AddCreator(type, creator); - } + shared_ptr > (*creator)(const LayerParameter&)); }; diff --git a/include/caffe/layer_forcereg.hpp b/include/caffe/layer_forcereg.hpp new file mode 100644 index 00000000000..db2bd9f6b8b --- /dev/null +++ b/include/caffe/layer_forcereg.hpp @@ -0,0 +1,52 @@ +////////////////////////////////////////////////////////////////////////// +// This file must be included in every windows program / dll that is going +// to link libcaffe.lib. Without including this file the unused symbols +// will not be used and the layers are not registered. +////////////////////////////////////////////////////////////////////////// + +#ifdef _WIN32 + +#pragma once + +#include "caffe/vision_layers.hpp" + +namespace caffe +{ + REGISTER_LAYER_CLASS(AbsVal); + REGISTER_LAYER_CLASS(Accuracy); + REGISTER_LAYER_CLASS(ArgMax); + REGISTER_LAYER_CLASS(BNLL); + REGISTER_LAYER_CLASS(Concat); + REGISTER_LAYER_CLASS(ContrastiveLoss); + REGISTER_LAYER_CLASS(Data); + REGISTER_LAYER_CLASS(Deconvolution); + REGISTER_LAYER_CLASS(Dropout); + REGISTER_LAYER_CLASS(DummyData); + REGISTER_LAYER_CLASS(Eltwise); + REGISTER_LAYER_CLASS(EuclideanLoss); + REGISTER_LAYER_CLASS(Exp); + REGISTER_LAYER_CLASS(Flatten); + REGISTER_LAYER_CLASS(HDF5Data); + REGISTER_LAYER_CLASS(HDF5Output); + REGISTER_LAYER_CLASS(HingeLoss); + REGISTER_LAYER_CLASS(Im2col); + REGISTER_LAYER_CLASS(ImageData); + REGISTER_LAYER_CLASS(InfogainLoss); + REGISTER_LAYER_CLASS(InnerProduct); + REGISTER_LAYER_CLASS(MemoryData); + REGISTER_LAYER_CLASS(MultinomialLogisticLoss); + REGISTER_LAYER_CLASS(MVN); + REGISTER_LAYER_CLASS(Power); + REGISTER_LAYER_CLASS(PReLU); + REGISTER_LAYER_CLASS(Reshape); + REGISTER_LAYER_CLASS(SigmoidCrossEntropyLoss); + REGISTER_LAYER_CLASS(Silence); + REGISTER_LAYER_CLASS(Slice); + REGISTER_LAYER_CLASS(SoftmaxWithLoss); + REGISTER_LAYER_CLASS(Split); + REGISTER_LAYER_CLASS(SPP); + REGISTER_LAYER_CLASS(Threshold); + REGISTER_LAYER_CLASS(WindowData); +} + +#endif diff --git a/include/caffe/mkstemp.h b/include/caffe/mkstemp.h new file mode 100644 index 00000000000..a2488a83134 --- /dev/null +++ b/include/caffe/mkstemp.h @@ -0,0 +1,22 @@ +#ifdef _WIN32 + +/* mkstemp extracted from libc/sysdeps/posix/tempname.c. Copyright + (C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. */ + +#pragma once + +static const char letters[] = +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed + does not exist at the time of the call to mkstemp. TMPL is + overwritten with the result. */ +int mkstemp(char *tmpl); + +#endif \ No newline at end of file diff --git a/include/caffe/util/io.hpp b/include/caffe/util/io.hpp index 3a62c3c9fa9..51fb9393d22 100644 --- a/include/caffe/util/io.hpp +++ b/include/caffe/util/io.hpp @@ -12,6 +12,10 @@ #include "caffe/common.hpp" #include "caffe/proto/caffe.pb.h" +#ifdef _WIN32 +#include "caffe/mkstemp.h" +#endif + #define HDF5_NUM_DIMS 4 namespace caffe { @@ -37,7 +41,11 @@ inline void MakeTempDir(string* temp_dirname) { char* temp_dirname_cstr = new char[temp_dirname->size() + 1]; // NOLINT_NEXT_LINE(runtime/printf) strcpy(temp_dirname_cstr, temp_dirname->c_str()); - char* mkdtemp_result = mkdtemp(temp_dirname_cstr); +#ifndef _WIN32 + char* mkdtemp_result = mkdtemp(temp_dirname_cstr); +#else + errno_t mkdtemp_result = _mktemp_s(temp_dirname_cstr, sizeof(temp_dirname_cstr)); +#endif CHECK(mkdtemp_result != NULL) << "Failed to create a temporary directory at: " << *temp_dirname; *temp_dirname = temp_dirname_cstr; diff --git a/python/caffe/_caffe.cpp b/python/caffe/_caffe.cpp index dff7f627016..dcc80b823ee 100644 --- a/python/caffe/_caffe.cpp +++ b/python/caffe/_caffe.cpp @@ -16,6 +16,7 @@ #include "caffe/caffe.hpp" #include "caffe/python_layer.hpp" +#include "caffe/layer_forcereg.hpp" // Temporary solution for numpy < 1.7 versions: old macro, no promises. // You're strongly advised to upgrade to >= 1.7. diff --git a/src/caffe/common.cpp b/src/caffe/common.cpp index 7077f3789d7..b5cb9d6eeb8 100644 --- a/src/caffe/common.cpp +++ b/src/caffe/common.cpp @@ -3,6 +3,10 @@ #include #include +#ifdef _WIN32 +#include +#endif + #include "caffe/common.hpp" #include "caffe/util/rng.hpp" @@ -45,7 +49,9 @@ void GlobalInit(int* pargc, char*** pargv) { // Google logging. ::google::InitGoogleLogging(*(pargv)[0]); // Provide a backtrace on segfault. +#ifndef _WIN32 ::google::InstallFailureSignalHandler(); +#endif } #ifdef CPU_ONLY // CPU-only Caffe. diff --git a/src/caffe/layer_factory.cpp b/src/caffe/layer_factory.cpp index c7bb9643af6..c874fa8a532 100644 --- a/src/caffe/layer_factory.cpp +++ b/src/caffe/layer_factory.cpp @@ -11,6 +11,90 @@ namespace caffe { + +////////////////////////////////////////////////////////////////////////// +// Implementation of layer registration for windows must be in +// a specific object-unit. Otherwise the layer registration and +// creation fail. +////////////////////////////////////////////////////////////////////////// + +template class LayerRegistry ; +template class LayerRegistry ; + +template +LayerRegistry::LayerRegistry() +{ + +} + + +template +typename LayerRegistry::CreatorRegistry& LayerRegistry::Registry() +{ + static CreatorRegistry* g_registry_ = new CreatorRegistry(); + return *g_registry_; +} + + +template +void LayerRegistry::AddCreator(const string& type, Creator creator) +{ + CreatorRegistry& registry = Registry(); +#ifndef _WIN32 + CHECK_EQ(registry.count(type), 0) + << "Layer type " << type << " already registered."; +#else + // On windows this will happen, as the layers need to be explicitly + // registered. Once that explicit registration is done, the implicit + // layer registration is performed as well which in turn results + // to two registration calls for the same type. + if (registry.count(type) > 0) + return; +#endif + registry[type] = creator; +} + + +template +shared_ptr > LayerRegistry::CreateLayer(const LayerParameter& param) +{ + if (Caffe::root_solver()) { + LOG(INFO) << "Creating layer " << param.name(); + } + const string& type = param.type(); + CreatorRegistry& registry = Registry(); + CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type + << " (known types: " << LayerTypeList() << ")"; + return registry[type](param); +} + + +template +string LayerRegistry::LayerTypeList() +{ + CreatorRegistry& registry = Registry(); + string layer_types; + for (typename CreatorRegistry::iterator iter = registry.begin(); + iter != registry.end(); ++iter) { + if (iter != registry.begin()) { + layer_types += ", "; + } + layer_types += iter->first; + } + return layer_types; +} + + +template +LayerRegisterer::LayerRegisterer(const string& type, shared_ptr >(*creator)(const LayerParameter&)) +{ + // LOG(INFO) << "Registering layer type: " << type; + LayerRegistry::AddCreator(type, creator); +} + +////////////////////////////////////////////////////////////////////////// + + // Get convolution layer according to engine. template shared_ptr > GetConvolutionLayer( @@ -209,4 +293,7 @@ REGISTER_LAYER_CREATOR(Python, GetPythonLayer); // Layers that use their constructor as their default creator should be // registered in their corresponding cpp files. Do not register them here. + + + } // namespace caffe diff --git a/src/caffe/layers/bnll_layer.cu b/src/caffe/layers/bnll_layer.cu index d963d0687d2..7efd7755f18 100644 --- a/src/caffe/layers/bnll_layer.cu +++ b/src/caffe/layers/bnll_layer.cu @@ -6,7 +6,11 @@ namespace caffe { +#ifndef _WIN32 const float kBNLL_THRESHOLD = 50.; +#else +#define kBNLL_THRESHOLD 50. +#endif template __global__ void BNLLForward(const int n, const Dtype* in, Dtype* out) { diff --git a/src/caffe/layers/contrastive_loss_layer.cpp b/src/caffe/layers/contrastive_loss_layer.cpp index 25e167819d3..d51febd6b33 100644 --- a/src/caffe/layers/contrastive_loss_layer.cpp +++ b/src/caffe/layers/contrastive_loss_layer.cpp @@ -53,7 +53,7 @@ void ContrastiveLossLayer::Forward_cpu( if (legacy_version) { loss += std::max(margin - dist_sq_.cpu_data()[i], Dtype(0.0)); } else { - Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), 0.0); + Dtype dist = std::max(margin - sqrt(dist_sq_.cpu_data()[i]), Dtype(0.0)); loss += dist*dist; } } diff --git a/src/caffe/mkstemp.cpp b/src/caffe/mkstemp.cpp new file mode 100644 index 00000000000..0ef3dc4ec75 --- /dev/null +++ b/src/caffe/mkstemp.cpp @@ -0,0 +1,114 @@ +#ifdef _WIN32 + +/* mkstemp extracted from libc/sysdeps/posix/tempname.c. Copyright +(C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. */ + +#include "caffe/mkstemp.h" +#include + +#include "boost/date_time/filetime_functions.hpp" +using boost::date_time::winapi::SYSTEMTIME; +using boost::date_time::winapi::FILETIME; + +#include "boost/thread/win32/thread_primitives.hpp" + +#include +#include + +/* Generate a temporary file name based on TMPL. TMPL must match the +rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed +does not exist at the time of the call to mkstemp. TMPL is +overwritten with the result. */ +int +mkstemp(char *tmpl) +{ + int len; + char *XXXXXX; + static unsigned long long value; + unsigned long long random_time_bits; + unsigned int count; + int fd = -1; + int save_errno = errno; + + /* A lower bound on the number of temporary files to attempt to + generate. The maximum total number of temporary file names that + can exist for a given template is 62**6. It should never be + necessary to try all these combinations. Instead if a reasonable + number of names is tried (we define reasonable as 62**3) fail to + give the system administrator the chance to remove the problems. */ +#define ATTEMPTS_MIN (62 * 62 * 62) + + /* The number of times to attempt to generate a temporary file. To + conform to POSIX, this must be no smaller than TMP_MAX. */ +#if ATTEMPTS_MIN < TMP_MAX + unsigned int attempts = TMP_MAX; +#else + unsigned int attempts = ATTEMPTS_MIN; +#endif + + len = strlen(tmpl); + if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX")) + { + errno = EINVAL; + return -1; + } + + /* This is where the Xs start. */ + XXXXXX = &tmpl[len - 6]; + + /* Get some more or less random data. */ + { + SYSTEMTIME stNow; + FILETIME ftNow; + + // get system time + GetSystemTime(&stNow); + stNow.wMilliseconds = 500; + if (!SystemTimeToFileTime(&stNow, &ftNow)) + { + errno = -1; + return -1; + } + + random_time_bits = (((unsigned long long)ftNow.dwHighDateTime << 32) + | (unsigned long long)ftNow.dwLowDateTime); + } + value += random_time_bits ^ (unsigned long long) boost::detail::win32::GetCurrentThreadId(); + + for (count = 0; count < attempts; value += 7777, ++count) + { + unsigned long long v = value; + + /* Fill in the random bits. */ + XXXXXX[0] = letters[v % 62]; + v /= 62; + XXXXXX[1] = letters[v % 62]; + v /= 62; + XXXXXX[2] = letters[v % 62]; + v /= 62; + XXXXXX[3] = letters[v % 62]; + v /= 62; + XXXXXX[4] = letters[v % 62]; + v /= 62; + XXXXXX[5] = letters[v % 62]; + + fd = _open(tmpl, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE); + if (fd >= 0) + { + errno = save_errno; + return fd; + } else if (errno != EEXIST) + return -1; + } + + /* We got out of the loop because we ran out of combinations to try. */ + errno = EEXIST; + return -1; +} + +#endif \ No newline at end of file diff --git a/src/caffe/parallel.cpp b/src/caffe/parallel.cpp index c421631b032..9a7dc40f0d6 100644 --- a/src/caffe/parallel.cpp +++ b/src/caffe/parallel.cpp @@ -3,9 +3,12 @@ #endif #include #include + +#ifndef _WIN32 #include #include #include +#endif #include #include diff --git a/src/caffe/solver.cpp b/src/caffe/solver.cpp index 926490365ff..8431aaa3006 100644 --- a/src/caffe/solver.cpp +++ b/src/caffe/solver.cpp @@ -11,6 +11,10 @@ #include "caffe/util/math_functions.hpp" #include "caffe/util/upgrade_proto.hpp" +#ifdef _WIN32 +#define snprintf sprintf_s +#endif + namespace caffe { template diff --git a/src/caffe/util/db.cpp b/src/caffe/util/db.cpp index 7f7018107ec..4acf29f38ab 100644 --- a/src/caffe/util/db.cpp +++ b/src/caffe/util/db.cpp @@ -3,6 +3,10 @@ #include #include +#ifdef _WIN32 +#include +#endif + namespace caffe { namespace db { const size_t LMDB_MAP_SIZE = 1099511627776; // 1 TB @@ -24,7 +28,12 @@ void LMDB::Open(const string& source, Mode mode) { MDB_CHECK(mdb_env_create(&mdb_env_)); MDB_CHECK(mdb_env_set_mapsize(mdb_env_, LMDB_MAP_SIZE)); if (mode == NEW) { - CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << "failed"; +#ifndef _WIN32 + CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << "failed"; +#else + CHECK_EQ(mkdir(source.c_str()), 0) << "mkdir " << source << "failed"; +#endif + } int flags = 0; if (mode == READ) { diff --git a/src/caffe/util/io.cpp b/src/caffe/util/io.cpp index 77ef7f257f4..3cf4b2f6f93 100644 --- a/src/caffe/util/io.cpp +++ b/src/caffe/util/io.cpp @@ -19,6 +19,14 @@ const int kProtoReadBytesLimit = INT_MAX; // Max size of 2 GB minus 1 byte. +#ifdef _WIN32 +#define io_open _open +#define io_close _close +#else +#define io_open open +#define io_close close +#endif + namespace caffe { using google::protobuf::io::FileInputStream; @@ -30,25 +38,29 @@ using google::protobuf::io::CodedOutputStream; using google::protobuf::Message; bool ReadProtoFromTextFile(const char* filename, Message* proto) { - int fd = open(filename, O_RDONLY); + int fd = io_open(filename, O_RDONLY); CHECK_NE(fd, -1) << "File not found: " << filename; FileInputStream* input = new FileInputStream(fd); bool success = google::protobuf::TextFormat::Parse(input, proto); delete input; - close(fd); + io_close(fd); return success; } void WriteProtoToTextFile(const Message& proto, const char* filename) { - int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); + int fd = io_open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); FileOutputStream* output = new FileOutputStream(fd); CHECK(google::protobuf::TextFormat::Print(proto, output)); delete output; - close(fd); + io_close(fd); } bool ReadProtoFromBinaryFile(const char* filename, Message* proto) { - int fd = open(filename, O_RDONLY); +#ifdef _WIN32 + int fd = io_open(filename, O_RDONLY | O_BINARY); +#else + int fd = io_open(filename, O_RDONLY); +#endif CHECK_NE(fd, -1) << "File not found: " << filename; ZeroCopyInputStream* raw_input = new FileInputStream(fd); CodedInputStream* coded_input = new CodedInputStream(raw_input); @@ -58,7 +70,7 @@ bool ReadProtoFromBinaryFile(const char* filename, Message* proto) { delete coded_input; delete raw_input; - close(fd); + io_close(fd); return success; } diff --git a/src/caffe/util/math_functions.cpp b/src/caffe/util/math_functions.cpp index 13e17be582b..57cc7b11b79 100644 --- a/src/caffe/util/math_functions.cpp +++ b/src/caffe/util/math_functions.cpp @@ -7,6 +7,11 @@ #include "caffe/util/math_functions.hpp" #include "caffe/util/rng.hpp" +#ifdef _WIN32 +#define __builtin_popcountl __popcnt64 +#define __builtin_popcount __popcnt +#endif + namespace caffe { template<> diff --git a/tools/caffe.cpp b/tools/caffe.cpp index cdd888fd607..fd5efce50f5 100644 --- a/tools/caffe.cpp +++ b/tools/caffe.cpp @@ -7,6 +7,7 @@ #include "boost/algorithm/string.hpp" #include "caffe/caffe.hpp" +#include "caffe/layer_forcereg.hpp" using caffe::Blob; using caffe::Caffe; diff --git a/windows/INSTALL.md b/windows/INSTALL.md new file mode 100644 index 00000000000..af0cc2f7036 --- /dev/null +++ b/windows/INSTALL.md @@ -0,0 +1,20 @@ +# Installation + +Caffe depends on several third-party libraries. +You need to download and build them. +Each external library is located in a separate +folder in the `extern` directory. Follow +the instructions in the individual `INSTALL.md` +files. + +All build settings are managed using property +sheets. The main settings are contained in +the `caffe.props` file. + +This file should be adjusted if you want to +add custom caffe build flags, e.g. USE_CUDNN. + +The checked in version uses cuda 7.5. If you +use a different release please do a search +and replace in the project files (*.vcxproj) +of `CUDA 7.5.props` to your desired version. \ No newline at end of file diff --git a/windows/caffe.props b/windows/caffe.props new file mode 100644 index 00000000000..6dcc5b7b6fe --- /dev/null +++ b/windows/caffe.props @@ -0,0 +1,28 @@ + + + + + $(SolutionDir)bin\$(Configuration)\ + $(SolutionDir)tmp\$(Configuration)\$(ProjectName)\ + + + + 4267;4091;4244;4305;4267;4661;%(DisableSpecificWarnings) + $(SolutionDir)..\include;$(SolutionDir)..\src;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;GTEST_HAS_TR1_TUPLE=0;USE_MKL;WITH_PYTHON_LAYER;%(PreprocessorDefinitions) + + + + + + + + shlwapi.lib;cudart.lib;curand.lib;cublas.lib;%(AdditionalDependencies) + + + + + shlwapi.lib;cudart.lib;curand.lib;cublas.lib;%(AdditionalDependencies) + + + \ No newline at end of file diff --git a/windows/caffe.sln b/windows/caffe.sln new file mode 100644 index 00000000000..328b50004c7 --- /dev/null +++ b/windows/caffe.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "caffe", "caffe.vcxproj", "{7E01FA5A-D307-406F-8879-F0F041FF95BF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcaffe", "libcaffe.vcxproj", "{49F30D86-400C-4D77-96BF-408894047509}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pycaffe", "pycaffe.vcxproj", "{26ABCF14-DA2E-4852-815B-9FBCE2E99CAE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7E01FA5A-D307-406F-8879-F0F041FF95BF}.Debug|x64.ActiveCfg = Debug|x64 + {7E01FA5A-D307-406F-8879-F0F041FF95BF}.Debug|x64.Build.0 = Debug|x64 + {7E01FA5A-D307-406F-8879-F0F041FF95BF}.Release|x64.ActiveCfg = Release|x64 + {7E01FA5A-D307-406F-8879-F0F041FF95BF}.Release|x64.Build.0 = Release|x64 + {49F30D86-400C-4D77-96BF-408894047509}.Debug|x64.ActiveCfg = Debug|x64 + {49F30D86-400C-4D77-96BF-408894047509}.Debug|x64.Build.0 = Debug|x64 + {49F30D86-400C-4D77-96BF-408894047509}.Release|x64.ActiveCfg = Release|x64 + {49F30D86-400C-4D77-96BF-408894047509}.Release|x64.Build.0 = Release|x64 + {26ABCF14-DA2E-4852-815B-9FBCE2E99CAE}.Debug|x64.ActiveCfg = Debug|x64 + {26ABCF14-DA2E-4852-815B-9FBCE2E99CAE}.Debug|x64.Build.0 = Debug|x64 + {26ABCF14-DA2E-4852-815B-9FBCE2E99CAE}.Release|x64.ActiveCfg = Release|x64 + {26ABCF14-DA2E-4852-815B-9FBCE2E99CAE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/windows/caffe.vcxproj b/windows/caffe.vcxproj new file mode 100644 index 00000000000..521996cd9da --- /dev/null +++ b/windows/caffe.vcxproj @@ -0,0 +1,100 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {7E01FA5A-D307-406F-8879-F0F041FF95BF} + Win32Proj + caffe + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + + + Console + true + + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + + {49f30d86-400c-4d77-96bf-408894047509} + false + true + false + true + false + + + + + + + \ No newline at end of file diff --git a/windows/caffe.vcxproj.filters b/windows/caffe.vcxproj.filters new file mode 100644 index 00000000000..bea7f60b825 --- /dev/null +++ b/windows/caffe.vcxproj.filters @@ -0,0 +1,18 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + \ No newline at end of file diff --git a/windows/extern/boost/INSTALL.md b/windows/extern/boost/INSTALL.md new file mode 100644 index 00000000000..39de62010e2 --- /dev/null +++ b/windows/extern/boost/INSTALL.md @@ -0,0 +1,9 @@ +# Installation + +Download the latest binary boost release from http://sourceforge.net/projects/boost/files/boost-binaries/ . + +Copy the relevant files into the following folder structure: + +- bin: binary files (*.dlls) +- include: include files (boost folder) +- lib: library files (*.lib) diff --git a/windows/extern/boost/boost.props b/windows/extern/boost/boost.props new file mode 100644 index 00000000000..dc96ae8778e --- /dev/null +++ b/windows/extern/boost/boost.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\boost\bin\boost_chrono-vc120-mt-gd-1_58.dll;$(ExternRoot)\boost\bin\boost_thread-vc120-mt-gd-1_58.dll;$(ExternRoot)\boost\bin\boost_date_time-vc120-mt-gd-1_58.dll;$(ExternRoot)\boost\bin\boost_python-vc120-mt-gd-1_58.dll;$(ExternRoot)\boost\bin\boost_system-vc120-mt-gd-1_58.dll + $(BinRelease);$(ExternRoot)\boost\bin\boost_chrono-vc120-mt-1_58.dll;$(ExternRoot)\boost\bin\boost_thread-vc120-mt-1_58.dll;$(ExternRoot)\boost\bin\boost_date_time-vc120-mt-1_58.dll;$(ExternRoot)\boost\bin\boost_python-vc120-mt-1_58.dll;$(ExternRoot)\boost\bin\boost_system-vc120-mt-1_58.dll + + + + $(ExternRoot)\boost\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\boost\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\boost\lib;%(AdditionalLibraryDirectories) + + + + + %(AdditionalDependencies) + + + + + %(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/cudnn/INSTALL.md b/windows/extern/cudnn/INSTALL.md new file mode 100644 index 00000000000..be597589a8e --- /dev/null +++ b/windows/extern/cudnn/INSTALL.md @@ -0,0 +1,9 @@ +# Installation + +Download the latest release from nvidia at https://developer.nvidia.com/cudnn . + +Copy the relevant files into the following folder structure: + +- bin: binary files (*.dlls) +- include: include files +- lib: library files (*.lib) diff --git a/windows/extern/cudnn/cudnn.props b/windows/extern/cudnn/cudnn.props new file mode 100644 index 00000000000..668a6e5a41b --- /dev/null +++ b/windows/extern/cudnn/cudnn.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\cudnn\bin\cudnn64_70.dll + $(BinRelease);$(ExternRoot)\cudnn\bin\cudnn64_70.dll + + + + $(ExternRoot)\cudnn\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\cudnn\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\cudnn\lib;%(AdditionalLibraryDirectories) + + + + + cudnn.lib;%(AdditionalDependencies) + + + + + cudnn.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/extern.props b/windows/extern/extern.props new file mode 100644 index 00000000000..09fde74f8b6 --- /dev/null +++ b/windows/extern/extern.props @@ -0,0 +1,21 @@ + + + + $(SolutionDir)extern + + + + + + + + + + + + + + + + + diff --git a/windows/extern/gflags/INSTALL.md b/windows/extern/gflags/INSTALL.md new file mode 100644 index 00000000000..20dea193117 --- /dev/null +++ b/windows/extern/gflags/INSTALL.md @@ -0,0 +1,9 @@ +# Installation + +Download gflags from https://github.com/gflags/gflags . + +Build a static lib from source using cmake. +Copy the relevant files into the following folder structure: + +- include: include files +- lib: library files (gflags.lib, gflagsd.lib) diff --git a/windows/extern/gflags/gflags.props b/windows/extern/gflags/gflags.props new file mode 100644 index 00000000000..d4a5459b514 --- /dev/null +++ b/windows/extern/gflags/gflags.props @@ -0,0 +1,25 @@ + + + + + $(ExternRoot)\gflags\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\gflags\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\gflags\lib;%(AdditionalLibraryDirectories) + + + + + gflagsd.lib;%(AdditionalDependencies) + + + + + gflags.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/glog/INSTALL.md b/windows/extern/glog/INSTALL.md new file mode 100644 index 00000000000..b20d8be4866 --- /dev/null +++ b/windows/extern/glog/INSTALL.md @@ -0,0 +1,10 @@ +# Installation + +Download glog from https://github.com/google/glog . + +Build a dynamic library from source using cmake. +Copy the relevant files into the following folder structure: + +- bin: binary files (libglog.dll, libglogd.dll) +- include: include files +- lib: library files (libglog.lib, libglogd.lib) diff --git a/windows/extern/glog/glog.props b/windows/extern/glog/glog.props new file mode 100644 index 00000000000..d4c99e4739d --- /dev/null +++ b/windows/extern/glog/glog.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\glog\bin\libglogd.dll + $(BinRelease);$(ExternRoot)\glog\bin\libglog.dll + + + + $(ExternRoot)\glog\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\glog\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\glog\lib;%(AdditionalLibraryDirectories) + + + + + libglogd.lib;%(AdditionalDependencies) + + + + + libglog.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/hdf5/INSTALL.md b/windows/extern/hdf5/INSTALL.md new file mode 100644 index 00000000000..104883732e4 --- /dev/null +++ b/windows/extern/hdf5/INSTALL.md @@ -0,0 +1,10 @@ +# Installation + +Download the latest binary or source code release from https://www.hdfgroup.org/HDF5/release/obtain5.html . + +In case of a source version build it using cmake. +Copy the relevant files into the following folder structure: + +- bin: binary files (*.dlls) +- include: header files +- lib: library files (*.lib) diff --git a/windows/extern/hdf5/hdf5.props b/windows/extern/hdf5/hdf5.props new file mode 100644 index 00000000000..f2da6e77b91 --- /dev/null +++ b/windows/extern/hdf5/hdf5.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\hdf5\bin\hdf5.dll;$(ExternRoot)\hdf5\bin\hdf5_hl.dll + $(BinRelease);$(ExternRoot)\hdf5\bin\hdf5.dll;$(ExternRoot)\hdf5\bin\hdf5_hl.dll + + + + $(ExternRoot)\hdf5\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\hdf5\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\hdf5\lib;%(AdditionalLibraryDirectories) + + + + + hdf5.lib;hdf5_hl.lib;szip.lib;zlib.lib;%(AdditionalDependencies) + + + + + hdf5.lib;hdf5_hl.lib;szip.lib;zlib.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/mkl/INSTALL.md b/windows/extern/mkl/INSTALL.md new file mode 100644 index 00000000000..30edfd5914d --- /dev/null +++ b/windows/extern/mkl/INSTALL.md @@ -0,0 +1,8 @@ +# Installation + +Download the latest MKL release from intel. +Copy the relevant files into the following folder structure: + +- bin: binary files (*.dlls) +- include: header files +- lib: library files (*.lib) diff --git a/windows/extern/mkl/mkl.props b/windows/extern/mkl/mkl.props new file mode 100644 index 00000000000..8ca89d18920 --- /dev/null +++ b/windows/extern/mkl/mkl.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\mkl\bin\mkl_rt.dll + $(BinRelease);$(ExternRoot)\mkl\bin\mkl_rt.dll + + + + $(ExternRoot)\mkl\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\mkl\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\mkl\lib;%(AdditionalLibraryDirectories) + + + + + mkl_rt.lib;%(AdditionalDependencies) + + + + + mkl_rt.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/opencv/INSTALL.md b/windows/extern/opencv/INSTALL.md new file mode 100644 index 00000000000..6f9ecbaee21 --- /dev/null +++ b/windows/extern/opencv/INSTALL.md @@ -0,0 +1,8 @@ +# Installation + +Download the latest pre-compiled opencv release from http://opencv.org/downloads.html . +Copy the relevant files into the following folder structure: + +- bin: binary files (*.dlls) +- include: header files +- lib: library files (*.lib) diff --git a/windows/extern/opencv/opencv.props b/windows/extern/opencv/opencv.props new file mode 100644 index 00000000000..f964a2ebbab --- /dev/null +++ b/windows/extern/opencv/opencv.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\opencv\bin\opencv_world300d.dll + $(BinRelease);$(ExternRoot)\opencv\bin\opencv_world300.dll + + + + $(ExternRoot)\opencv\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\opencv\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\opencv\lib;%(AdditionalLibraryDirectories) + + + + + opencv_world300d.lib;%(AdditionalDependencies) + + + + + opencv_world300.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/protobuf/INSTALL.md b/windows/extern/protobuf/INSTALL.md new file mode 100644 index 00000000000..9e369b9f673 --- /dev/null +++ b/windows/extern/protobuf/INSTALL.md @@ -0,0 +1,9 @@ +# Installation + +Download the latest version of protobuf from https://github.com/google/protobuf +and build it using cmake. +Copy the relevant files into the following folder structure: + +- bin: binary files (protoc.exe) +- include: header files +- lib: library files (*.lib) diff --git a/windows/extern/protobuf/protobuf.props b/windows/extern/protobuf/protobuf.props new file mode 100644 index 00000000000..bfe21de9a50 --- /dev/null +++ b/windows/extern/protobuf/protobuf.props @@ -0,0 +1,29 @@ + + + + $(BinDebug);$(ExternRoot)\protobuf\bin\protoc.exe + $(BinRelease);$(ExternRoot)\protobuf\bin\protoc.exe + + + + $(ExternRoot)\protobuf\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\protobuf\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\protobuf\lib;%(AdditionalLibraryDirectories) + + + + + libprotobufd.lib;libprotobuf-lited.lib;libprotocd.lib;%(AdditionalDependencies) + + + + + libprotobuf.lib;libprotobuf-lite.lib;libprotoc.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/python/INSTALL.md b/windows/extern/python/INSTALL.md new file mode 100644 index 00000000000..28a5b00239f --- /dev/null +++ b/windows/extern/python/INSTALL.md @@ -0,0 +1,13 @@ +# Installation + +Find out which python version was used to build the boost python library. +For that you can use the dependency walker (http://www.dependencywalker.com/) +and load the boost python dll. + +Download and install the corresponding python version from http://continuum.io/downloads . + +Locate and copy the relevant files into the following folder structure: + +- include: header files from $(PYTHONDIR)\include and header files from numpy package + $(PYTHONDIR)\Lib\site-packages\numpy\core\include +- lib: library files (python27.lib) diff --git a/windows/extern/python/python.props b/windows/extern/python/python.props new file mode 100644 index 00000000000..b058dae2d22 --- /dev/null +++ b/windows/extern/python/python.props @@ -0,0 +1,25 @@ + + + + + $(ExternRoot)\python\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\python\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\python\lib;%(AdditionalLibraryDirectories) + + + + + python27.lib;%(AdditionalDependencies) + + + + + python27.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/extern/snappy/INSTALL.md b/windows/extern/snappy/INSTALL.md new file mode 100644 index 00000000000..46d8e034618 --- /dev/null +++ b/windows/extern/snappy/INSTALL.md @@ -0,0 +1,11 @@ +# Installation + +Download snappy from https://github.com/google/snappy +and build a static library. You will have to manually +create a static library project in visual studio +and include all the source files. + +Copy the relevant files into the following folder structure: + +- include: header files +- lib: library files (snappy.lib, snappyd.lib) diff --git a/windows/extern/snappy/snappy.props b/windows/extern/snappy/snappy.props new file mode 100644 index 00000000000..d64628b6ac3 --- /dev/null +++ b/windows/extern/snappy/snappy.props @@ -0,0 +1,25 @@ + + + + + $(ExternRoot)\snappy\include;%(AdditionalIncludeDirectories) + + + $(ExternRoot)\snappy\lib;%(AdditionalLibraryDirectories) + + + $(ExternRoot)\snappy\lib;%(AdditionalLibraryDirectories) + + + + + snappyd.lib;%(AdditionalDependencies) + + + + + snappy.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/windows/libcaffe.vcxproj b/windows/libcaffe.vcxproj new file mode 100644 index 00000000000..70c508b1ba4 --- /dev/null +++ b/windows/libcaffe.vcxproj @@ -0,0 +1,263 @@ + + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {49F30D86-400C-4D77-96BF-408894047509} + Win32Proj + caffelib + libcaffe + + + + StaticLibrary + true + v120 + Unicode + + + StaticLibrary + false + v120 + true + Unicode + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + true + + + if exist "..\src\caffe\proto\caffe.pb.h" ( + echo building of caffe.proto skipped - please delete caffe.pb.* files if you need to rebuild +) else ( + "extern\protobuf\bin\protoc" -I="..\src\caffe\proto" --cpp_out="..\src\caffe\proto" "..\src\caffe\proto\caffe.proto" +) + + + + + /wd"4267" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + if exist "..\src\caffe\proto\caffe.pb.h" ( + echo building of caffe.proto skipped - please delete caffe.pb.* files if you need to rebuild +) else ( + "extern\protobuf\bin\protoc" -I="..\src\caffe\proto" --cpp_out="..\src\caffe\proto" "..\src\caffe\proto\caffe.proto" +) + + + + + /wd"4267" + + + + + + + \ No newline at end of file diff --git a/windows/libcaffe.vcxproj.filters b/windows/libcaffe.vcxproj.filters new file mode 100644 index 00000000000..e613d695f56 --- /dev/null +++ b/windows/libcaffe.vcxproj.filters @@ -0,0 +1,483 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {647415cc-0adf-4717-8005-950f48f79601} + + + {8e4180a7-c336-480c-89ab-a6340006197a} + + + {c22ad2e3-a175-40cf-a810-360003d77f42} + + + {4b0a2ede-b120-412b-a103-3f5ff8378080} + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Header Files\util + + + Source Files\proto + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\util + + + Source Files\proto + + + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\layers + + + Source Files\util + + + Source Files\util + + + + + Source Files\proto + + + \ No newline at end of file diff --git a/windows/pycaffe.vcxproj b/windows/pycaffe.vcxproj new file mode 100644 index 00000000000..fea7e86c6cd --- /dev/null +++ b/windows/pycaffe.vcxproj @@ -0,0 +1,116 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {26ABCF14-DA2E-4852-815B-9FBCE2E99CAE} + Win32Proj + pycaffe + + + + DynamicLibrary + true + v120 + Unicode + + + DynamicLibrary + false + v120 + true + Unicode + + + + + + + + + + + + + + + + true + _caffe + .pyd + python\caffe\ + + + false + _caffe + .pyd + python\caffe\ + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;PYCAFFE_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + $(IntDir)$(TargetName).lib + + + copy ..\python\caffe\*.py python\caffe\ +mkdir python\caffe\proto +extern\protobuf\bin\protoc.exe --python_out python\caffe\proto -I ../src/caffe/proto ../src/caffe/proto/caffe.proto + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;PYCAFFE_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + $(IntDir)$(TargetName).lib + + + copy ..\python\caffe\*.py python\caffe\ +mkdir python\caffe\proto +extern\protobuf\bin\protoc.exe --python_out python\caffe\proto -I ../src/caffe/proto ../src/caffe/proto/caffe.proto + + + + + {49f30d86-400c-4d77-96bf-408894047509} + false + true + false + true + false + + + + + + + + + + \ No newline at end of file diff --git a/windows/pycaffe.vcxproj.filters b/windows/pycaffe.vcxproj.filters new file mode 100644 index 00000000000..764203d4c75 --- /dev/null +++ b/windows/pycaffe.vcxproj.filters @@ -0,0 +1,18 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + \ No newline at end of file diff --git a/windows/python/caffe/proto/__init__.py b/windows/python/caffe/proto/__init__.py new file mode 100644 index 00000000000..e69de29bb2d