about summary refs log tree commit diff
path: root/pkgs/games/build-support
Commit message (Collapse)AuthorAgeFilesLines
* auto-patchelf: Fix adding env hookaszlig2018-02-011-1/+1
| | | | | | | | | | | | | | The semantics of adding env hooks has changed in NixOS/nixpkgs@7f3ca3e21a22fd3101b40cadb86899542dec2e35 so that it's now broken up into several hook variables (envBuildBuildHook, envBuildHostHook, envBuildTargetHook, envHostHostHook, envHostTargetHook and envTargetTargetHook). Fortunately commit NixOS/nixpkgs@a036473a0a0c6100fce316e1444fc33ec6674b adds a helper function (addEnvHooks) to deal this without referencing those hook variables directly and rather just providing an offset. Signed-off-by: aszlig <aszlig@nix.build>
* build-sandbox: Move to top-level build-supportaszlig2017-11-3011-1008/+2
| | | | | | | This is not only useful for packaging games, so let's make it available from the vuizvui scope, so we can use it from other packages as well. Signed-off-by: aszlig <aszlig@nix.build>
* pkgs/build-unity: Make saveDir optionalaszlig2017-11-211-3/+5
| | | | | | | | If the saveDir isn't set the game only gets access to all the saveDirs from other Unity games, so missing that attribute shouldn't be a deal breaker. Signed-off-by: aszlig <aszlig@nix.build>
* pkgs/build-unity: Add a saveDir attributeaszlig2017-11-211-2/+2
| | | | | | | | This is used for sandboxing and instead of letting all Unity games access the data of every other Unity game we now restrict it to its own save directory only. Signed-off-by: aszlig <aszlig@nix.build>
* pkgs/sandbox: Handle non-existing pathsaszlig2017-11-215-32/+59
| | | | | | | | | | | | | | | | | | We now distinguish between paths that have to exist and paths that are fine to skip during bind mounting. So far we had hard failures whenever a path that needed to be mounted didn't exist, for example something like $XDG_CONFIG_HOME/unity3d failed whenever the directory didn't exist. Apart from that we now have a more clean attribute structure for sandbox parameters, which are now: * paths.required: Created prior to bind-mounting * paths.wanted: Skipped if it doesn't exist * paths.runtimeVars: Extracted from PATH-like environment variables Signed-off-by: aszlig <aszlig@nix.build>
* pkgs/sandbox: Mount closure of /etc/staticaszlig2017-10-032-5/+45
| | | | | | | | We already mount /etc, but it isn't quite enough, because it contains files symlinked to /etc/static, which in turn is a store path so we need to mount the closure of that path as well. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Implement a path cacheaszlig2017-10-034-3/+53
| | | | | | | | First of all this is to bring down the amount of syscalls we're doing but it's also useful to avoid errors when we try to mount a path over an already mounted path. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Enable sandbox by defaultaszlig2017-10-033-6/+13
| | | | | | | | | This is using buildSandbox with the addition of adding LD_LIBRARY_PATH to the default runtimePathVars. I've also renamed the attribute to be called runtimePathVars instead of runtimePathVariables, simply because it's shorter. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Mount paths from path-like variablesaszlig2017-10-038-29/+211
| | | | | | | | | | | | | | | | | | | | | On NixOS the LD_LIBRARY_PATH looks similar to this (depending on the configuration): /run/opengl-driver/lib:/run/opengl-driver-32/lib However, we don't have these paths available within the sandbox, because so far we've only used exportReferencesGraph to gather the runtime dependencies after the build has succeeded. This obviously doesn't take into account runtime dependencies from the system itself. We are now taking care of this by using the Nix store library to query the requisities of all the paths that are contained inside path-like variables (multiple paths delimited by colons) and mount them during sandbox setup. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Factor out setup routineaszlig2017-10-036-573/+609
| | | | | | | | | | This leaves sandbox.c with only the main() function and nothing else, so that whenever we have a lot of binaries to generate, the compilation time should be much lower now. The change doesn't change anything in functionality. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Prepare for querying runtime pathsaszlig2017-10-034-18/+49
| | | | | | | | | | We're now using a makefile for building the sandbox and use pkg-config to pass in the flags we need for compiling against lib(nix)store. Right now the sandbox itself doesn't do anything different because we're not actually using the (incomplete) code for querying the store. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Include basic runtime pathsaszlig2017-10-032-18/+112
| | | | | | | | | | | These paths are things such as /etc and /run but also the .Xauthority file, which contains the cookie to connect to the X server. What is still missing is access to the DRI libraries, which is a bit trickier, because we need to add those store paths at runtime and we need to also mount all of the dependencies. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/sandbox: Use own store path as root directoryaszlig2017-10-032-10/+9
| | | | | | | | | | | | | | | | | | | I've already pointed out in the previous commit that using /tmp for the root directory isn't a very good idea, mainly because we can't access sockets from /tmp (eg. the X server sockets). So what we're now doing is using the store path that contains the sandbox wrappers, because that very path won't be mounted into the sandbox anyway, so we get a free directory just as an entry point. This has the main advantage that we don't need to create any temporary directories which we later need to clean up nor do we need to assume that some paths might exist in the system. For example if we'd use /usr we still have /usr/bin/env on NixOS, but if that's going to go away in the future or we are on a distro that doesn't have it at all, the sandbox setup will fail. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Introduce buildSandboxaszlig2017-10-035-118/+63
| | | | | | | | | | | | | | | | So far creating the sandbox has been a setup hook, however it's a bit ugly how we gathered the needed paths for the chroot file system by recursively searching for store paths. While I'd like to have the sandbox being built within the main derivation, it really isn't very practical when the build takes longer than 10 minutes. With this implementation however the sandbox builds really fast and we can also modify the sandbox without needing to rebuild a particular game. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Add preliminary sandbox hookaszlig2017-10-033-3/+617
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is basically to make sure various games can't write to whatever they want in the file system, so it's not a complete sandboxing solution. Currently there's a drawback in that we can't easily determine the runtime dependencies while building a particular game, so we need to recursively dig through all referenced store paths to look them up. A better solution for this would be to gather the build time reference graph prior to building so that we can limit searching for these references within only the actual build outputs instead of churning through all inputs. In addition to that, we currently mount the namespaced root file system on top of /tmp, which makes the real /tmp unavailable to us. While in theory this shouldn't be a problem, it actually turns out it is indeed a problem if the application wants to connect to the X server socket, which is at something like /tmp/.X11-unix/X0 for display :0. Apart from these drawbacks we have a working solution for simple applications (not games, because they usually require X), which now get its own chroot with only the paths accessible that are strictly necessary. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Add ALSA library to RT depsaszlig2017-09-131-2/+8
| | | | | | | | | Most older games don't cope very well with PulseAudio, so let's add ALSA so that a fallback is available. This is also very useful if withPulseAudio is set to false, because this would actually mean "no audio at all". Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Add unzip to nativeBuildInputsaszlig2017-09-131-2/+2
| | | | | | | | | | | A lot of games come as a Zip archive, so let's add it to nativeBuildInputs by default so we no longer need to deal with that for every single game. This also removes that line from Invisigun Heroes, so the package now is pretty much minimal and very clean :-) Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Try to evade tarbombsaszlig2017-09-131-1/+21
| | | | | | | | | | A lot of games (especially Unity games) come as a tarbomb, so in order to avoid having those files all over the place we now create an additional directory before unpack and set the sourceRoot to that if it's a tarbomb and if that's not the case set it to the single file within that directory. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-unity: Switch to using buildGameaszlig2017-09-131-23/+19
| | | | | | | | | | | Now we no longer need to invoke patchelf by ourselves and all of the dependencies are patched automatically. I've added gtk2-x11, gdk_pixbuf and glib to buildUnity as well, because after inspecting other Unity games they seem to require the same libraries as well. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-game: Add runtimeDependencies attributeaszlig2017-09-133-11/+23
| | | | | | | This allows us to add libraries to the RPATH despite being required by the respective game. By default there is only PulseAudio at the moment. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/games: Add a new buildGame functionaszlig2017-09-133-0/+178
| | | | | | | | | | | | | | | The main functionality for this function is to gather missing dependencies in ELF executables and shared libraries and using patchelf to set the right RPATH. All of the dependencies are searched based on what we have in one of the buildInputs variables, so all we need to do is list them in there. One thing that's still left to solve is adding libraries to the RPATH which are only required at runtime. An example for this would be the pulseaudio library. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-unity: Create desktop entryaszlig2017-09-101-2/+19
| | | | | | | | | | | | This automatically creates a desktop entry based on the given fullName and the standard path for the icon (Resources/UnityPlayer.png). Well, at least I hope that the icon path is standard, but we'll see once we use buildUnity for more games. Tested using Plasma 5 for Invisigun Heroes. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* pkgs/build-unity: Wrap binary instead of linkingaszlig2017-09-101-2/+4
| | | | | | | | The executable of Unity games at the moment is unable to find its own path if it can't do a stat() on argv[0]. So wrapping the program helps here for now. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* games/invisigun-heroes: Factor out into buildUnityaszlig2017-09-102-0/+54
There are a lot of Unity games out there, so it's a good idea to have a generic builder just for Unity, which we then can apply to a lot more games. Right now this is a pretty basic abstraction which I've only tested with Invisigun Heroes. Signed-off-by: aszlig <aszlig@redmoonstudios.org>