mirror of
https://github.com/HomeworldSDL/HomeworldSDL.git
synced 2025-10-29 11:36:12 +00:00
feat: ci: Deploy to Gitlab Pages 🚀
This commit is contained in:
parent
38dda1fb92
commit
4591a17a1b
27
.gitlab-ci.yml
Normal file
27
.gitlab-ci.yml
Normal file
@ -0,0 +1,27 @@
|
||||
pages:
|
||||
rules:
|
||||
# Run on all tags (but only on tags)
|
||||
- if: "$CI_COMMIT_TAG"
|
||||
when: always
|
||||
|
||||
image: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/emscripten-build-env
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- Linux/build.emscripten
|
||||
|
||||
script:
|
||||
- meson setup --reconfigure --cross-file wasm/wasm32-emscripten.meson-cross-build-definition.txt -Dbuildtype=release -Db_sanitize=none -Dmovies=false Linux/build.emscripten .
|
||||
- cd Linux/build.emscripten
|
||||
- export EM_CACHE=$(pwd)/cache
|
||||
# The docker image has no /tmp dir
|
||||
# https://github.com/llvm/llvm-project/blob/b530eeea5e7697d58af2adac66c8b86c79e649bb/llvm/lib/Support/Unix/Path.inc#L1427
|
||||
- export TMP=$(pwd)
|
||||
- meson compile
|
||||
- mkdir ../../public
|
||||
- cp -r *.wasm* *.js *.html *.data ../../public
|
||||
|
||||
publish: public
|
||||
artifacts:
|
||||
paths:
|
||||
- public
|
||||
@ -132,12 +132,10 @@ You need to have emscripten installed and enable your installed emsdk tools in y
|
||||
source emsdk_env.sh
|
||||
```
|
||||
|
||||
Then copy the necessary Homeworld demo assets (HomeworldDL.big, DL_demo.vce, DL_Music.wxd and ideally the Update.big from the Homeworld 1.05 Update) to the wasm/demo_assets/ folder.
|
||||
|
||||
Now you can setup meson for cross-compiling to wasm32 using emscripten:
|
||||
|
||||
```sh
|
||||
meson setup --cross-file ../wasm32-emscripten.meson-cross-build-definition.txt -Db_sanitize=none -Dmovies=false build.emscripten ..
|
||||
meson setup --cross-file ../wasm/wasm32-emscripten.meson-cross-build-definition.txt -Db_sanitize=none -Dmovies=false build.emscripten ..
|
||||
```
|
||||
|
||||
Now switch to the created build.emscripten folder and compile:
|
||||
@ -152,4 +150,10 @@ To automatically open the compiled wasm32 binaries in the browser using the prov
|
||||
emrun .
|
||||
```
|
||||
|
||||
### Building the Docker image used in the CI
|
||||
|
||||
```sh
|
||||
docker load < $(nix build --no-link --print-out-paths .#ci-docker-image)
|
||||
```
|
||||
|
||||
|
||||
|
||||
@ -64,6 +64,32 @@
|
||||
${nixGL.packages.x86_64-linux.default}/bin/nixGL ${self.packages.x86_64-linux.default}/bin/homeworld
|
||||
'';
|
||||
|
||||
ci-docker-image = with nixpkgs.legacyPackages.x86_64-linux;
|
||||
dockerTools.buildLayeredImage {
|
||||
name = "registry.gitlab.com/gardens-of-kadesh/gardens-of-kadesh/emscripten-build-env";
|
||||
tag = "latest";
|
||||
|
||||
contents = [
|
||||
busybox
|
||||
meson
|
||||
pkg-config
|
||||
ninja
|
||||
emscripten
|
||||
gcc
|
||||
yacc
|
||||
flex
|
||||
# Root certificates for HTTPS, so emscripten can download SDL2
|
||||
dockerTools.caCertificates
|
||||
];
|
||||
|
||||
config = {
|
||||
Env = [
|
||||
"PKG_CONFIG_PATH=${SDL2.dev}/lib/pkgconfig"
|
||||
];
|
||||
Cmd = [ "/bin/sh" ];
|
||||
};
|
||||
};
|
||||
|
||||
apps.x86_64-linux.default = {
|
||||
type = "app";
|
||||
program = "${self.packages.x86_64-linux.default}/bin/homeworld";
|
||||
|
||||
35
README.md
35
README.md
@ -1,21 +1,20 @@
|
||||
# Tenhauser Gate
|
||||
# Gardens of Kadesh
|
||||
|
||||
📣 **Play in your browser!** Try our experimental wasm port here: [Gardens of Kadesh]
|
||||
[📣 **Play the demo in your browser!**][wasm-demo] (Will download ~70MiB of data. You need a good internet connection.)
|
||||
|
||||
Source port of Homeworld 1 to modern systems (Linux, Windows, macOS).
|
||||
Source port of Homeworld 1 to modern systems (Linux, Windows, macOS, and web browsers).
|
||||
|
||||
[Homeworld] is a 3D space real-time strategy game released in 1999.
|
||||
It's source code was [released in 2003] by [Relic Entertainment], allowing a small but dedicated community of fans to port it to [SDL], enabling native versions for Linux, MacOS, and more recently, web browsers.
|
||||
|
||||
💬 Join our [matrix space]
|
||||
|
||||
[wasm-demo]: https://gardens-of-kadesh.gitlab.io/gardens-of-kadesh/
|
||||
[matrix space]: https://matrix.to/#/#homeworld-sdl:matrix.org
|
||||
[Homeworld SDL]: https://github.com/HomeworldSDL/HomeworldSDL
|
||||
[SDL]: https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer
|
||||
[Homeworld]: https://en.wikipedia.org/wiki/Homeworld
|
||||
[released in 2003]: http://www.insidemacgames.com/news/story.php?ArticleID=8516
|
||||
[Relic Entertainment]: https://www.relic.com/
|
||||
[Gardens of Kadesh]: https://gardensofkadesh.github.io/
|
||||
|
||||
|
||||
## Requirements
|
||||
@ -80,27 +79,15 @@ Open the game installation folder (usually `~/.wine/drive_c/Sierra/Homeworld`).
|
||||
|
||||
##### Steam
|
||||
|
||||
After installing the game, you should find the [required assets](#asset-checklist) in `~/.local/share/Steam/steamapps/common/Homeworld/Homeworld1Classic/Data`. Put them to `$ASSETS_FOLDER`.
|
||||
After installing [the game][store_page], you should find the [required assets](#asset-checklist) in `~/.local/share/Steam/steamapps/common/Homeworld/Homeworld1Classic/Data`. Put them to `$ASSETS_FOLDER`.
|
||||
|
||||
[store_page]: https://store.steampowered.com/app/244160/Homeworld_Remastered_Collection/
|
||||
|
||||
## Compiling from source
|
||||
|
||||
### Linux
|
||||
|
||||
If you have [Nix] installed, just run:
|
||||
|
||||
```sh
|
||||
HW_Data=$ASSETS_FOLDER nix run --impure 'git+https://gitlab.com/homeworldsdl/TenhauserGate.git?dir=Linux#i-am-not-on-nixos'
|
||||
```
|
||||
|
||||
Or if you are on NixOS:
|
||||
|
||||
```sh
|
||||
HW_Data=$ASSETS_FOLDER nix run 'git+https://gitlab.com/homeworldsdl/TenhauserGate.git?dir=Linux'
|
||||
```
|
||||
|
||||
Nix will download everything it needs, build the HomeworldSDL source code, then run the resulting binary.
|
||||
|
||||
If you don't have Nix installed, please refer to [`Linux/BUILD.md`](Linux/BUILD.md)
|
||||
Please refer to [`Linux/BUILD.md`](Linux/BUILD.md)
|
||||
|
||||
#### Game is slow/crashes
|
||||
|
||||
@ -123,8 +110,6 @@ Please refer to [`Mac/BUILD.md`](Mac/BUILD.md).
|
||||
|
||||
To setup either the data from the original or remaster. Please place the data assets into 'Library/Application Support/Homeworld' or, if you are using Raider Retreat, place them in the same destination folder except to use 'Raider Retreat' instead of 'Homeworld'.
|
||||
|
||||
[Nix]: https://nixos.org/nix/
|
||||
|
||||
## Running the game for the first time
|
||||
|
||||
The first time you run the game, you will have to point it to [the directory containing the required assets](#setting-up-the-assets-folder). For example, if you have [compiled the game from source](#compiling-from-source):
|
||||
@ -160,7 +145,7 @@ Once the game has launched, you need to:
|
||||
|
||||
If you want to know more about this project (and see some screenshots!), please head over to the [wiki].
|
||||
|
||||
[wiki]: https://gitlab.com/ThibaultLemaire/HomeworldSDL/wikis/home
|
||||
[wiki]: https://gitlab.com/gardens-of-kadesh/gardens-of-kadesh/wikis/home
|
||||
|
||||
[releases]: https://gitlab.com/ThibaultLemaire/HomeworldSDL/-/releases
|
||||
[releases]: https://gitlab.com/gardens-of-kadesh/gardens-of-kadesh/-/releases
|
||||
[the official 1.05 patch]: https://www.homeworldaccess.net/infusions/downloads/downloads.php?file_id=35
|
||||
|
||||
25
meson.build
25
meson.build
@ -9,11 +9,15 @@ endif
|
||||
|
||||
dep_sdl = dependency('sdl2')
|
||||
|
||||
base_deps = [
|
||||
dependency('gl'),
|
||||
dep_sdl,
|
||||
meson.get_compiler('c').find_library('m', required: false),
|
||||
]
|
||||
base_deps = [ ]
|
||||
|
||||
if host_machine.system() != 'emscripten'
|
||||
base_deps += [
|
||||
dependency('gl'),
|
||||
dep_sdl,
|
||||
meson.get_compiler('c').find_library('m', required: false),
|
||||
]
|
||||
endif
|
||||
|
||||
c_base_args = [
|
||||
'-DHAVE_CONFIG_H',
|
||||
@ -113,7 +117,7 @@ elif host_machine.system() == 'darwin'
|
||||
elif host_machine.system() == 'windows'
|
||||
c_base_args += ['-D_LINUX_FIX_ME', '-D_GNU_SOURCE', '-D_WIN32', '-DWIN32', '-DWINDOWS']
|
||||
elif host_machine.system() == 'emscripten'
|
||||
base_deps += [dependency('x11')]
|
||||
base_deps += [subproject('demo-assets').get_variable('demo_assets_dep')]
|
||||
c_base_args += ['-D_LINUX_FIX_ME', '-D_GNU_SOURCE']
|
||||
endif
|
||||
|
||||
@ -155,15 +159,12 @@ if host_machine.system() == 'emscripten'
|
||||
'-s', 'ALLOW_MEMORY_GROWTH=1',
|
||||
'--use-preload-plugins',
|
||||
|
||||
'--preload-file', '../../wasm/demo_assets@/',
|
||||
'--preload-file', '../../subprojects/demo-assets-1.05/assets@/',
|
||||
'-o', 'homeworld.html',
|
||||
]
|
||||
|
||||
|
||||
dep_sdl = []
|
||||
|
||||
add_global_arguments(emscripten_compile_args, language: ['c', 'cpp'])
|
||||
add_global_link_arguments(emscripten_link_args, language: ['c', 'cpp'])
|
||||
add_project_arguments(emscripten_compile_args, language: ['c', 'cpp'])
|
||||
add_project_link_arguments(emscripten_link_args, language: ['c', 'cpp'])
|
||||
endif
|
||||
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ src_sdl += files('fqcodec.c',
|
||||
lib_sdl = static_library('hw_sdl',
|
||||
src_sdl,
|
||||
c_args: c_args,
|
||||
dependencies: [dep_sdl],
|
||||
dependencies: base_deps,
|
||||
include_directories: ['../Game', '../Ships', '../ThirdParty/CRC', '../ThirdParty/stb'])
|
||||
|
||||
inc_src_sdl = include_directories('.')
|
||||
|
||||
3
subprojects/.gitignore
vendored
Normal file
3
subprojects/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!*.wrap
|
||||
5
subprojects/demo-assets.wrap
Normal file
5
subprojects/demo-assets.wrap
Normal file
@ -0,0 +1,5 @@
|
||||
[wrap-file]
|
||||
directory = demo-assets-1.05
|
||||
source_url = https://gitlab.com/gardens-of-kadesh/demo-assets/-/archive/1.05/demo-assets-1.05.tar.gz
|
||||
source_filename = demo-assets-1.05.tar.gz
|
||||
source_hash = aa4df87ab95688970d91eb37b6a7ce8b69c5bf6f7ee963f75c098a4c1fb1f03d
|
||||
Loading…
x
Reference in New Issue
Block a user