diff options
author | Vincent Ambo <tazjin@tvl.su> | 2024-08-28T14·59+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-09-02T12·58+0000 |
commit | 18578c3458187bad901ce559131922e856162fb5 (patch) | |
tree | 905118fd92ddc4020ce0e95274694d26c200523e | |
parent | 3abc104584b1fbc92199a7d54caddbe8065b637e (diff) |
feat(tools/eaglemode): add plugin builder for eagle mode r/8637
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>
-rw-r--r-- | tools/eaglemode/default.nix | 53 | ||||
-rw-r--r-- | tools/eaglemode/plugins/example.nix | 17 |
2 files changed, 69 insertions, 1 deletions
diff --git a/tools/eaglemode/default.nix b/tools/eaglemode/default.nix index 0b0c0caa8ba8..30983f5d5018 100644 --- a/tools/eaglemode/default.nix +++ b/tools/eaglemode/default.nix @@ -68,6 +68,52 @@ rec { ${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 # environment variable. # @@ -88,8 +134,13 @@ rec { # withConfig creates an Eagle Mode wrapper that runs it with the given # configuration. withConfig = { eaglemode ? pkgs.eaglemode, config }: pkgs.writeShellScriptBin "eaglemode" '' - set -ue ${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 "$@" ''; } diff --git a/tools/eaglemode/plugins/example.nix b/tools/eaglemode/plugins/example.nix new file mode 100644 index 000000000000..b361971cc57e --- /dev/null +++ b/tools/eaglemode/plugins/example.nix @@ -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"; +} |