diff --git a/README.md b/README.md index bf7de81a..f197e90b 100644 --- a/README.md +++ b/README.md @@ -65,17 +65,31 @@ You can also find instructions here in [README.release.md](./post_build/README.r ``` ### For Windows: -* You need Windows 10 or 8.1 -* Install `Visual Studio 2022 Community`: https://visualstudio.microsoft.com/vs/community/ +* You need Windows 10 or 8.1 + WDK +* Using Visual Studio, install `Visual Studio 2022 Community`: https://visualstudio.microsoft.com/vs/community/ * Select the Workload `Desktop development with C++` * In the `Individual componenets` scroll to the buttom and select the **latest** version of `Windows XX SDK (XX.X...)` - For example `Windows 11 SDK (10.0.22621.0)` -* *(Optional)* Install a GUI for Git like [GitHub Desktop](https://desktop.github.com/), or [Sourcetree](https://www.sourcetreeapp.com/) + For example `Windows 11 SDK (10.0.22621.0)` +* Using `MSYS2` (very limited support): https://www.msys2.org/ + * To build 64-bit binaries use either the [environment](https://www.msys2.org/docs/environments/) `UCRT64` or `MINGW64` then install the GCC toolchain + `UCRT64` + ```shell + pacman -S mingw-w64-ucrt-x86_64-gcc + ``` + `MINGW64` + ```shell + pacman -S mingw-w64-i686-gcc + ``` + * To build 32-bit binaries use the environment `MINGW32` then install the GCC toolchain + ```shell + pacman -S mingw-w64-i686-gcc + ``` * Python 3.10 or above: https://www.python.org/downloads/windows/ After installation, make sure it works ```batch python --version ``` +* *(Optional)* Install a GUI for Git like [GitHub Desktop](https://desktop.github.com/), or [Sourcetree](https://www.sourcetreeapp.com/) ### For Linux: @@ -99,155 +113,91 @@ The only times you'll need to rebuild them is either when their separete build f
#### On Windows: -Open CMD in the repo folder, then run the batch script +Open CMD in the repo folder, then run the following +* To build using `Visual Studio` ```batch -build_win_deps.bat +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 64-bit binaries using `MSYS2` (`UCRT64` or `MINGW64`) +```shell +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 +``` +* To build 32-bit binaries using `MSYS2` (`MINGW32`) +```shell +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: * Extract all third party dependencies from the folder `third-party` into the folder `build\deps\win` * Build all dependencies -Additional arguments you can pass to this script: -* `-j `: build with `` parallel jobs, by default 70% of the available threads -* `-verbose`: output compiler/linker commands used by `CMAKE` - #### On Linux: -Open bash terminal in the repo folder, then run the bash script +Open a terminal in the repo folder, then run the following ```shell -sudo ./build_linux_deps.sh +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: -* Install the required Linux packages via `apt install` (compiler + build tools/libraries) * Extract all third party dependencies from the folder `third-party` into the folder `build/deps/linux` -* Build all dependencies - -Additional arguments you can pass to this script: -* `-j `: build with `` parallel jobs, by default 70% of the available threads -* `-verbose`: output compiler/linker commands used by `CMAKE` -* `-packages_skip`: skip package installation via `apt install` and continue build -* `-packages_only`: install the required Linux packages via `apt install` and exit (don't rebuild) +* Build all dependencies (32-bit and 64-bit) --- ## **Building the emu** ### On Windows: -Open CMD in the repo folder, then run the batch script -```batch -build_win.bat release -``` -This will build a release build of the emu in the folder `build\win\release` +Open CMD in the repo folder, then run the following +* For `MSYS2` + ```shell + ./third-party/common/win/premake/premake5.exe --file=premake5.lua --os=windows gmake2 -
+ cd ./build/project/gmake2/win + ``` + * 64-bit build (`UCRT64` or `MINGW64`) + ```shell + make config=release_x64 -j 8 all + ``` + * 32-bit build (`MINGW32`) + ```shell + make config=release_x32 -j 8 all + ``` + To see all possible build targets + ```shell + make help + ``` +* For `Visual Studio 2022` + ```batch + third-party\common\win\premake\premake5.exe --file=premake5.lua --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: + ```batch + msbuild /nologo /v:n /p:Configuration=release,Platform=Win32 gbe.sln -Arguments you can pass to this script: -* `release`: build the emu in release mode -* `debug`: build the emu in debug mode, which writes events to a log file, and includes `.pdb` files, - check the debug build readme: [README.debug.md](./post_build/README.debug.md) -* `clean`: clean the build folder before building again, otherwise the script will retain everything from previous builds + msbuild /nologo /v:n /p:Configuration=release,Platform=x64 gbe.sln + ``` + ->>>>>>>>> ___ - -* `-j `: build with `` parallel jobs, by default 70% of the available threads -* `+build_str `: add an identification string to the build (default date-time) -* `-verbose`: output compiler/linker commands - ->>>>>>>>> ___ - -* `+lib-32`: build normal `steam_api.dll` -* `+lib-64`: build normal `steam_api64.dll` - ->>>>>>>>> ___ - -* `+ex-lib-32`: build experimental `steam_api.dll` -* `+ex-lib-64`: build experimental `steam_api64.dll` - ->>>>>>>>> ___ - -* `+ex-client-32`: build experimental `steamclient.dll` -* `+ex-client-64`: build experimental `steamclient64.dll` - ->>>>>>>>> ___ - -* `+exclient-32`: build steamclient `steamclient.dll` -* `+exclient-64`: build steamclient `steamclient64.dll` -* `+exclient-ldr-32`: build steamclient loader (32) `steamclient_loader_32.exe` -* `+exclient-ldr-64`: build steamclient loader (64) `steamclient_loader_64.exe` - ->>>>>>>>> ___ - -* `+exclient-extra-32`: build the 32 bit version of the additional dll `steamclient_extra.dll` which is injected by the client loader -* `+exclient-extra-64`: build the 64 bit version of the additional dll `steamclient_extra64.dll` which is injected by the client loader - ->>>>>>>>> ___ - -* `+tool-itf` build the tool `find_interfaces` -* `+tool-lobby`: build the tool `lobby_connect` - ->>>>>>>>> ___ - -* `+lib-netsockets-32` *(experimental)*: build a standalone networking sockets library (32-bit) -* `+lib-netsockets-64` *(experimental)*: build a standalone networking sockets library (64-bit) - ->>>>>>>>> ___ - -* `+lib-gameoverlay-32` *(experimental)*: build a standalone stub/mock GameOverlayRenderer.dll library (32-bit) -* `+lib-gameoverlay-64` *(experimental)*: build a standalone stub/mock GameOverlayRenderer64.dll library (64-bit) +This will build a release version of the emu in the folder `build\win\\release`
### On Linux: -Open bash terminal in the repo folder, then run the bash script (without sudo) +Open a terminal in the repo folder, then run the following ```shell -./build_linux.sh release -``` -This will build a release build of the emu in the folder `build/linux/release` +./third-party/common/linux/premake/premake5 --file=premake5.lua --os=linux gmake2 +cd ./build/project/gmake2/linux +make config=release_x32 -j 8 all +make config=release_x64 -j 8 all +``` -
+To see all possible build targets +```shell +make help +``` -Arguments you can pass to this script: -* `release`: build the emu in release mode -* `debug`: build the emu in debug mode, which writes events to a log file, and includes `.pdb` files, - check the debug build readme: [README.debug.md](./post_build/README.debug.md) -* `clean`: clean the build folder before building again, otherwise the script will retain everything from previous builds - ->>>>>>>>> ___ - -* `-j `: build with `` parallel jobs, by default 70% of the available threads -* `+build_str `: add an identification string to the build (default date-time) -* `-verbose`: output compiler/linker commands - ->>>>>>>>> ___ - -* `+lib-32`: build normal 32-bit `libsteam_api.so` -* `+lib-64`: build normal 64-bit `libsteam_api.so` - ->>>>>>>>> ___ - -* `+client-32`: build steam client 32-bit `steamclient.so` -* `+client-64`: build steam client 64-bit `steamclient.so` - ->>>>>>>>> ___ - -* `+exp-lib-32`: build experimental 32-bit `libsteam_api.so` -* `+exp-lib-64`: build experimental 64-bit `libsteam_api.so` -* `+exp-client-32`: build experimental steam client 32-bit `steamclient.so` -* `+exp-client-64`: build experimental steam client 64-bit `steamclient.so` - ->>>>>>>>> ___ - -* `+tool-clientldr`: copy the tool `steamclient_loader` - ->>>>>>>>> ___ - -* `+tool-itf-32`: build the tool 32-bit `find_interfaces` -* `+tool-itf-64`: build the tool 64-bit `find_interfaces` -* `+tool-lobby-32`: build the tool 32-bit `lobby_connect` -* `+tool-lobby-64`: build the tool 64-bit `lobby_connect` - ->>>>>>>>> ___ - -* `+lib-netsockets-32` *(experimental)*: build a standalone networking sockets library (32-bit) -* `+lib-netsockets-64` *(experimental)*: build a standalone networking sockets library (64-bit) +This will build a release version of the emu in the folder `build/linux//release` ---