12
12
#include < cassert>
13
13
#include < cstring>
14
14
15
- // headers for POSIX mmap
15
+ // mmap
16
16
#if defined (__unix__) || defined (__APPLE__)
17
17
# include < sys/mman.h>
18
18
# include < fcntl.h>
19
19
# include < unistd.h>
20
+ #elif defined(_WIN32)
21
+ # define WIN32_LEAN_AND_MEAN
22
+ # include < Windows.h>
23
+ // #include <Memoryapi.h>
20
24
#endif
21
25
22
26
#define LLAMA_USE_SCRATCH
@@ -312,8 +316,31 @@ static void mmap_file(const char* fname, void * &mm_addr, size_t &mm_length) {
312
316
mm_addr = NULL ;
313
317
mm_length = 0 ;
314
318
}
319
+ #elif defined(_WIN32)
320
+ mm_addr = NULL ;
321
+
322
+ HANDLE hFile = CreateFileA (filename, GENERIC_READ, FILE_SHARE_READ, NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
323
+ if (hFile == INVALID_HANDLE_VALUE) {
324
+ return ;
325
+ }
326
+
327
+ // not really necessary
328
+ LARGE_INTEGER fileSize;
329
+ GetFileSizeEx (hFile, &fileSize);
330
+ mm_length = fileSize;
331
+
332
+ HANDLE hMapping = CreateFileMappingA (hFile, NULL , PAGE_READONLY, 0 , 0 , NULL );
333
+ CloseHandle (hFile);
334
+
335
+ if (hMapping == NULL ) {
336
+ return ;
337
+ }
338
+
339
+ mm_addr = MapViewOfFile (hMapping, FILE_MAP_READ, 0 , 0 , 0 );
340
+ CloseHandle (hMapping);
315
341
#else
316
- // TODO: windows support
342
+ mm_addr = NULL ;
343
+ mm_length = 0 ;
317
344
(void )(fname); // suppress warnings
318
345
#endif
319
346
}
@@ -322,8 +349,9 @@ static void munmap_file(void * addr, size_t length) {
322
349
#if defined(MAP_FAILED)
323
350
// POSIX
324
351
munmap (addr, length);
352
+ #elif defined(_WIN32)
353
+ UnmapViewOfFile (addr);
325
354
#else
326
- // TODO: windows support
327
355
(void )(addr); // suppress warnings
328
356
(void )(length);
329
357
#endif
0 commit comments