From a017390358cdb23fffb30988dc84bb190d0403ca Mon Sep 17 00:00:00 2001 From: Slaren <2141330+slaren@users.noreply.github.com> Date: Wed, 29 Mar 2023 22:22:36 +0200 Subject: [PATCH] Initial windows support (untested) --- llama.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/llama.cpp b/llama.cpp index aaf5f0ad5..87633f972 100644 --- a/llama.cpp +++ b/llama.cpp @@ -12,11 +12,15 @@ #include #include -// headers for POSIX mmap +// mmap #if defined (__unix__) || defined (__APPLE__) # include # include # include +#elif defined(_WIN32) +# define WIN32_LEAN_AND_MEAN +# include +//#include #endif #define LLAMA_USE_SCRATCH @@ -312,8 +316,31 @@ static void mmap_file(const char* fname, void * &mm_addr, size_t &mm_length) { mm_addr = NULL; mm_length = 0; } +#elif defined(_WIN32) + mm_addr = NULL; + + HANDLE hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) { + return; + } + + // not really necessary + LARGE_INTEGER fileSize; + GetFileSizeEx(hFile, &fileSize); + mm_length = fileSize; + + HANDLE hMapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); + CloseHandle(hFile); + + if (hMapping == NULL) { + return; + } + + mm_addr = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); + CloseHandle(hMapping); #else - // TODO: windows support + mm_addr = NULL; + mm_length = 0; (void)(fname); // suppress warnings #endif } @@ -322,8 +349,9 @@ static void munmap_file(void * addr, size_t length) { #if defined(MAP_FAILED) // POSIX munmap(addr, length); +#elif defined(_WIN32) + UnmapViewOfFile(addr); #else - // TODO: windows support (void)(addr); // suppress warnings (void)(length); #endif