diff --git a/steamshim/steamshim_child.c b/steamshim/steamshim_child.c index eb2fd3c8..7f9ce6e1 100644 --- a/steamshim/steamshim_child.c +++ b/steamshim/steamshim_child.c @@ -28,7 +28,9 @@ typedef int PipeType; #ifdef STEAMSHIM_DEBUG #define dbgpipe printf #else -static inline void dbgpipe(const char *fmt, ...) {} +static inline void dbgpipe(const char *fmt, ...) { + (void)fmt; +} #endif static int writePipe(PipeType fd, const void *buf, const unsigned int _len); diff --git a/steamshim_parent/Makefile b/steamshim_parent/Makefile index ed7a4763..0b0c3551 100644 --- a/steamshim_parent/Makefile +++ b/steamshim_parent/Makefile @@ -20,7 +20,7 @@ FLAGS += -lsteam_api ifeq ($(DEBUG),1) FLAGS += -DSTEAMSHIM_DEBUG -else +else ifeq ($(HOST),w32) FLAGS += -mwindows endif diff --git a/steamshim_parent/README.md b/steamshim_parent/README.md new file mode 100644 index 00000000..5bda2c52 --- /dev/null +++ b/steamshim_parent/README.md @@ -0,0 +1,22 @@ +# Steamshim parent +OneShot uses [steamshim](https://hg.icculus.org/icculus/steamshim/) for GNU GPL v3 and Steam interoperability. There are five components that OneShot uses to communicate with Steam, in order: +1. Steamworks SDK (that can be obtained from [here](https://partner.steamgames.com)) that is used for directly communicating with Steam. It is closed-source, and because of license compatibility issues steamshim must be used as a layer between OneShot and Steamworks SDK to communicate with Steam. +2. steamshim parent (whose source is within this folder) is a separate application that will start up the main OneShot application and can communicate with the Steamworks SDK. +3. steamshim child (whose source is inside the `steamshim` folder) is the client used to communicate with the steamshim parent from the OneShot application through pipes. +4. Steam controller inside OneShot application (`src/steam.cpp`) controls the communication between OneShot and steamshim components. +5. Steam binding (`binding-mri/steam-binding.cpp`) creates Ruby objects so Steam functionalities (like achievements) can be controlled from the game's scripts/events and passes on the handling to the Steam controller + +## Building +Download Steamworks SDK from [here](https://partner.steamgames.com) and run +```console +$ export LD_LIBRARY_PATH=/path/to/steamworks/sdk/redistributable_bin/platform +$ STEAMWORKS=/path/to/steamworks/sdk HOST=platform make +``` +inside this directory, where `platform` can be `win64`, `osx32`, `linux64` or `linux32` + +If you need debug output from the steamshim parent, compile with `DEBUG=1` in command-line arguments for `make`. + +## Running +After building the steamshim parent, place it in the same directory as the OneShot application. Note that the OneShot application **must be named "oneshot"**. Changing the case ("OneShot") will make the game not launch. + +To run the game with the Steam wrapper, run the steamshim parent. diff --git a/steamshim_parent/steamshim_parent.cpp b/steamshim_parent/steamshim_parent.cpp index d6550bb3..b4baee33 100644 --- a/steamshim_parent/steamshim_parent.cpp +++ b/steamshim_parent/steamshim_parent.cpp @@ -30,7 +30,9 @@ typedef int PipeType; #ifdef STEAMSHIM_DEBUG #define dbgpipe printf #else -static inline void dbgpipe(const char *fmt, ...) {} +static inline void dbgpipe(const char *fmt, ...) { + (void)fmt; +} #endif /* platform-specific mainline calls this. */ @@ -245,6 +247,7 @@ static bool launchChild(ProcessType *pid) // we're the child. GArgv[0] = strdup("./" GAME_LAUNCH_NAME); + dbgpipe("Starting %s\n", GArgv[0]); execvp(GArgv[0], GArgv); // still here? It failed! Terminate, closing child's ends of the pipes. _exit(1);