Joshua Perry 83bc8f05d9 edgetx: 2.11.0-rc3 -> 2.11.2
adds pl18u and st16 simulators
2025-07-26 15:28:29 -06:00

188 lines
5.1 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
python3,
cmake,
ninja,
libsForQt5,
SDL2,
fox_1_6,
replaceVars,
llvmPackages,
dfu-util,
gtest,
miniz,
yaml-cpp,
udevCheckHook,
# List of targets to build simulators for
targetsToBuild ? import ./targets.nix,
}:
let
# Keep in sync with `cmake/FetchMaxLibQt.cmake`.
maxlibqt = fetchFromGitHub {
owner = "edgetx";
repo = "maxLibQt";
rev = "ac1988ffd005cd15a8449b92150ce6c08574a4f1";
hash = "sha256-u8e4qseU0+BJyZkV0JE4sUiXaFeIYvadkMTGXXiE2Kg=";
};
pythonEnv = python3.withPackages (
pyPkgs: with pyPkgs; [
pillow
lz4
jinja2
libclang
]
);
in
stdenv.mkDerivation (finalAttrs: {
pname = "edgetx";
version = "2.11.2";
src = fetchFromGitHub {
owner = "EdgeTX";
repo = "edgetx";
tag = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-F3T1lX0FSSUIQxSlqLQHj7JrfF+20Ndv63zDA0sRzFQ=";
};
nativeBuildInputs = [
cmake
ninja
pythonEnv
libsForQt5.qttools
libsForQt5.wrapQtAppsHook
udevCheckHook
];
buildInputs = [
libsForQt5.qtbase
libsForQt5.qtmultimedia
libsForQt5.qtserialport
SDL2
fox_1_6
];
patches = [
(replaceVars ./0001-libclang-paths.patch (
let
llvmMajor = lib.versions.major llvmPackages.llvm.version;
in
{
resourceDir = "${llvmPackages.clang.cc.lib}/lib/clang/${llvmMajor}";
libclang = "${lib.getLib llvmPackages.libclang}/lib/libclang.so";
libc-cflags = "${llvmPackages.clang}/nix-support/libc-cflags";
libcxx-cflags = "${llvmPackages.clang}/nix-support/libcxx-cxxflags";
}
))
];
postPatch = ''
sed -i companion/src/burnconfigdialog.cpp \
-e 's|/usr/.*bin/dfu-util|${dfu-util}/bin/dfu-util|'
patchShebangs companion/util radio/util
'';
doInstallCheck = true;
cmakeFlags = [
# Unvendoring these libraries is infeasible. At least lets reuse the same sources.
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_GOOGLETEST" "${gtest.src}")
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_MINIZ" "${miniz.src}")
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_YAML-CPP" "${yaml-cpp.src}")
# Custom library https://github.com/edgetx/maxLibQt.
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_MAXLIBQT" "${maxlibqt}")
(lib.cmakeFeature "DFU_UTIL_ROOT_DIR" "${lib.getBin dfu-util}/bin")
# Superbuild machinery is only getting in the way.
(lib.cmakeBool "EdgeTX_SUPERBUILD" false)
# COMMON_OPTIONS from tools/build-companion.sh.
(lib.cmakeBool "GVARS" true)
(lib.cmakeBool "HELI" true)
(lib.cmakeBool "LUA" true)
# Build companion and not the firmware.
(lib.cmakeBool "NATIVE_BUILD" true)
# file RPATH_CHANGE could not write new RPATH.
(lib.cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
];
env = {
EDGETX_VERSION_SUFFIX = "nixpkgs";
};
dontUseCmakeConfigure = true;
# We invoke cmakeConfigurePhase multiple times, but only need this once.
dontFixCmake = true;
inherit targetsToBuild;
__structuredAttrs = true; # To pass targetsToBuild as an array.
configurePhase = ''
runHook preConfigure
prependToVar cmakeFlags "-GNinja"
fixCmakeFiles .
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
cmakeCommonFlags="$''\{cmakeFlags[@]}"
# This is the most sensible way to convert target name -> cmake options
# aside from manually extracting bash variables from upstream's CI scripts
# and converting that to nix expressions. Let's hope upstream doesn't break
# this file too often.
source $src/tools/build-common.sh
# Yes, this is really how upstream expects packaging to look like ¯\_()_/¯.
# https://github.com/EdgeTX/edgetx/wiki/Build-Instructions-under-Ubuntu-20.04#building-companion-simulator-and-radio-simulator-libraries
for plugin in "$''\{targetsToBuild[@]''\}"
do
# Variable modified by `get_target_build_options` from build-common.sh.
local BUILD_OPTIONS=""
get_target_build_options "$plugin"
# With each invocation of `cmakeConfigurePhase` `cmakeFlags` gets
# prepended to, so it has to be reset.
cmakeFlags=()
appendToVar cmakeFlags $cmakeCommonFlags $BUILD_OPTIONS
pushd .
cmakeConfigurePhase
ninjaFlags=("libsimulator")
ninjaBuildPhase
rm CMakeCache.txt
popd
done
cmakeConfigurePhase
ninjaFlags=()
ninjaBuildPhase
runHook postBuild
'';
meta = {
description = "EdgeTX Companion transmitter support software";
longDescription = ''
EdgeTX Companion is used for many different tasks like loading EdgeTX
firmware to the radio, backing up model settings, editing settings and
running radio simulators.
'';
mainProgram = "companion" + lib.concatStrings (lib.take 2 (lib.splitVersion finalAttrs.version));
homepage = "https://edgetx.org/";
license = lib.licenses.gpl2Only;
platforms = [
"i686-linux"
"x86_64-linux"
"aarch64-linux"
];
maintainers = with lib.maintainers; [
elitak
lopsided98
wucke13
xokdvium
];
};
})