aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--README.md58
-rw-r--r--xmake.lua7
-rw-r--r--zencore/blake3.cpp4
-rw-r--r--zencore/compactbinary.cpp20
-rw-r--r--zencore/compactbinarybuilder.cpp5
-rw-r--r--zencore/filesystem.cpp30
-rw-r--r--zencore/include/zencore/intmath.h6
-rw-r--r--zencore/include/zencore/refcount.h2
-rw-r--r--zencore/include/zencore/string.h2
-rw-r--r--zencore/include/zencore/thread.h2
-rw-r--r--zencore/include/zencore/uid.h2
-rw-r--r--zencore/include/zencore/zencore.h17
-rw-r--r--zencore/stats.cpp2
-rw-r--r--zencore/string.cpp29
-rw-r--r--zencore/thread.cpp16
-rw-r--r--zencore/xmake.lua15
-rw-r--r--zenstore/CAS.cpp2
-rw-r--r--zenstore/caslog.cpp4
-rw-r--r--zenstore/compactcas.cpp4
-rw-r--r--zenstore/compactcas.h7
-rw-r--r--zenstore/filecas.cpp12
-rw-r--r--zenstore/filecas.h2
-rw-r--r--zenstore/include/zenstore/CAS.h6
-rw-r--r--zenstore/include/zenstore/basicfile.h5
-rw-r--r--zenstore/include/zenstore/caslog.h7
26 files changed, 200 insertions, 68 deletions
diff --git a/.gitignore b/.gitignore
index bf237a7b3..4ceeab867 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,8 @@ bld/
[Bb]in/
[Oo]bj/
[Ll]og/
+vsxmake20*/
+vs20*/
# Visual Studio Code options directory
.vscode/
diff --git a/README.md b/README.md
index 055ecca3a..77dddfb80 100644
--- a/README.md
+++ b/README.md
@@ -55,11 +55,65 @@ You can then build from the command line:
It's also possible to generate project files for Visual Studio via
-`d:\zen> xmake project -k vsxmake`
+`d:\zen> xmake project -k vsxmake -a x64`
## Building on Linux
-... coming soon
+The following instructions have been collated using Ubuntu 20.04.
+
+At the time of writing only GCC v11 supports the C++20 features used by Zen. As
+this version is not available in the default package repositories we need to
+get GCC from one of Ubuntu's toolchain repositories;
+
+```
+sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+sudo apt install -y gcc-11
+gcc-11 --version
+```
+
+Next we need the `xmake` build system. For this we will download and install
+`xmake` as a `.deb` package. Check the project's release page for more up to
+date `.deb` files;
+
+```
+wget https://github.com/xmake-io/xmake/releases/download/v2.5.7/xmake-v2.5.7.amd64.deb
+sudo dpkg -i xmake-v2.5.7.amd64.deb
+xmake --version
+```
+
+For some of Zen's third party dependencies are provided by Microsoft's `vcpkg`
+C++ library manager. After cloning the project there is a initialisation step;
+
+```
+git clone https://github.com/microsoft/vcpkg.git ~/zen/vcpkg
+~/zen/vcpkg/bootstrap-vcpkg.sh
+```
+
+`xmake` uses an environment variable to find `vcpkg`. Alternatively this can be
+done by including `VCPKG_ROOT=...` on the command line when invoking `xmake`;
+
+```
+export VCPKG_ROOT=~/zen/vcpkg
+```
+
+Clone the Zen project and tell `xmake` to use the correct GCC version;
+
+```
+git clone https://github.com/EpicGames/zen.git ~/zen/main
+cd ~/zen/main
+xmake config --plat=linux --cxx=g++-11 --cc=gcc-11
+```
+
+Now we are ready to build Zen. The `--mode=debug` is optional. It has been
+included below to show how to change build variants. The `-y` skips `xmake` from
+prompting about updating `vcpkg` packages;
+
+```
+xmake config --mode=debug
+xmake build -y
+```
+
+The `xmake` flags `-vD` can be useful to diagnose `xmake` issues.
## Building on Mac
diff --git a/xmake.lua b/xmake.lua
index 9d44ec8d0..4f7612f72 100644
--- a/xmake.lua
+++ b/xmake.lua
@@ -46,6 +46,13 @@ if is_os("windows") then
-- add_ldflags("/MAP")
end
+if is_os("linux") then
+ add_cxxflags("-Wno-unused-variable")
+ add_cxxflags("-Wno-unused-parameter")
+ add_cxxflags("-Wno-strict-aliasing")
+ add_cxxflags("-Wno-implicit-fallthrough")
+end
+
add_defines("USE_SENTRY=1")
add_defines("ZEN_USE_MIMALLOC=1")
diff --git a/zencore/blake3.cpp b/zencore/blake3.cpp
index 663f21b6d..5869f19a3 100644
--- a/zencore/blake3.cpp
+++ b/zencore/blake3.cpp
@@ -8,7 +8,9 @@
#include <zencore/zencore.h>
#include "../3rdparty/BLAKE3/c/blake3.h"
-#pragma comment(lib, "blake3.lib")
+#if ZEN_PLATFORM_WINDOWS
+# pragma comment(lib, "blake3.lib")
+#endif
#include <string.h>
diff --git a/zencore/compactbinary.cpp b/zencore/compactbinary.cpp
index c4694733c..6a95ce555 100644
--- a/zencore/compactbinary.cpp
+++ b/zencore/compactbinary.cpp
@@ -87,7 +87,7 @@ TimeSpan::ToString(const char* Format) const
StringBuilder<128> Result;
- Result.Append((Ticks < 0) ? '-' : '+');
+ Result.Append((int64_t(Ticks) < 0) ? '-' : '+');
while (*Format != '\0')
{
@@ -1838,11 +1838,11 @@ TEST_CASE("uson.json")
<< "ValueTwo";
CbObject Obj = Writer.Save();
- StringBuilder<128> Sb;
- const std::string_view JsonText = Obj.ToJson(Sb).ToView();
+ StringBuilder<128> Sb;
+ const char* JsonText = Obj.ToJson(Sb).Data();
std::string JsonError;
- json11::Json Json = json11::Json::parse(JsonText.data(), JsonError);
+ json11::Json Json = json11::Json::parse(JsonText, JsonError);
const std::string ValueOne = Json["KeyOne"].string_value();
const std::string ValueTwo = Json["KeyTwo"].string_value();
@@ -1863,11 +1863,11 @@ TEST_CASE("uson.json")
CbObject Obj = Writer.Save();
- StringBuilder<128> Sb;
- const std::string_view JsonText = Obj.ToJson(Sb).ToView();
+ StringBuilder<128> Sb;
+ const char* JsonText = Obj.ToJson(Sb).Data();
std::string JsonError;
- json11::Json Json = json11::Json::parse(JsonText.data(), JsonError);
+ json11::Json Json = json11::Json::parse(JsonText, JsonError);
const float FloatValue = float(Json["Float"].number_value());
const double DoubleValue = Json["Double"].number_value();
@@ -1888,11 +1888,11 @@ TEST_CASE("uson.json")
CbObject Obj = Writer.Save();
- StringBuilder<128> Sb;
- const std::string_view JsonText = Obj.ToJson(Sb).ToView();
+ StringBuilder<128> Sb;
+ const char* JsonText = Obj.ToJson(Sb).Data();
std::string JsonError;
- json11::Json Json = json11::Json::parse(JsonText.data(), JsonError);
+ json11::Json Json = json11::Json::parse(JsonText, JsonError);
const double FloatValue = Json["FloatNan"].number_value();
const double DoubleValue = Json["DoubleNan"].number_value();
diff --git a/zencore/compactbinarybuilder.cpp b/zencore/compactbinarybuilder.cpp
index fa5b6a69b..3be24c149 100644
--- a/zencore/compactbinarybuilder.cpp
+++ b/zencore/compactbinarybuilder.cpp
@@ -985,7 +985,12 @@ TEST_CASE("usonbuilder.string")
SUBCASE("Non-ASCII String")
{
+#if ZEN_SIZEOF_WCHAR_T == 2
wchar_t Value[2] = {0xd83d, 0xde00};
+#else
+ wchar_t Value[1] = {0x1f600};
+#endif
+
Writer.AddString("\xf0\x9f\x98\x80"sv);
Writer.AddString(std::wstring_view(Value, ZEN_ARRAY_COUNT(Value)));
CbFieldIterator Fields = Writer.Save();
diff --git a/zencore/filesystem.cpp b/zencore/filesystem.cpp
index b8e8eff55..c3edf656e 100644
--- a/zencore/filesystem.cpp
+++ b/zencore/filesystem.cpp
@@ -505,7 +505,7 @@ WriteFile(std::filesystem::path Path, const IoBuffer* const* Data, size_t Buffer
ThrowSystemException(hRes, "File write failed for '{}'"_format(Path).c_str());
}
#else
- if (write(Fd, DataPtr, WriteSize) != WriteSize)
+ if (write(Fd, DataPtr, WriteSize) != int64_t(WriteSize))
{
ThrowLastError("File write failed for '{}'"_format(Path));
}
@@ -572,7 +572,9 @@ ReadFile(std::filesystem::path Path)
int Fd = open(Path.c_str(), O_RDONLY);
if (Fd < 0)
{
- return FileContents{.ErrorCode = std::error_code(zen::GetLastError(), std::system_category())};
+ FileContents Ret;
+ Ret.ErrorCode = std::error_code(zen::GetLastError(), std::system_category());
+ return Ret;
}
static_assert(sizeof(decltype(stat::st_size)) == sizeof(uint64_t), "fstat() doesn't support large files");
@@ -731,7 +733,7 @@ FileSystemTraversal::TraverseFileSystem(const std::filesystem::path& RootDir, Tr
ThrowLastError("Failed to open directory for traversal: {}"_format(RootDir.c_str()));
}
- for (struct dirent* Entry; Entry = readdir(Dir);)
+ for (struct dirent* Entry; (Entry = readdir(Dir));)
{
const char* FileName = Entry->d_name;
@@ -787,14 +789,15 @@ PathFromHandle(void* NativeHandle)
return FullPath;
#elif ZEN_PLATFORM_LINUX
- char Buffer[256];
- sprintf(Buffer, "/proc/%d/fd/%d", getpid(), int(uintptr_t(NativeHandle)));
- ssize_t BytesRead = readlink(Buffer, Buffer, sizeof(Buffer) - 1);
+ char Link[256];
+ char Path[64];
+ sprintf(Path, "/proc/%d/fd/%d", getpid(), int(uintptr_t(NativeHandle)));
+ ssize_t BytesRead = readlink(Path, Link, sizeof(Link) - 1);
if (BytesRead <= 0)
return std::filesystem::path();
- Buffer[BytesRead] = '\0';
- return Buffer;
+ Link[BytesRead] = '\0';
+ return Link;
#else
# error Unimplemented platform
#endif // ZEN_PLATFORM_WINDOWS
@@ -809,14 +812,15 @@ GetRunningExecutablePath()
return {std::wstring_view(ExePath, PathLength)};
#elif ZEN_PLATFORM_LINUX
- char Buffer[256];
- sprintf(Buffer, "/proc/%d/exe", getpid());
- ssize_t BytesRead = readlink(Buffer, Buffer, sizeof(Buffer) - 1);
+ char Link[256];
+ char Path[64];
+ sprintf(Path, "/proc/%d/exe", getpid());
+ ssize_t BytesRead = readlink(Path, Link, sizeof(Link) - 1);
if (BytesRead < 0)
return {};
- Buffer[BytesRead] = '\0';
- return Buffer;
+ Link[BytesRead] = '\0';
+ return Link;
#else
# error Unimplemented platform
#endif // ZEN_PLATFORM_WINDOWS
diff --git a/zencore/include/zencore/intmath.h b/zencore/include/zencore/intmath.h
index 7619e1950..0d0ceff16 100644
--- a/zencore/include/zencore/intmath.h
+++ b/zencore/include/zencore/intmath.h
@@ -107,7 +107,7 @@ FloorLog2(uint32_t Value)
static inline uint32_t
CountLeadingZeros(uint32_t Value)
{
- unsigned long Log2;
+ unsigned long Log2 = 0;
_BitScanReverse64(&Log2, (uint64_t(Value) << 1) | 1);
return 32 - Log2;
}
@@ -115,7 +115,7 @@ CountLeadingZeros(uint32_t Value)
static inline uint64_t
FloorLog2_64(uint64_t Value)
{
- unsigned long Log2;
+ unsigned long Log2 = 0;
long Mask = -long(_BitScanReverse64(&Log2, Value) != 0);
return Log2 & Mask;
}
@@ -123,7 +123,7 @@ FloorLog2_64(uint64_t Value)
static inline uint64_t
CountLeadingZeros64(uint64_t Value)
{
- unsigned long Log2;
+ unsigned long Log2 = 0;
long Mask = -long(_BitScanReverse64(&Log2, Value) != 0);
return ((63 - Log2) & Mask) | (64 & ~Mask);
}
diff --git a/zencore/include/zencore/refcount.h b/zencore/include/zencore/refcount.h
index 1873ce48e..325863051 100644
--- a/zencore/include/zencore/refcount.h
+++ b/zencore/include/zencore/refcount.h
@@ -160,7 +160,7 @@ public:
private:
T* m_Ref = nullptr;
- template<class T>
+ template<class U>
friend class Ref;
};
diff --git a/zencore/include/zencore/string.h b/zencore/include/zencore/string.h
index c205b199d..9f1bc39d0 100644
--- a/zencore/include/zencore/string.h
+++ b/zencore/include/zencore/string.h
@@ -424,7 +424,7 @@ public:
inline std::wstring_view ToView() const { return std::wstring_view{Data(), Size()}; }
inline std::wstring toString() const { return std::wstring{Data(), Size()}; }
- inline StringBuilderImpl& operator<<(const std::u16string_view str) { return Append((const wchar_t*)str.data(), str.size()); }
+ inline StringBuilderImpl& operator<<(const std::wstring_view str) { return Append((const wchar_t*)str.data(), str.size()); }
inline StringBuilderImpl& operator<<(const wchar_t* str) { return Append(str); }
using StringBuilderImpl:: operator<<;
};
diff --git a/zencore/include/zencore/thread.h b/zencore/include/zencore/thread.h
index 410ffbd1e..f677113a0 100644
--- a/zencore/include/zencore/thread.h
+++ b/zencore/include/zencore/thread.h
@@ -140,7 +140,7 @@ public:
ZENCORE_API bool Wait(int TimeoutMs = -1);
ZENCORE_API void Terminate(int ExitCode);
ZENCORE_API void Reset();
- inline [[nodiscard]] int Pid() const { return m_Pid; }
+ [[nodiscard]] inline int Pid() const { return m_Pid; }
private:
void* m_ProcessHandle = nullptr;
diff --git a/zencore/include/zencore/uid.h b/zencore/include/zencore/uid.h
index f4e9ab65a..d25aa8059 100644
--- a/zencore/include/zencore/uid.h
+++ b/zencore/include/zencore/uid.h
@@ -74,7 +74,7 @@ struct Oid
size_t operator()(const Oid& id) const
{
const size_t seed = id.OidBits[0];
- return (seed << 6) + (seed >> 2) + 0x9e3779b9 + uint64_t(id.OidBits[1]) | (uint64_t(id.OidBits[2]) << 32);
+ return ((seed << 6) + (seed >> 2) + 0x9e3779b9 + uint64_t(id.OidBits[1])) | (uint64_t(id.OidBits[2]) << 32);
}
};
diff --git a/zencore/include/zencore/zencore.h b/zencore/include/zencore/zencore.h
index 136ed2944..3f92d7ac4 100644
--- a/zencore/include/zencore/zencore.h
+++ b/zencore/include/zencore/zencore.h
@@ -94,6 +94,13 @@
#define ZEN_PLATFORM_SUPPORTS_UNALIGNED_LOADS 1
+#if defined(__SIZEOF_WCHAR_T__) && __SIZEOF_WCHAR_T__ == 4
+# define ZEN_SIZEOF_WCHAR_T 4
+#else
+ static_assert(sizeof(wchar_t) == 2, "wchar_t is expected to be two bytes in size");
+# define ZEN_SIZEOF_WCHAR_T 2
+#endif
+
//////////////////////////////////////////////////////////////////////////
// Assert
//
@@ -213,9 +220,15 @@ ZENCORE_API void zencore_forcelinktests();
//////////////////////////////////////////////////////////////////////////
#if ZEN_COMPILER_MSC
-# define ZEN_DISABLE_OPTIMIZATION_ACTUAL __pragma(optimize("", off))
+# define ZEN_DISABLE_OPTIMIZATION_ACTUAL __pragma(optimize("", off))
# define ZEN_ENABLE_OPTIMIZATION_ACTUAL __pragma(optimize("", on))
-#else
+#elif ZEN_COMPILER_GCC
+# define ZEN_DISABLE_OPTIMIZATION_ACTUAL _Pragma( "GCC push_options" ) \
+ _Pragma( "GCC optimize (\"O0\")" )
+# define ZEN_ENABLE_OPTIMIZATION_ACTUAL _Pragma( "GCC pop_options" )
+#elif ZEN_COMPILER_CLANG
+# define ZEN_DISABLE_OPTIMIZATION_ACTUAL _Pragma("clang optimize off")
+# define ZEN_ENABLE_OPTIMIZATION_ACTUAL _Pragma("clang optimize on")
#endif
// Set up optimization control macros, now that we have both the build settings and the platform macros
diff --git a/zencore/stats.cpp b/zencore/stats.cpp
index 0c0647999..1bb6f6de0 100644
--- a/zencore/stats.cpp
+++ b/zencore/stats.cpp
@@ -227,7 +227,7 @@ UniformSample::Snapshot() const
uint64_t ValuesSize = Size();
std::vector<double> Values(ValuesSize);
- for (int i = 0; i < ValuesSize; ++i)
+ for (int i = 0, n = int(ValuesSize); i < n; ++i)
{
Values[i] = double(m_Values[i]);
}
diff --git a/zencore/string.cpp b/zencore/string.cpp
index 49824a910..7acdc16f0 100644
--- a/zencore/string.cpp
+++ b/zencore/string.cpp
@@ -30,6 +30,17 @@ utf16to8_impl(u16bit_iterator StartIt, u16bit_iterator EndIt, ::zen::StringBuild
}
}
+template<typename u32bit_iterator>
+void
+utf32to8_impl(u32bit_iterator StartIt, u32bit_iterator EndIt, ::zen::StringBuilderBase& OutString)
+{
+ for (; StartIt != EndIt; ++StartIt)
+ {
+ wchar_t cp = *StartIt;
+ OutString.AppendCodepoint(cp);
+ }
+}
+
//////////////////////////////////////////////////////////////////////////
namespace zen {
@@ -76,7 +87,7 @@ FilepathFindExtension(const std::string_view& Path, const char* ExtensionToMatch
// Look for extension introducer ('.')
- for (size_t i = PathLen - 1; i >= 0; --i)
+ for (int64_t i = PathLen - 1; i >= 0; --i)
{
if (Path[i] == '.')
return Path.data() + i;
@@ -164,26 +175,24 @@ Utf8ToWide(const std::u8string_view& Str8, WideStringBuilderBase& OutString)
void
WideToUtf8(const wchar_t* Wstr, StringBuilderBase& OutString)
{
- WideToUtf8(std::u16string_view{(char16_t*)Wstr}, OutString);
+ WideToUtf8(std::wstring_view{Wstr}, OutString);
}
void
WideToUtf8(const std::wstring_view& Wstr, StringBuilderBase& OutString)
{
- WideToUtf8(std::u16string_view{(char16_t*)Wstr.data(), Wstr.size()}, OutString);
-}
-
-void
-WideToUtf8(const std::u16string_view& Wstr, StringBuilderBase& OutString)
-{
+#if ZEN_SIZEOF_WCHAR_T == 2
utf16to8_impl(begin(Wstr), end(Wstr), OutString);
+#else
+ utf32to8_impl(begin(Wstr), end(Wstr), OutString);
+#endif
}
std::string
WideToUtf8(const wchar_t* Wstr)
{
ExtendableStringBuilder<128> String;
- WideToUtf8(std::u16string_view{(char16_t*)Wstr}, String);
+ WideToUtf8(std::wstring_view{Wstr}, String);
return String.c_str();
}
@@ -192,7 +201,7 @@ std::string
WideToUtf8(const std::wstring_view Wstr)
{
ExtendableStringBuilder<128> String;
- WideToUtf8(std::u16string_view{(char16_t*)Wstr.data(), Wstr.size()}, String);
+ WideToUtf8(std::wstring_view{Wstr.data(), Wstr.size()}, String);
return String.c_str();
}
diff --git a/zencore/thread.cpp b/zencore/thread.cpp
index 20ab19f56..5aa0f2688 100644
--- a/zencore/thread.cpp
+++ b/zencore/thread.cpp
@@ -5,6 +5,7 @@
#include <fmt/format.h>
#include <zencore/except.h>
#include <zencore/string.h>
+#include <zencore/testing.h>
#if ZEN_PLATFORM_WINDOWS
# include <zencore/windows.h>
@@ -360,7 +361,9 @@ IsProcessRunning(int pid)
return true;
#else
- ZEN_NOT_IMPLEMENTED();
+ char Buffer[64];
+ sprintf(Buffer, "/proc/%d", pid);
+ return access(Buffer, F_OK) == 0;
#endif
}
@@ -389,9 +392,20 @@ Sleep(int ms)
// Testing related code follows...
//
+#if ZEN_WITH_TESTS
+
void
thread_forcelink()
{
}
+TEST_CASE("Thread")
+{
+ int Pid = GetCurrentProcessId();
+ CHECK(Pid > 0);
+ CHECK(IsProcessRunning(Pid));
+}
+
+#endif // ZEN_WITH_TESTS
+
} // namespace zen
diff --git a/zencore/xmake.lua b/zencore/xmake.lua
index 5de7f476d..1abd86b7b 100644
--- a/zencore/xmake.lua
+++ b/zencore/xmake.lua
@@ -2,13 +2,24 @@ target('zencore')
set_kind("static")
add_files("**.cpp")
add_includedirs("include", {public=true})
- add_includedirs("..\\3rdparty\\utfcpp\\source")
- add_linkdirs("$(projectdir)/3rdparty/BLAKE3/lib/Win64", "$(projectdir)/3rdparty/Oodle/lib/Win64")
+ add_includedirs("$(projectdir)/3rdparty/utfcpp/source")
+ if is_os("windows") then
+ add_linkdirs("$(projectdir)/3rdparty/BLAKE3/lib/Win64")
+ add_linkdirs("$(projectdir)/3rdparty/Oodle/lib/Win64")
+ elseif is_os("linux") then
+ add_linkdirs("$(projectdir)/3rdparty/BLAKE3/lib/Linux_x64")
+ add_linkdirs("$(projectdir)/3rdparty/Oodle/lib/Linux_x64")
+ add_links("blake3")
+ add_links("oo2corelinux64")
+ add_links("pthread")
+ end
add_packages(
"vcpkg::spdlog",
"vcpkg::fmt",
"vcpkg::doctest",
"vcpkg::lz4",
+ "vcpkg::mimalloc",
+ "vcpkg::json11",
"vcpkg::cpr",
"vcpkg::curl", -- required by cpr
"vcpkg::zlib", -- required by curl
diff --git a/zenstore/CAS.cpp b/zenstore/CAS.cpp
index a4bbfa340..a26e9710f 100644
--- a/zenstore/CAS.cpp
+++ b/zenstore/CAS.cpp
@@ -1,6 +1,6 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
#include "compactcas.h"
#include "filecas.h"
diff --git a/zenstore/caslog.cpp b/zenstore/caslog.cpp
index 2bac6affd..c1cb68379 100644
--- a/zenstore/caslog.cpp
+++ b/zenstore/caslog.cpp
@@ -1,8 +1,8 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
-#include "CompactCas.h"
+#include "compactcas.h"
#include <zencore/except.h>
#include <zencore/filesystem.h>
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp
index 612f87c7c..3631722d4 100644
--- a/zenstore/compactcas.cpp
+++ b/zenstore/compactcas.cpp
@@ -1,8 +1,8 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
-#include "CompactCas.h"
+#include "compactcas.h"
#include <zencore/except.h>
#include <zencore/logging.h>
diff --git a/zenstore/compactcas.h b/zenstore/compactcas.h
index a512c3d93..47e989fe9 100644
--- a/zenstore/compactcas.h
+++ b/zenstore/compactcas.h
@@ -9,11 +9,14 @@
#include <zencore/string.h>
#include <zencore/thread.h>
#include <zencore/uid.h>
-#include <zencore/windows.h>
#include <zenstore/basicfile.h>
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
#include <zenstore/caslog.h>
+#if ZEN_PLATFORM_WINDOWS
+# include <zencore/windows.h>
+#endif
+
namespace zen {
//////////////////////////////////////////////////////////////////////////
diff --git a/zenstore/filecas.cpp b/zenstore/filecas.cpp
index f69ed6bdb..b63cd4ba7 100644
--- a/zenstore/filecas.cpp
+++ b/zenstore/filecas.cpp
@@ -1,6 +1,6 @@
// Copyright Epic Games, Inc. All Rights Reserved.
-#include "FileCas.h"
+#include "filecas.h"
#include <zencore/except.h>
#include <zencore/filesystem.h>
@@ -23,12 +23,14 @@
#include <unordered_map>
// clang-format off
-#include <zencore/prewindows.h>
+#if ZEN_PLATFORM_WINDOWS
+# include <zencore/prewindows.h>
-struct IUnknown; // Workaround for "combaseapi.h(229): error C2187: syntax error: 'identifier' was unexpected here" when using /permissive-
-#include <atlfile.h>
+ struct IUnknown; // Workaround for "combaseapi.h(229): error C2187: syntax error: 'identifier' was unexpected here" when using /permissive-
+# include <atlfile.h>
-#include <zencore/postwindows.h>
+# include <zencore/postwindows.h>
+#endif
// clang-format on
namespace zen {
diff --git a/zenstore/filecas.h b/zenstore/filecas.h
index 14314ce52..8f36c0170 100644
--- a/zenstore/filecas.h
+++ b/zenstore/filecas.h
@@ -8,7 +8,7 @@
#include <zencore/iohash.h>
#include <zencore/string.h>
#include <zencore/thread.h>
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
#include <functional>
diff --git a/zenstore/include/zenstore/CAS.h b/zenstore/include/zenstore/CAS.h
index 86e7e78d9..7f8b5bfa2 100644
--- a/zenstore/include/zenstore/CAS.h
+++ b/zenstore/include/zenstore/CAS.h
@@ -41,9 +41,9 @@ public:
void AddChunksToSet(std::span<const IoHash> HashesToAdd);
void RemoveChunksIf(std::function<bool(const IoHash& CandidateHash)>&& Predicate);
void IterateChunks(std::function<void(const IoHash& ChunkHash)>&& Callback);
- inline [[nodiscard]] bool ContainsChunk(const IoHash& Hash) const { return m_ChunkSet.find(Hash) != m_ChunkSet.end(); }
- inline [[nodiscard]] bool IsEmpty() const { return m_ChunkSet.empty(); }
- inline [[nodiscard]] size_t GetSize() const { return m_ChunkSet.size(); }
+ [[nodiscard]] inline bool ContainsChunk(const IoHash& Hash) const { return m_ChunkSet.find(Hash) != m_ChunkSet.end(); }
+ [[nodiscard]] inline bool IsEmpty() const { return m_ChunkSet.empty(); }
+ [[nodiscard]] inline size_t GetSize() const { return m_ChunkSet.size(); }
private:
// Q: should we protect this with a lock, or is that a higher level concern?
diff --git a/zenstore/include/zenstore/basicfile.h b/zenstore/include/zenstore/basicfile.h
index 7ae35dea6..87fec16c6 100644
--- a/zenstore/include/zenstore/basicfile.h
+++ b/zenstore/include/zenstore/basicfile.h
@@ -5,7 +5,10 @@
#include "zenstore.h"
#include <zencore/iobuffer.h>
-#include <zencore/windows.h>
+
+#if ZEN_PLATFORM_WINDOWS
+# include <zencore/windows.h>
+#endif
#include <filesystem>
#include <functional>
diff --git a/zenstore/include/zenstore/caslog.h b/zenstore/include/zenstore/caslog.h
index 00b987383..8189da87e 100644
--- a/zenstore/include/zenstore/caslog.h
+++ b/zenstore/include/zenstore/caslog.h
@@ -8,9 +8,12 @@
#include <zencore/string.h>
#include <zencore/thread.h>
#include <zencore/uid.h>
-#include <zencore/windows.h>
#include <zenstore/basicfile.h>
-#include <zenstore/cas.h>
+#include <zenstore/CAS.h>
+
+#if ZEN_PLATFORM_WINDOWS
+# include <zencore/windows.h>
+#endif
#include <functional>