From ce2a6da71f1ac1f4bee849bbe1734eb348fb9d98 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:18:39 -0700 Subject: [PATCH] Build FlooohZ80 on Linux --- .gitignore | 1 - Assets/dll/libFlooohZ80.so | Bin 0 -> 39024 bytes ExternalProjects/FlooohZ80/.gitignore | 2 + ExternalProjects/FlooohZ80/FlooohZ80.cpp | 121 +++++++++++----------- ExternalProjects/FlooohZ80/FlooohZ80.h | 65 ------------ ExternalProjects/FlooohZ80/build_linux.sh | 11 ++ 6 files changed, 76 insertions(+), 124 deletions(-) create mode 100755 Assets/dll/libFlooohZ80.so create mode 100644 ExternalProjects/FlooohZ80/.gitignore create mode 100755 ExternalProjects/FlooohZ80/build_linux.sh diff --git a/.gitignore b/.gitignore index 173044e685..9eb2979ed8 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,3 @@ UpgradeLog.htm /packages launchSettings.json -/ExternalProjects/FlooohZ80/x64 diff --git a/Assets/dll/libFlooohZ80.so b/Assets/dll/libFlooohZ80.so new file mode 100755 index 0000000000000000000000000000000000000000..1be154240ae76317d350c17adf7f85b10a13d7f2 GIT binary patch literal 39024 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 S*3<0}{r^ReL|O7l^#1@SP_=jf literal 0 HcmV?d00001 diff --git a/ExternalProjects/FlooohZ80/.gitignore b/ExternalProjects/FlooohZ80/.gitignore new file mode 100644 index 0000000000..de83886ba3 --- /dev/null +++ b/ExternalProjects/FlooohZ80/.gitignore @@ -0,0 +1,2 @@ +x64/ +build/ diff --git a/ExternalProjects/FlooohZ80/FlooohZ80.cpp b/ExternalProjects/FlooohZ80/FlooohZ80.cpp index 3a405a40cd..e2ed06b58a 100644 --- a/ExternalProjects/FlooohZ80/FlooohZ80.cpp +++ b/ExternalProjects/FlooohZ80/FlooohZ80.cpp @@ -85,90 +85,95 @@ void LibFz80::SET_im(uint8_t value) { z80Instance->im = value; } void LibFz80::SET_iff1(bool value) { z80Instance->iff1 = value; } void LibFz80::SET_iff2(bool value) { z80Instance->iff2 = value; } - // Expose the functions for C# interoperability extern "C" { - __declspec(dllexport) LibFz80* CreateLibFz80() { + #ifdef _WIN32 + #define FZ80_EXPORT __declspec(dllexport) + #else + #define FZ80_EXPORT __attribute__((visibility("default"))) + #endif + + FZ80_EXPORT LibFz80* CreateLibFz80() { return new LibFz80(); } - __declspec(dllexport) void DestroyLibFz80(LibFz80* instance) { + FZ80_EXPORT void DestroyLibFz80(LibFz80* instance) { delete instance; } - __declspec(dllexport) uint64_t LibFz80_Initialize(LibFz80* instance) { + FZ80_EXPORT uint64_t LibFz80_Initialize(LibFz80* instance) { return instance->Initialize(); } - __declspec(dllexport) uint64_t LibFz80_Reset(LibFz80* instance) { + FZ80_EXPORT uint64_t LibFz80_Reset(LibFz80* instance) { return instance->Reset(); } - __declspec(dllexport) uint64_t LibFz80_Tick(LibFz80* instance, uint64_t pins) { + FZ80_EXPORT uint64_t LibFz80_Tick(LibFz80* instance, uint64_t pins) { return instance->Tick(pins); } - __declspec(dllexport) uint64_t LibFz80_Prefetch(LibFz80* instance, uint16_t new_pc) { + FZ80_EXPORT uint64_t LibFz80_Prefetch(LibFz80* instance, uint16_t new_pc) { return instance->Prefetch(new_pc); } - __declspec(dllexport) bool LibFz80_InstructionDone(LibFz80* instance) { + FZ80_EXPORT bool LibFz80_InstructionDone(LibFz80* instance) { return instance->InstructionDone(); } // Getter functions - __declspec(dllexport) uint16_t LibFz80_GET_step(LibFz80* instance) { return instance->GET_step(); } - __declspec(dllexport) uint16_t LibFz80_GET_addr(LibFz80* instance) { return instance->GET_addr(); } - __declspec(dllexport) uint8_t LibFz80_GET_dlatch(LibFz80* instance) { return instance->GET_dlatch(); } - __declspec(dllexport) uint8_t LibFz80_GET_opcode(LibFz80* instance) { return instance->GET_opcode(); } - __declspec(dllexport) uint8_t LibFz80_GET_hlx_idx(LibFz80* instance) { return instance->GET_hlx_idx(); } - __declspec(dllexport) bool LibFz80_GET_prefix_active(LibFz80* instance) { return instance->GET_prefix_active(); } - __declspec(dllexport) uint64_t LibFz80_GET_pins(LibFz80* instance) { return instance->GET_pins(); } - __declspec(dllexport) uint64_t LibFz80_GET_int_bits(LibFz80* instance) { return instance->GET_int_bits(); } - __declspec(dllexport) uint16_t LibFz80_GET_pc(LibFz80* instance) { return instance->GET_pc(); } - __declspec(dllexport) uint16_t LibFz80_GET_af(LibFz80* instance) { return instance->GET_af(); } - __declspec(dllexport) uint16_t LibFz80_GET_bc(LibFz80* instance) { return instance->GET_bc(); } - __declspec(dllexport) uint16_t LibFz80_GET_de(LibFz80* instance) { return instance->GET_de(); } - __declspec(dllexport) uint16_t LibFz80_GET_hl(LibFz80* instance) { return instance->GET_hl(); } - __declspec(dllexport) uint16_t LibFz80_GET_ix(LibFz80* instance) { return instance->GET_ix(); } - __declspec(dllexport) uint16_t LibFz80_GET_iy(LibFz80* instance) { return instance->GET_iy(); } - __declspec(dllexport) uint16_t LibFz80_GET_wz(LibFz80* instance) { return instance->GET_wz(); } - __declspec(dllexport) uint16_t LibFz80_GET_sp(LibFz80* instance) { return instance->GET_sp(); } - __declspec(dllexport) uint16_t LibFz80_GET_ir(LibFz80* instance) { return instance->GET_ir(); } - __declspec(dllexport) uint16_t LibFz80_GET_af2(LibFz80* instance) { return instance->GET_af2(); } - __declspec(dllexport) uint16_t LibFz80_GET_bc2(LibFz80* instance) { return instance->GET_bc2(); } - __declspec(dllexport) uint16_t LibFz80_GET_de2(LibFz80* instance) { return instance->GET_de2(); } - __declspec(dllexport) uint16_t LibFz80_GET_hl2(LibFz80* instance) { return instance->GET_hl2(); } - __declspec(dllexport) uint8_t LibFz80_GET_im(LibFz80* instance) { return instance->GET_im(); } - __declspec(dllexport) bool LibFz80_GET_iff1(LibFz80* instance) { return instance->GET_iff1(); } - __declspec(dllexport) bool LibFz80_GET_iff2(LibFz80* instance) { return instance->GET_iff2(); } + FZ80_EXPORT uint16_t LibFz80_GET_step(LibFz80* instance) { return instance->GET_step(); } + FZ80_EXPORT uint16_t LibFz80_GET_addr(LibFz80* instance) { return instance->GET_addr(); } + FZ80_EXPORT uint8_t LibFz80_GET_dlatch(LibFz80* instance) { return instance->GET_dlatch(); } + FZ80_EXPORT uint8_t LibFz80_GET_opcode(LibFz80* instance) { return instance->GET_opcode(); } + FZ80_EXPORT uint8_t LibFz80_GET_hlx_idx(LibFz80* instance) { return instance->GET_hlx_idx(); } + FZ80_EXPORT bool LibFz80_GET_prefix_active(LibFz80* instance) { return instance->GET_prefix_active(); } + FZ80_EXPORT uint64_t LibFz80_GET_pins(LibFz80* instance) { return instance->GET_pins(); } + FZ80_EXPORT uint64_t LibFz80_GET_int_bits(LibFz80* instance) { return instance->GET_int_bits(); } + FZ80_EXPORT uint16_t LibFz80_GET_pc(LibFz80* instance) { return instance->GET_pc(); } + FZ80_EXPORT uint16_t LibFz80_GET_af(LibFz80* instance) { return instance->GET_af(); } + FZ80_EXPORT uint16_t LibFz80_GET_bc(LibFz80* instance) { return instance->GET_bc(); } + FZ80_EXPORT uint16_t LibFz80_GET_de(LibFz80* instance) { return instance->GET_de(); } + FZ80_EXPORT uint16_t LibFz80_GET_hl(LibFz80* instance) { return instance->GET_hl(); } + FZ80_EXPORT uint16_t LibFz80_GET_ix(LibFz80* instance) { return instance->GET_ix(); } + FZ80_EXPORT uint16_t LibFz80_GET_iy(LibFz80* instance) { return instance->GET_iy(); } + FZ80_EXPORT uint16_t LibFz80_GET_wz(LibFz80* instance) { return instance->GET_wz(); } + FZ80_EXPORT uint16_t LibFz80_GET_sp(LibFz80* instance) { return instance->GET_sp(); } + FZ80_EXPORT uint16_t LibFz80_GET_ir(LibFz80* instance) { return instance->GET_ir(); } + FZ80_EXPORT uint16_t LibFz80_GET_af2(LibFz80* instance) { return instance->GET_af2(); } + FZ80_EXPORT uint16_t LibFz80_GET_bc2(LibFz80* instance) { return instance->GET_bc2(); } + FZ80_EXPORT uint16_t LibFz80_GET_de2(LibFz80* instance) { return instance->GET_de2(); } + FZ80_EXPORT uint16_t LibFz80_GET_hl2(LibFz80* instance) { return instance->GET_hl2(); } + FZ80_EXPORT uint8_t LibFz80_GET_im(LibFz80* instance) { return instance->GET_im(); } + FZ80_EXPORT bool LibFz80_GET_iff1(LibFz80* instance) { return instance->GET_iff1(); } + FZ80_EXPORT bool LibFz80_GET_iff2(LibFz80* instance) { return instance->GET_iff2(); } // Setter functions - __declspec(dllexport) void LibFz80_SET_step(LibFz80* instance, uint16_t value) { instance->SET_step(value); } - __declspec(dllexport) void LibFz80_SET_addr(LibFz80* instance, uint16_t value) { instance->SET_addr(value); } - __declspec(dllexport) void LibFz80_SET_dlatch(LibFz80* instance, uint8_t value) { instance->SET_dlatch(value); } - __declspec(dllexport) void LibFz80_SET_opcode(LibFz80* instance, uint8_t value) { instance->SET_opcode(value); } - __declspec(dllexport) void LibFz80_SET_hlx_idx(LibFz80* instance, uint8_t value) { instance->SET_hlx_idx(value); } - __declspec(dllexport) void LibFz80_SET_prefix_active(LibFz80* instance, bool value) { instance->SET_prefix_active(value); } - __declspec(dllexport) void LibFz80_SET_pins(LibFz80* instance, uint64_t value) { instance->SET_pins(value); } - __declspec(dllexport) void LibFz80_SET_int_bits(LibFz80* instance, uint64_t value) { instance->SET_int_bits(value); } - __declspec(dllexport) void LibFz80_SET_pc(LibFz80* instance, uint16_t value) { instance->SET_pc(value); } - __declspec(dllexport) void LibFz80_SET_af(LibFz80* instance, uint16_t value) { instance->SET_af(value); } - __declspec(dllexport) void LibFz80_SET_bc(LibFz80* instance, uint16_t value) { instance->SET_bc(value); } - __declspec(dllexport) void LibFz80_SET_de(LibFz80* instance, uint16_t value) { instance->SET_de(value); } - __declspec(dllexport) void LibFz80_SET_hl(LibFz80* instance, uint16_t value) { instance->SET_hl(value); } - __declspec(dllexport) void LibFz80_SET_ix(LibFz80* instance, uint16_t value) { instance->SET_ix(value); } - __declspec(dllexport) void LibFz80_SET_iy(LibFz80* instance, uint16_t value) { instance->SET_iy(value); } - __declspec(dllexport) void LibFz80_SET_wz(LibFz80* instance, uint16_t value) { instance->SET_wz(value); } - __declspec(dllexport) void LibFz80_SET_sp(LibFz80* instance, uint16_t value) { instance->SET_sp(value); } - __declspec(dllexport) void LibFz80_SET_ir(LibFz80* instance, uint16_t value) { instance->SET_ir(value); } - __declspec(dllexport) void LibFz80_SET_af2(LibFz80* instance, uint16_t value) { instance->SET_af2(value); } - __declspec(dllexport) void LibFz80_SET_bc2(LibFz80* instance, uint16_t value) { instance->SET_bc2(value); } - __declspec(dllexport) void LibFz80_SET_de2(LibFz80* instance, uint16_t value) { instance->SET_de2(value); } - __declspec(dllexport) void LibFz80_SET_hl2(LibFz80* instance, uint16_t value) { instance->SET_hl2(value); } - __declspec(dllexport) void LibFz80_SET_im(LibFz80* instance, uint8_t value) { instance->SET_im(value); } - __declspec(dllexport) void LibFz80_SET_iff1(LibFz80* instance, bool value) { instance->SET_iff1(value); } - __declspec(dllexport) void LibFz80_SET_iff2(LibFz80* instance, bool value) { instance->SET_iff2(value); } + FZ80_EXPORT void LibFz80_SET_step(LibFz80* instance, uint16_t value) { instance->SET_step(value); } + FZ80_EXPORT void LibFz80_SET_addr(LibFz80* instance, uint16_t value) { instance->SET_addr(value); } + FZ80_EXPORT void LibFz80_SET_dlatch(LibFz80* instance, uint8_t value) { instance->SET_dlatch(value); } + FZ80_EXPORT void LibFz80_SET_opcode(LibFz80* instance, uint8_t value) { instance->SET_opcode(value); } + FZ80_EXPORT void LibFz80_SET_hlx_idx(LibFz80* instance, uint8_t value) { instance->SET_hlx_idx(value); } + FZ80_EXPORT void LibFz80_SET_prefix_active(LibFz80* instance, bool value) { instance->SET_prefix_active(value); } + FZ80_EXPORT void LibFz80_SET_pins(LibFz80* instance, uint64_t value) { instance->SET_pins(value); } + FZ80_EXPORT void LibFz80_SET_int_bits(LibFz80* instance, uint64_t value) { instance->SET_int_bits(value); } + FZ80_EXPORT void LibFz80_SET_pc(LibFz80* instance, uint16_t value) { instance->SET_pc(value); } + FZ80_EXPORT void LibFz80_SET_af(LibFz80* instance, uint16_t value) { instance->SET_af(value); } + FZ80_EXPORT void LibFz80_SET_bc(LibFz80* instance, uint16_t value) { instance->SET_bc(value); } + FZ80_EXPORT void LibFz80_SET_de(LibFz80* instance, uint16_t value) { instance->SET_de(value); } + FZ80_EXPORT void LibFz80_SET_hl(LibFz80* instance, uint16_t value) { instance->SET_hl(value); } + FZ80_EXPORT void LibFz80_SET_ix(LibFz80* instance, uint16_t value) { instance->SET_ix(value); } + FZ80_EXPORT void LibFz80_SET_iy(LibFz80* instance, uint16_t value) { instance->SET_iy(value); } + FZ80_EXPORT void LibFz80_SET_wz(LibFz80* instance, uint16_t value) { instance->SET_wz(value); } + FZ80_EXPORT void LibFz80_SET_sp(LibFz80* instance, uint16_t value) { instance->SET_sp(value); } + FZ80_EXPORT void LibFz80_SET_ir(LibFz80* instance, uint16_t value) { instance->SET_ir(value); } + FZ80_EXPORT void LibFz80_SET_af2(LibFz80* instance, uint16_t value) { instance->SET_af2(value); } + FZ80_EXPORT void LibFz80_SET_bc2(LibFz80* instance, uint16_t value) { instance->SET_bc2(value); } + FZ80_EXPORT void LibFz80_SET_de2(LibFz80* instance, uint16_t value) { instance->SET_de2(value); } + FZ80_EXPORT void LibFz80_SET_hl2(LibFz80* instance, uint16_t value) { instance->SET_hl2(value); } + FZ80_EXPORT void LibFz80_SET_im(LibFz80* instance, uint8_t value) { instance->SET_im(value); } + FZ80_EXPORT void LibFz80_SET_iff1(LibFz80* instance, bool value) { instance->SET_iff1(value); } + FZ80_EXPORT void LibFz80_SET_iff2(LibFz80* instance, bool value) { instance->SET_iff2(value); } } \ No newline at end of file diff --git a/ExternalProjects/FlooohZ80/FlooohZ80.h b/ExternalProjects/FlooohZ80/FlooohZ80.h index 2a9727c894..9a856ed400 100644 --- a/ExternalProjects/FlooohZ80/FlooohZ80.h +++ b/ExternalProjects/FlooohZ80/FlooohZ80.h @@ -74,69 +74,4 @@ private: z80_t* z80Instance; }; -// Expose the functions for C# interoperability -extern "C" { - __declspec(dllexport) LibFz80* CreateLibFz80(); - __declspec(dllexport) void DestroyLibFz80(LibFz80* instance); - __declspec(dllexport) uint64_t LibFz80_Initialize(LibFz80* instance); - __declspec(dllexport) uint64_t LibFz80_Reset(LibFz80* instance); - __declspec(dllexport) uint64_t LibFz80_Tick(LibFz80* instance, uint64_t pins); - __declspec(dllexport) uint64_t LibFz80_Prefetch(LibFz80* instance, uint16_t new_pc); - __declspec(dllexport) bool LibFz80_InstructionDone(LibFz80* instance); - - // expose struct field getters - __declspec(dllexport) uint16_t LibFz80_GET_step(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_addr(LibFz80* instance); - __declspec(dllexport) uint8_t LibFz80_GET_dlatch(LibFz80* instance); - __declspec(dllexport) uint8_t LibFz80_GET_opcode(LibFz80* instance); - __declspec(dllexport) uint8_t LibFz80_GET_hlx_idx(LibFz80* instance); - __declspec(dllexport) bool LibFz80_GET_prefix_active(LibFz80* instance); - __declspec(dllexport) uint64_t LibFz80_GET_pins(LibFz80* instance); - __declspec(dllexport) uint64_t LibFz80_GET_int_bits(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_pc(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_af(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_bc(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_de(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_hl(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_ix(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_iy(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_wz(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_sp(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_ir(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_af2(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_bc2(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_de2(LibFz80* instance); - __declspec(dllexport) uint16_t LibFz80_GET_hl2(LibFz80* instance); - __declspec(dllexport) uint8_t LibFz80_GET_im(LibFz80* instance); - __declspec(dllexport) bool LibFz80_GET_iff1(LibFz80* instance); - __declspec(dllexport) bool LibFz80_GET_iff2(LibFz80* instance); - - // expose struct field setters - __declspec(dllexport) void LibFz80_SET_step(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_addr(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_dlatch(LibFz80* instance, uint8_t value); - __declspec(dllexport) void LibFz80_SET_opcode(LibFz80* instance, uint8_t value); - __declspec(dllexport) void LibFz80_SET_hlx_idx(LibFz80* instance, uint8_t value); - __declspec(dllexport) void LibFz80_SET_prefix_active(LibFz80* instance, bool value); - __declspec(dllexport) void LibFz80_SET_pins(LibFz80* instance, uint64_t value); - __declspec(dllexport) void LibFz80_SET_int_bits(LibFz80* instance, uint64_t value); - __declspec(dllexport) void LibFz80_SET_pc(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_af(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_bc(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_de(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_hl(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_ix(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_iy(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_wz(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_sp(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_ir(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_af2(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_bc2(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_de2(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_hl2(LibFz80* instance, uint16_t value); - __declspec(dllexport) void LibFz80_SET_im(LibFz80* instance, uint8_t value); - __declspec(dllexport) void LibFz80_SET_iff1(LibFz80* instance, bool value); - __declspec(dllexport) void LibFz80_SET_iff2(LibFz80* instance, bool value); -} - #endif // FLOOOHZ80_H \ No newline at end of file diff --git a/ExternalProjects/FlooohZ80/build_linux.sh b/ExternalProjects/FlooohZ80/build_linux.sh new file mode 100755 index 0000000000..1d13685489 --- /dev/null +++ b/ExternalProjects/FlooohZ80/build_linux.sh @@ -0,0 +1,11 @@ +#!/bin/sh +if [ -z "$BIZHAWKBUILD_HOME" ]; then export BIZHAWKBUILD_HOME="$(realpath "$(dirname "$0")/../..")"; fi +if [ -z "$CXX" ]; then export CXX="clang++"; fi + +mkdir -p build +$CXX -std=c++11 -O3 -flto -fvisibility=hidden -fPIC -shared -s FlooohZ80.cpp -o build/libFlooohZ80.so + +cp build/libFlooohZ80.so "$BIZHAWKBUILD_HOME/Assets/dll" +if [ -e "$BIZHAWKBUILD_HOME/output" ]; then + cp build/libFlooohZ80.so "$BIZHAWKBUILD_HOME/output/dll" +fi