diff --git a/setup.py b/setup.py index 5c9241de08..fe32355ef0 100644 --- a/setup.py +++ b/setup.py @@ -116,7 +116,7 @@ def is_pip(): class CMakeExtension(Extension): def __init__(self, name, sourcedir=""): Extension.__init__(self, name, sources=[]) - self.sourcedir = os.path.abspath(sourcedir) + self.sourcedir = os.path.abspath(sourcedir).replace('\\','/') class CMakeBuild(build_ext): @@ -177,8 +177,8 @@ def build_extension(self, ext): ) cmake_args = [ - "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=" + extdir, - "-DPYTHON_EXECUTABLE=" + sys.executable, + "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=" + extdir.replace('\\','/'), + "-DPYTHON_EXECUTABLE=" + sys.executable.replace('\\','/'), "-DCMAKE_EXPORT_COMPILE_COMMANDS={}".format("OFF" if is_pip() else "ON"), ] cmake_args += shlex.split(args.cmake_args) @@ -196,8 +196,9 @@ def build_extension(self, ext): # doesn't require a number (but builds sequentially by default), so we # add the argument only when it's not ninja or the number of jobs is # specified. - if not has_ninja() or self.parallel: - build_args += ["-j{}".format(self.parallel) if self.parallel else "-j"] + if sys.platform != "win32": + if not has_ninja() or self.parallel: + build_args += ["-j{}".format(self.parallel) if self.parallel else "-j"] cmake_args += [ "-DBUILD_GUI_VIEWERS={}".format("ON" if not args.headless else "OFF") @@ -211,13 +212,13 @@ def build_extension(self, ext): if self.run_cmake(cmake_args): subprocess.check_call( - shlex.split("cmake -H{} -B{}".format(ext.sourcedir, self.build_temp)) + shlex.split("cmake -H{} -B{}".format(ext.sourcedir, self.build_temp.replace('\\','/'))) + cmake_args, env=env, ) subprocess.check_call( - shlex.split("cmake --build {}".format(self.build_temp)) + build_args + shlex.split("cmake --build {}".format(self.build_temp.replace('\\','/'))) + build_args ) print() # Add an empty line for cleaner output @@ -226,7 +227,7 @@ def build_extension(self, ext): return if not args.headless: - link_dst = osp.join(self.build_temp, "viewer") + link_dst = osp.join(self.build_temp, "viewer").replace('\\','/') if not osp.islink(link_dst): os.symlink( osp.abspath(osp.join(self.build_temp, "utils/viewer/viewer")), diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b69e2dff0b..3d8e2bb280 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.10) project(esp) if(MSVC) - add_definitions(/DNOMINMAX) + add_definitions(/DNOMINMAX /D_USE_MATH_DEFINES /DEIGEN_DONT_ALIGN_STATICALLY) endif() find_program(CCACHE_FOUND ccache) diff --git a/src/esp/assets/FRLInstanceMeshData.cpp b/src/esp/assets/FRLInstanceMeshData.cpp index ceb8bfb4bb..0a310d7e4b 100644 --- a/src/esp/assets/FRLInstanceMeshData.cpp +++ b/src/esp/assets/FRLInstanceMeshData.cpp @@ -18,8 +18,7 @@ #include #include -#include -#include + #include #include #include diff --git a/src/esp/assets/GenericInstanceMeshData.cpp b/src/esp/assets/GenericInstanceMeshData.cpp index 2ca79b1ed9..90fc5bbe43 100644 --- a/src/esp/assets/GenericInstanceMeshData.cpp +++ b/src/esp/assets/GenericInstanceMeshData.cpp @@ -18,8 +18,6 @@ #include #include -#include -#include #include #include #include diff --git a/src/esp/assets/PTexMeshData.cpp b/src/esp/assets/PTexMeshData.cpp index 1fe9989c94..4fbbfec94b 100644 --- a/src/esp/assets/PTexMeshData.cpp +++ b/src/esp/assets/PTexMeshData.cpp @@ -5,8 +5,59 @@ #include "PTexMeshData.h" #include +#ifndef _WIN32 #include #include +#else +#include +#include + +#define PROT_READ 1 +#define MAP_PRIVATE 4 + +// Note: This is not a full implementation of mmap/munmap. It is is only meant to work in limited scenarios +void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t off) { + + ASSERT(prot == PROT_READ && flags == MAP_PRIVATE); + + DWORD newProt = PAGE_READONLY; + + void* ret; + + HANDLE h = INVALID_HANDLE_VALUE; + h = (HANDLE)_get_osfhandle(fd); + + HANDLE fmh = CreateFileMapping( + h, + nullptr, + newProt | SEC_COMMIT | SEC_RESERVE, + (DWORD)((length >> 32) & 0xFFFFFFFF), + (DWORD)(length & 0xFFFFFFFF), + nullptr); + ret = MapViewOfFileEx( + fmh, + FILE_MAP_ALL_ACCESS, + (DWORD)((off >> 32) & 0xFFFFFFFF), + (DWORD)(off & 0xFFFFFFFF), + 0, + addr); + if (ret == nullptr) { + ret = NULL; + } + CloseHandle(fmh); + + return ret; +} + +int munmap(void* addr, size_t length) { + // Try to unmap it as a file. + if (!UnmapViewOfFile(addr)) { + return -1; + } + return 0; +} +#endif + #include #include #include @@ -93,7 +144,7 @@ std::vector splitMesh( // calculate vertex grid position and code #pragma omp parallel for - for (size_t i = 0; i < mesh.vbo.size(); i++) { + for (int32_t i = 0; i < mesh.vbo.size(); i++) { const vec3f p = mesh.vbo[i].head<3>(); vec3f pi = (p - boundingBox.min()) / splitSize; verts[i] = EncodeMorton3(pi.cast()); @@ -112,7 +163,7 @@ std::vector splitMesh( faces.resize(numFaces); #pragma omp parallel for - for (size_t i = 0; i < numFaces; i++) { + for (int32_t i = 0; i < numFaces; i++) { faces[i].originalFace = i; faces[i].code = std::numeric_limits::max(); for (int j = 0; j < 4; j++) { @@ -158,7 +209,7 @@ std::vector splitMesh( } #pragma omp parallel for - for (size_t i = 0; i < numChunks; i++) { + for (int32_t i = 0; i < numChunks; i++) { uint32_t chunkSize = chunkStart[i + 1] - chunkStart[i]; std::vector refdVerts; diff --git a/src/esp/gfx/PTexMeshShader.cpp b/src/esp/gfx/PTexMeshShader.cpp index 68153ecfac..243e97e536 100644 --- a/src/esp/gfx/PTexMeshShader.cpp +++ b/src/esp/gfx/PTexMeshShader.cpp @@ -5,7 +5,6 @@ #include "PTexMeshShader.h" #include -#include #include #include diff --git a/src/esp/gfx/WindowlessContext.cpp b/src/esp/gfx/WindowlessContext.cpp index a1c8c8225c..e8a896f671 100644 --- a/src/esp/gfx/WindowlessContext.cpp +++ b/src/esp/gfx/WindowlessContext.cpp @@ -18,7 +18,7 @@ #include #include #include -#elif __win32__ +#elif __win32__ || defined(_WIN32) #include #endif diff --git a/src/esp/nav/PathFinder.h b/src/esp/nav/PathFinder.h index 78729084e2..ad4b59dc23 100644 --- a/src/esp/nav/PathFinder.h +++ b/src/esp/nav/PathFinder.h @@ -18,7 +18,7 @@ class dtQueryPathState; namespace esp { // forward declaration namespace assets { -class MeshData; +struct MeshData; } namespace nav {