From b2a4780b17fdac6e14adae2e0136b711ee99d54f Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Mon, 8 Dec 2014 16:04:02 -0800 Subject: [PATCH] 3DS: Get core library building on 3DS --- CMakeLists.txt | 3 +++ src/util/vfs.c | 41 ++++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c30e77c80..b91ed1c76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,6 +106,9 @@ if(WIN32) list(APPEND OS_LIB ws2_32) file(GLOB OS_SRC ${CMAKE_SOURCE_DIR}/src/platform/windows/*.c) source_group("Windows-specific code" FILES ${OS_SRC}) +elseif(3DS) + add_definitions(-D__3DS) + list(APPEND OS_LIB ctru) else() add_definitions(-DUSE_PTHREADS) list(APPEND OS_LIB pthread) diff --git a/src/util/vfs.c b/src/util/vfs.c index b50f610ad..d7ad6a0c8 100644 --- a/src/util/vfs.c +++ b/src/util/vfs.c @@ -10,13 +10,15 @@ #include #include -#ifndef _WIN32 -#include -#define PATH_SEP '/' -#else +#ifdef _WIN32 #include #include #define PATH_SEP '\\' +#elif defined(__3DS) +#define PATH_SEP '/' +#else +#include +#define PATH_SEP '/' #endif struct VFileFD { @@ -114,21 +116,7 @@ ssize_t _vfdWrite(struct VFile* vf, const void* buffer, size_t size) { return write(vfd->fd, buffer, size); } -#ifndef _WIN32 -static void* _vfdMap(struct VFile* vf, size_t size, int flags) { - struct VFileFD* vfd = (struct VFileFD*) vf; - int mmapFlags = MAP_PRIVATE; - if (flags & MAP_WRITE) { - mmapFlags = MAP_SHARED; - } - return mmap(0, size, PROT_READ | PROT_WRITE, mmapFlags, vfd->fd, 0); -} - -static void _vfdUnmap(struct VFile* vf, void* memory, size_t size) { - UNUSED(vf); - munmap(memory, size); -} -#else +#ifdef _WIN32 static void* _vfdMap(struct VFile* vf, size_t size, int flags) { struct VFileFD* vfd = (struct VFileFD*) vf; int createFlags = PAGE_WRITECOPY; @@ -154,6 +142,21 @@ static void _vfdUnmap(struct VFile* vf, void* memory, size_t size) { CloseHandle(vfd->hMap); vfd->hMap = 0; } +#elif defined(__3DS) +#else +static void* _vfdMap(struct VFile* vf, size_t size, int flags) { + struct VFileFD* vfd = (struct VFileFD*) vf; + int mmapFlags = MAP_PRIVATE; + if (flags & MAP_WRITE) { + mmapFlags = MAP_SHARED; + } + return mmap(0, size, PROT_READ | PROT_WRITE, mmapFlags, vfd->fd, 0); +} + +static void _vfdUnmap(struct VFile* vf, void* memory, size_t size) { + UNUSED(vf); + munmap(memory, size); +} #endif static void _vfdTruncate(struct VFile* vf, size_t size) {