diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 0821640ec..498d81815 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -151,6 +151,82 @@ jobs: path: bin/ retention-days: 0 + build-x86_64-osx: + runs-on: macos-14 + steps: + - name: Install dependencies + run: | + brew install zlib + wget http://libsdl.org/release/SDL2-2.30.9.dmg -O SDL2.dmg + hdiutil mount SDL2.dmg + sudo cp -vr /Volumes/SDL2/SDL2.framework /Library/Frameworks + - name: Checkout repository + uses: actions/checkout@v4 + - name: Build pd.x86_64 + run: | + cmake -G"Unix Makefiles" -Bbuild -DCMAKE_OSX_ARCHITECTURES=x86_64 . + cmake --build build --target pd -j4 --clean-first + - name: Build pd.pal.x86_64 + run: | + cmake -G"Unix Makefiles" -Bbuild_pal -DCMAKE_OSX_ARCHITECTURES=x86_64 -DROMID=pal-final . + cmake --build build_pal --target pd -j4 --clean-first + - name: Build pd.jpn.x86_64 + run: | + cmake -G"Unix Makefiles" -Bbuild_jpn -DCMAKE_OSX_ARCHITECTURES=x86_64 -DROMID=jpn-final . + cmake --build build_jpn --target pd -j4 --clean-first + - name: Prepare artifact for packaging + run: | + mkdir -p bin/data + cp build/pd.x86_64 bin/ + cp build_pal/pd.pal.x86_64 bin/ + cp build_jpn/pd.jpn.x86_64 bin/ + cp -vr /Library/Frameworks/SDL2.framework bin/ + touch bin/data/put_your_rom_here.txt + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: pd-x86_64-osx + path: bin/ + retention-days: 0 + + build-arm64-osx: + runs-on: macos-14 + steps: + - name: Install dependencies + run: | + brew install zlib + wget http://libsdl.org/release/SDL2-2.30.9.dmg -O SDL2.dmg + hdiutil mount SDL2.dmg + sudo cp -vr /Volumes/SDL2/SDL2.framework /Library/Frameworks + - name: Checkout repository + uses: actions/checkout@v4 + - name: Build pd.arm64 + run: | + cmake -G"Unix Makefiles" -Bbuild -DCMAKE_OSX_ARCHITECTURES=arm64 . + cmake --build build --target pd -j4 --clean-first + - name: Build pd.pal.arm64 + run: | + cmake -G"Unix Makefiles" -Bbuild_pal -DCMAKE_OSX_ARCHITECTURES=arm64 -DROMID=pal-final . + cmake --build build_pal --target pd -j4 --clean-first + - name: Build pd.jpn.arm64 + run: | + cmake -G"Unix Makefiles" -Bbuild_jpn -DCMAKE_OSX_ARCHITECTURES=arm64 -DROMID=jpn-final . + cmake --build build_jpn --target pd -j4 --clean-first + - name: Prepare artifact for packaging + run: | + mkdir -p bin/data + cp build/pd.arm64 bin/ + cp build_pal/pd.pal.arm64 bin/ + cp build_jpn/pd.jpn.arm64 bin/ + cp -vr /Library/Frameworks/SDL2.framework bin/ + touch bin/data/put_your_rom_here.txt + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: pd-arm64-osx + path: bin/ + retention-days: 0 + build-arm64-nswitch: runs-on: ubuntu-latest if: github.ref == 'refs/heads/port' @@ -226,7 +302,7 @@ jobs: publish-latest-build: runs-on: ubuntu-latest if: github.ref == 'refs/heads/port' - needs: [build-i686-windows, build-i686-linux, build-x86_64-windows, build-x86_64-linux, build-arm64-nswitch, build-flatpak-bundle] + needs: [build-i686-windows, build-i686-linux, build-x86_64-windows, build-x86_64-linux, build-arm64-nswitch, build-x86_64-osx, build-arm64-osx, build-flatpak-bundle] permissions: contents: write steps: @@ -242,6 +318,8 @@ jobs: pushd ci-artifacts tar czf ../ci-release/pd-i686-linux.tar.gz pd-i686-linux tar czf ../ci-release/pd-x86_64-linux.tar.gz pd-x86_64-linux + tar cJf ../ci-release/pd-x86_64-osx.tar.xz pd-x86_64-osx + tar cJf ../ci-release/pd-arm64-osx.tar.xz pd-arm64-osx zip -r ../ci-release/pd-i686-windows.zip pd-i686-windows zip -r ../ci-release/pd-x86_64-windows.zip pd-x86_64-windows zip -r ../ci-release/pd-arm64-nswitch.zip pd-arm64-nswitch diff --git a/CMakeLists.txt b/CMakeLists.txt index c8ffceda1..6b6dba768 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -215,6 +215,8 @@ if(NOT GL_LIBRARY) set(GL_LIBRARY opengl32) elseif(NINTENDO_SWITCH) set(GL_LIBRARY EGL glapi drm_nouveau) + elseif(APPLE) + set(GL_LIBRARY "-framework OpenGL") else() set(GL_LIBRARY GL) endif() diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h index 6ec0f4db8..42df41125 100644 --- a/include/PR/os_libc.h +++ b/include/PR/os_libc.h @@ -31,10 +31,14 @@ #define _OS_LIBC_H_ #include "os_pfs.h" +#include "platform.h" #ifndef PLATFORM_N64 #include #endif +#ifdef PLATFORM_OSX +#include +#endif #ifdef _LANGUAGE_C_PLUS_PLUS extern "C" { @@ -84,9 +88,11 @@ extern "C" { /* byte string operations */ +#ifndef PLATFORM_OSX extern void bcopy(const void *, void *, size_t); extern int bcmp(const void *, const void *, size_t); extern void bzero(void *, size_t); +#endif /* Printf */ diff --git a/port/fast3d/gfx_sdl2.cpp b/port/fast3d/gfx_sdl2.cpp index 181038d26..3b66eed33 100644 --- a/port/fast3d/gfx_sdl2.cpp +++ b/port/fast3d/gfx_sdl2.cpp @@ -130,7 +130,8 @@ static void gfx_sdl_init(const struct GfxWindowInitSettings *set) { { 0, 0, 0 }, // for command line override { 3, 0, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY }, { 3, 2, SDL_GL_CONTEXT_PROFILE_CORE }, - { 2, 1, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY }, + { 4, 1, SDL_GL_CONTEXT_PROFILE_CORE }, + { 2, 1, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY }, // will still require GLSL130 }; u32 glcore = false; diff --git a/port/src/libultra.c b/port/src/libultra.c index 465a1e62c..c978d81a0 100644 --- a/port/src/libultra.c +++ b/port/src/libultra.c @@ -6,6 +6,7 @@ #include #include #include +#include "platform.h" #include "system.h" #include "input.h" #include "video.h" @@ -466,23 +467,21 @@ OSIntMask osSetIntMask(OSIntMask mask) /* libc compatibility wrappers */ -#ifndef HAVE_BZERO +#ifndef PLATFORM_OSX + void bzero(void *ptr, size_t size) { memset(ptr, 0, size); } -#endif -#ifndef HAVE_BCOPY void bcopy(const void *src, void *dst, size_t n) { memcpy(dst, src, n); } -#endif -#ifndef HAVE_BCMP s32 bcmp(const void *s1, const void *s2, size_t n) { return memcmp(s1, s2, n); } + #endif diff --git a/src/include/platform.h b/src/include/platform.h index 176fd83db..79a1864e8 100644 --- a/src/include/platform.h +++ b/src/include/platform.h @@ -10,6 +10,9 @@ #elif defined(__linux__) #define PLATFORM_POSIX 1 #define PLATFORM_LINUX 1 +#elif defined(__APPLE__) + #define PLATFORM_POSIX 1 + #define PLATFORM_OSX 1 #else // assume POSIX-compatible #define PLATFORM_POSIX 1 diff --git a/tools/assetmgr/mklang b/tools/assetmgr/mklang index a4dfbc8cc..b6a2dfb6e 100755 --- a/tools/assetmgr/mklang +++ b/tools/assetmgr/mklang @@ -89,7 +89,7 @@ The input string is UTF-8, and it needs to be re-encoded to a custom encoding. A lookup array is used for this. However, some UTF-8 characters appear multiple types with a different encoding. -For duplicates, we store the character in JSON as something like \habcd where +For duplicates, we store the character in JSON as something like \\habcd where abcd is the target value in hex. """ def encode_jp(string):