188 lines
5.1 KiB
Nix
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
|
|
];
|
|
};
|
|
})
|