-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
126 lines (115 loc) · 3.99 KB
/
flake.nix
File metadata and controls
126 lines (115 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{
inputs = {
flake-utils = { url = "github:numtide/flake-utils"; };
torch = { url = "path:libraries/torch"; };
httplib = { url = "path:libraries/httplib"; };
spdlog = { url = "path:libraries/spdlog"; };
# Nix Ros Overlay
nix-ros-overlay = { url = "github:lopsided98/nix-ros-overlay/master"; };
nixpkgs = { follows = "nix-ros-overlay/nixpkgs"; };
};
outputs =
{ nixpkgs, flake-utils, torch, httplib, spdlog, nix-ros-overlay, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = (import nixpkgs {
inherit system;
overlays = [ nix-ros-overlay.overlays.default ];
});
in {
packages.default = with pkgs.clangStdenv;
mkDerivation {
pname = "teleop-control";
version = "1.0.0";
src = ./.;
cmakeFlags = [
"-DGTK2_GLIBCONFIG_INCLUDE_DIR=${pkgs.glib.out}/lib/glib-2.0/include"
"-DGTK2_GDKCONFIG_INCLUDE_DIR=${pkgs.gtk2.out}/lib/gtk-2.0/include"
"-DGTK2_GDKCONFIG_INCLUDE_DIR=${pkgs.gtk2.out}/lib/gtk-2.0/include"
"-DCMAKE_MODULE_PATH=$CMAKE_MODULE_PATH;${pkgs.opencv.out}/lib/cmake/opencv4"
"-D$AMENT_PREFIX_PATH=$AMENT_PREFIX_PATH"
];
nativeBuildInputs = [
pkgs.cmake
pkgs.makeWrapper
pkgs.glib
pkgs.gtk2
(pkgs.opencv.override {
enableJPEG = true;
enableFfmpeg = true;
})
# x86_64-linux only
torch.packages.x86_64-linux.libtorch
httplib.packages.x86_64-linux.cpp-httplib
# spdlog.packages.x86_64-linux.default
# ROS Packages
pkgs.colcon
# ... other non-ROS packages
(with pkgs.rosPackages.humble;
buildEnv {
paths = [
image-transport
ros-core
sensor-msgs
cv-bridge
ament-cmake
ament-cmake-core
ament-cmake-ros
ament-cmake-auto
# ... other ROS packages
];
})
];
buildInputs = [ pkgs.gtk2 ];
buildPhase = ''
mkdir -p build
cmake -S $src -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build build
'';
installPhase = ''
mkdir -p $out/bin
cp build/teleop-control $out/bin
'';
};
devShells.default = with pkgs;
mkShell.override { stdenv = pkgs.clangStdenv; } {
TORCH_LIBRARIES = "${torch.packages.x86_64-linux.libtorch.out}/lib";
CMAKE_MODULE_PATH = "${pkgs.opencv.out}/lib/cmake/opencv4";
packages = [
# Generic DevTools
# clang-tools must be first before clang
pkgs.clang-tools
pkgs.cmake
pkgs.glib
pkgs.gtk2
pkgs.clang
pkgs.nixfmt
(pkgs.opencv.override {
enableJPEG = true;
enableFfmpeg = true;
})
# x86_64-linux only
torch.packages.x86_64-linux.libtorch
httplib.packages.x86_64-linux.cpp-httplib
# spdlog.packages.x86_64-linux.default
# ROS Packages
pkgs.colcon
(with pkgs.rosPackages.humble;
buildEnv {
paths = [
ros-core
image-transport
sensor-msgs
cv-bridge
ament-cmake
ament-cmake-core
ament-cmake-ros
ament-cmake-auto
foxglove-bridge
# ... other ROS packages
];
})
];
};
});
}