Fork of https://gitlab.com/Mr_Goldberg/goldberg_emulator
:red_circle:
This fork is not a takeover, not a resurrection of the original project, and not a replacement.
This is just a fork, don't take it seriously.
You are highly encouraged to fork/clone it and do whatever you want with it.
:red_circle:
This fork is incompatible with the original repo, lots of things has changed and might be even broken.
If something doesn't work, feel free to create a pull request with the appropriate fix, otherwise ignore this fork and use the original emu.
Thanks to everyone contributing to this project in any way possible, we try to keep the CHANGELOG.md updated with all the changes and their authors.
This project depends on many third-party libraries and tools, credits to them for their amazing work, you can find their listing here in CREDITS.md.
generate_interfaces
tool.ColdClientLoader
setup.You can find helper guides, scripts, and tools here:
(These guides, scripts, and tools are maintained by their authors.)
You can also find instructions here in README.release.md
Disable automatic CRLF handling:
Locally
git config --local core.autocrlf false
Or globally/system wide
git config --system core.autocrlf false
git config --global core.autocrlf false
Clone the repo and its submodules recursively
git clone --recurse-submodules -j8 https://github.com/Detanup01/gbe_fork.git
The switch -j8
is optional, it allows Git to fetch up to 8 submodules
It is adviseable to always checkout submodules every now and then, to make sure they're up to date
git submodule update --init --recursive --remote
You need Windows 10 or 8.1 + WDK
Using Visual Studio, install Visual Studio 2022 Community
: https://visualstudio.microsoft.com/vs/community/
Desktop development with C++
Individual componenets
scroll to the buttom and select the latest version of Windows XX SDK (XX.X...)
Windows 11 SDK (10.0.22621.0)
Using MSYS2
this is currently experimental and will not work due to ABI differences: https://www.msys2.org/
UCRT64
or MINGW64
then install the GCC toolchainUCRT64
pacman -S mingw-w64-ucrt-x86_64-gcc
MINGW64
pacman -S mingw-w64-i686-gcc
MINGW32
then install the GCC toolchain
pacman -S mingw-w64-i686-gcc
Python 3.10 or above: https://www.python.org/downloads/windows/
After installation, make sure it works
python --version
(Optional) Install a GUI for Git like GitHub Desktop, or Sourcetree
sudo apt update -y
sudo apt install -y coreutils # echo, printf, etc...
sudo apt install -y build-essential
sudo apt install -y gcc-multilib # needed for 32-bit builds
sudo apt install -y g++-multilib
sudo apt install -y libglx-dev # needed for overlay build (header files such as GL/glx.h)
sudo apt install -y libgl-dev # needed for overlay build (header files such as GL/gl.h)
(Optional) Additional packages
sudo apt install -y clang # clang compiler
sudo apt install -y binutils # contains the tool 'readelf' mainly, and other usefull binary stuff
sudo apt update -y
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update -y
sudo apt install -y "python3.12"
sudo apt install -y "python3.12-dev"
sudo apt install -y "python3.12-venv"
sudo apt install -y python3-dev
# make sure it works
python3.12 --version
These are third party libraries needed to build the emu later, they are linked with the emu during its build process.
You don't need to build these dependencies every time, they rarely get updated.
The only times you'll need to rebuild them is either when their separete build folder was accedentally deleted, or when the dependencies were updated.
Open CMD in the repo folder, then run the following
To build using Visual Studio
set "CMAKE_GENERATOR=Visual Studio 17 2022"
third-party\common\win\premake\premake5.exe --file=premake5-deps.lua --64-build --32-build --all-ext --all-build --verbose --os=windows vs2022
To build using MSYS2
this is currently experimental and will not work due to ABI differences
(Optional) In both cases below, you can use Clang
compiler instead of GCC
by running these 2 commands in the same terminal instance
export CC="clang"
export CXX="clang++"
UCRT64
or MINGW64
)export CMAKE_GENERATOR="MSYS Makefiles"
./third-party/common/win/premake/premake5.exe --file=premake5-deps.lua --64-build --all-ext --all-build --verbose --os=windows gmake2
MINGW32
)export CMAKE_GENERATOR="MSYS Makefiles"
./third-party/common/win/premake/premake5.exe --file=premake5-deps.lua --32-build --all-ext --all-build --verbose --os=windows gmake2
This will:
third-party
into the folder build\deps\win
Open a terminal in the repo folder (Optional) You can use Clang
compiler instead of GCC
by running these 2 commands in the current terminal instance
export CC="clang"
export CXX="clang++"
Then run the following
export CMAKE_GENERATOR="Unix Makefiles"
./third-party/common/linux/premake/premake5 --file=premake5-deps.lua --64-build --32-build --all-ext --all-build --verbose --os=linux gmake2
This will:
third-party
into the folder build/deps/linux
Open CMD in the repo folder, then run the following
For Visual Studio 2022
third-party\common\win\premake\premake5.exe --file=premake5.lua --genproto --os=windows vs2022
You can then go to the folder build\project\vs2022\win
and open the produced .sln
file in Visual Studio.
Or, if you prefer to do it from command line, open the Developer Command Prompt for VS 2022
inside the above folder, then:
msbuild /nologo /v:n /p:Configuration=release,Platform=Win32 gbe.sln
msbuild /nologo /v:n /p:Configuration=release,Platform=x64 gbe.sln
For MSYS2
this is currently experimental and will not work due to ABI differences
./third-party/common/win/premake/premake5.exe --file=premake5.lua --genproto --os=windows gmake2
cd ./build/project/gmake2/win
(Optional) You can use Clang
compiler instead of GCC
by running these 2 commands in the current terminal instance
export CC="clang"
export CXX="clang++"
UCRT64
or MINGW64
)
make config=release_x64 -j 8 all
MINGW32
)
make config=release_x32 -j 8 all
To see all possible build targets
make help
This will build a release version of the emu in the folder build\win\<toolchain>\release
An example script build_win_premake.bat
is available, check it out
Open a terminal in the repo folder, then run the following
./third-party/common/linux/premake/premake5 --file=premake5.lua --genproto --os=linux gmake2
cd ./build/project/gmake2/linux
(Optional) You can use Clang
compiler instead of GCC
by running these 2 commands in the current terminal instance
export CC="clang"
export CXX="clang++"
Then run the following
make config=release_x32 -j 8 all
make config=release_x64 -j 8 all
To see all possible build targets
make help
This will build a release version of the emu in the folder build/linux/<toolchain>/release
An example script build_linux_premake.sh
is available, check it out
This is really slow and mainly intended for the CI Workflow scripts, but you can use it as another outlet if you can't build locally.
You have to fork the repo first.
In your fork, open the Settings
tab from the top, then:
Actions
-> General
Actions permissions
select Allow all actions and reusable workflows
Workflow permissions
select Read and write permissions
Artifact and log retention
, you can specify the amount of days to keep the build artifacts/archives.Actions
tab in your forkEmu third-party dependencies (Windows)
) and run it on the main branch (ex: dev
).Build all emu variants (Windows)
Run workflow
-> select the desired branch (for example dev
) -> press the button Run workflow
When you build the dependencies workflows, they will be cached to decrease the build times of the next triggers and avoid unnecessary/wasteful build process.
This will cause a problem if at any time the third-party dependencies were updated, in that case you need to manually delete the cache, in your fork:
Actions
tab at the topCaches
from the left side panelThis step is intended for Github CI/Workflow, but you can create a package locally.
Open CMD in the repos's directory, then run this script
package_win.bat <build_folder>
build_folder
is any folder inside build\win
, for example: vs2022\release
The above example will create a .7z
archive inside build\package\win\
Open bash terminal in the repos's directory, then run this script
package_linux.sh <build_folder>
build_folder
is any folder inside build/linux
, for example: gmake2/release
The above example will create a compressed .tar
archive inside build/package/linux/