diff --git a/mlmodel/src/MILBlob/Blob/FileWriter.cpp b/mlmodel/src/MILBlob/Blob/FileWriter.cpp index adc7bfcf..7b2bf9cc 100644 --- a/mlmodel/src/MILBlob/Blob/FileWriter.cpp +++ b/mlmodel/src/MILBlob/Blob/FileWriter.cpp @@ -8,8 +8,12 @@ #include #include + +// ORT_EDIT: Exclude mmap on Windows. Not used in this file anyway. +#if !defined(_WIN32) #include #include +#endif using namespace MILBlob; using namespace MILBlob::Blob; diff --git a/mlmodel/src/MILBlob/Fp16.cpp b/mlmodel/src/MILBlob/Fp16.cpp index ae1e71a1..77a7161f 100644 --- a/mlmodel/src/MILBlob/Fp16.cpp +++ b/mlmodel/src/MILBlob/Fp16.cpp @@ -5,6 +5,8 @@ #include "MILBlob/Fp16.hpp" +// ORT_EDIT: Exclude clang specific pragmas from other builds +#if defined(__clang__) // fp16 lib code has some conversion warnings we don't want to globally ignore #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wincompatible-pointer-types" @@ -12,6 +14,9 @@ #pragma clang diagnostic ignored "-Wconversion" #include "fp16/fp16.h" #pragma clang diagnostic pop +#else +#include "fp16/fp16.h" +#endif using namespace MILBlob; diff --git a/modelpackage/src/ModelPackage.cpp b/modelpackage/src/ModelPackage.cpp index 8fee56b9..99e0d8d6 100644 --- a/modelpackage/src/ModelPackage.cpp +++ b/modelpackage/src/ModelPackage.cpp @@ -26,7 +26,14 @@ namespace std { #else #error "missing required header " #endif + +// ORT_EDIT: Use UuidCreate on Windows. +#if defined(_WIN32) +#pragma comment(lib, "rpcrt4.lib") // UuidCreate +#include +#else #include +#endif #include #if defined(__cplusplus) @@ -187,7 +194,10 @@ public: ModelPackageItemInfo createFile(const std::string& name, const std::string& author, const std::string& description); }; +// ORT_EDIT: pragma only available on APPLE platforms +#if defined(__APPLE__) #pragma mark ModelPackageImpl +#endif ModelPackageImpl::ModelPackageImpl(const std::filesystem::path& path, bool createIfNecessary, bool readOnly) : m_packagePath(path), @@ -372,6 +382,20 @@ std::filesystem::path ModelPackageImpl::getItemPath(const std::string& name, con } std::string ModelPackageImpl::generateIdentifier() const { +// ORT_EDIT: Use built-in UUID generation on Windows +#if defined(_WIN32) + UUID uuid; + UuidCreate(&uuid); + + RPC_CSTR uuidStr; + UuidToStringA(&uuid, &uuidStr); + + std::string uuidStrCpp(reinterpret_cast(uuidStr)); + + RpcStringFreeA(&uuidStr); + + return uuidStrCpp; +#else uuid_t uuid; // uuid_unparse generates a 36-character null-terminated string (37 bytes). @@ -383,6 +407,7 @@ std::string ModelPackageImpl::generateIdentifier() const { uuid_unparse(uuid, buf); return std::string(buf); +#endif } ModelPackageItemInfo ModelPackageImpl::createFile(const std::string& name, const std::string& author, const std::string& description) { @@ -468,7 +493,13 @@ std::shared_ptr ModelPackageImpl::findItem(const std::stri auto author = itemInfoEntry->getString(kModelPackageItemInfoAuthorKey); auto description = itemInfoEntry->getString(kModelPackageItemInfoDescriptionKey); +// ORT_EDIT: need to use path.string() on Windows +#if defined(_WIN32) + return std::make_shared(std::make_shared(identifier, path.string(), name, author, description)); + +#else return std::make_shared(std::make_shared(identifier, path, name, author, description)); +#endif } std::shared_ptr ModelPackageImpl::findItem(const std::string& name, const std::string& author) const @@ -514,7 +545,9 @@ void ModelPackageImpl::removeItem(const std::string& identifier) } auto path = m_packageDataDirPath / itemInfoEntry->getString(kModelPackageItemInfoPathKey); - if (0 != std::remove(path.c_str())) { + // ORT_EDIT: std::remove doesn't work on Windows. Use std::filesystem::remove instead. + // if (0 != std::remove(path.c_str())) { + if (!std::filesystem::remove(path)) { throw std::runtime_error("Failed to remove file at path: " + path.string()); } @@ -525,13 +558,16 @@ bool ModelPackageImpl::isValid(const std::filesystem::path& path) { try { ModelPackageImpl(path, false, true); - } catch (std::runtime_error& e) { + } catch (std::runtime_error& /*e*/) { // ORT_EDIT: comment out unused variable return false; } return true; } +// ORT_EDIT: pragma only available on APPLE platforms +#if defined(__APPLE__) #pragma mark ModelPackage +#endif ModelPackage::ModelPackage(const std::string& packagePath, bool createIfNecessary, bool readOnly) : m_modelPackageImpl(std::make_shared(packagePath, createIfNecessary, readOnly)) @@ -544,7 +580,12 @@ ModelPackage::~ModelPackage() std::string ModelPackage::path() const { +// ORT_EDIT: Windows doesn't automatically convert to std::string as the native format could be char or wchar. +#if defined(_WIN32) + return m_modelPackageImpl->path().string(); +#else return m_modelPackageImpl->path(); +#endif } std::string ModelPackage::setRootModel(const std::string& path, const std::string& name, const std::string& author, const std::string& description)