feat(tools/eaglemode): add plugin builder for eagle mode
Adds a buildPlugin function which can build Eagle Mode plugins that can ultimately be linked into Eagle Mode using the existing etcDir function. Change-Id: I338171779d3547faecbfb708fbaa78cd1cfd59ac Reviewed-on: https://cl.tvl.fyi/c/depot/+/12387 Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Reviewed-by: emery <emery@dmz.rs> Reviewed-by: azahi <azat@bahawi.net>
This commit is contained in:
parent
3abc104584
commit
18578c3458
2 changed files with 69 additions and 1 deletions
|
@ -68,6 +68,52 @@ rec {
|
||||||
${pkgs.imagemagick}/bin/convert ${path} $out
|
${pkgs.imagemagick}/bin/convert ${path} $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
buildPlugin = lib.makeOverridable (
|
||||||
|
{ name
|
||||||
|
, src
|
||||||
|
, version
|
||||||
|
, eaglemode ? pkgs.eaglemode
|
||||||
|
, target ? name
|
||||||
|
, extraNativeBuildInputs ? [ ]
|
||||||
|
, extraBuildInputs ? [ ]
|
||||||
|
}:
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "eaglemode-plugin-${name}";
|
||||||
|
inherit src version;
|
||||||
|
# inherit (eaglemode.drvAttrs) dontPatchELF;
|
||||||
|
|
||||||
|
nativeBuildInputs = eaglemode.drvAttrs.nativeBuildInputs ++ extraNativeBuildInputs;
|
||||||
|
buildInputs = eaglemode.drvAttrs.buildInputs ++ extraBuildInputs ++ [ eaglemode ];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
# merge eaglemode & plugin folders
|
||||||
|
cp -r ${pkgs.srcOnly eaglemode} merged-src && chmod -R u+rw merged-src
|
||||||
|
cp -r $src/* merged-src && chmod -R u+rw merged-src
|
||||||
|
cd merged-src
|
||||||
|
|
||||||
|
export NIX_LDFLAGS="$NIX_LDFLAGS -lXxf86vm -lXext -lXinerama"
|
||||||
|
perl make.pl build projects=${target} continue=no
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib
|
||||||
|
cp -r lib/lib${target}.so $out/lib
|
||||||
|
|
||||||
|
if [ -d "$src/etc" ]; then
|
||||||
|
cp -r $src/etc/* $out
|
||||||
|
fi
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
# etcDir creates a directory layout suitable for use in the EM_USER_CONFIG_DIR
|
# etcDir creates a directory layout suitable for use in the EM_USER_CONFIG_DIR
|
||||||
# environment variable.
|
# environment variable.
|
||||||
#
|
#
|
||||||
|
@ -88,8 +134,13 @@ rec {
|
||||||
# withConfig creates an Eagle Mode wrapper that runs it with the given
|
# withConfig creates an Eagle Mode wrapper that runs it with the given
|
||||||
# configuration.
|
# configuration.
|
||||||
withConfig = { eaglemode ? pkgs.eaglemode, config }: pkgs.writeShellScriptBin "eaglemode" ''
|
withConfig = { eaglemode ? pkgs.eaglemode, config }: pkgs.writeShellScriptBin "eaglemode" ''
|
||||||
set -ue
|
|
||||||
${configWrapper}/bin/wrapper --em-config "${config}"
|
${configWrapper}/bin/wrapper --em-config "${config}"
|
||||||
|
|
||||||
|
if [ -d "${config}/lib" ]; then
|
||||||
|
export LD_LIBRARY_PATH="${config}/lib:$LD_LIBRARY_PATH"
|
||||||
|
exec ${eaglemode}/bin/eaglemode "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
exec ${eaglemode}/bin/eaglemode "$@"
|
exec ${eaglemode}/bin/eaglemode "$@"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
17
tools/eaglemode/plugins/example.nix
Normal file
17
tools/eaglemode/plugins/example.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ depot, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
em = depot.tools.eaglemode;
|
||||||
|
emSrc = with pkgs; srcOnly eaglemode;
|
||||||
|
in
|
||||||
|
em.buildPlugin {
|
||||||
|
name = "example";
|
||||||
|
version = "canon";
|
||||||
|
|
||||||
|
src = pkgs.runCommand "em-plugin-example-src" { } ''
|
||||||
|
set -ux
|
||||||
|
cp -r ${emSrc}/doc/examples/CppApiExamples/PluginExample $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
target = "PlEx";
|
||||||
|
}
|
Loading…
Reference in a new issue