|
6 | 6 |
|
7 | 7 | zephyr-nix.url = github:adisbladis/zephyr-nix; |
8 | 8 | zephyr-nix.inputs.nixpkgs.follows = "nixpkgs"; |
9 | | - |
10 | | - ec.url = github:FrameworkComputer/EmbeddedController?ref=fwk-lotus-azalea-19573; |
11 | | - ec.flake = false; |
12 | | - |
13 | | - u-boot.url = git+https://chromium.googlesource.com/chromiumos/third_party/u-boot?ref=upstream/next; |
14 | | - u-boot.flake = false; |
15 | 9 | }; |
16 | 10 |
|
17 | 11 | outputs = { |
18 | 12 | self, |
19 | 13 | nixpkgs, |
20 | 14 | flake-utils, |
21 | 15 | zephyr-nix, |
22 | | - ec, |
23 | | - u-boot, |
24 | 16 | }: |
25 | 17 | flake-utils.lib.eachDefaultSystem (system: let |
26 | 18 | pkgs = import nixpkgs {inherit system;}; |
|
34 | 26 | ${pkgs.toml-cli}/bin/toml set pyproject.toml project.dynamic license | ${pkgs.moreutils}/bin/sponge pyproject.toml |
35 | 27 | sed -e 's/dynamic = "license"/dynamic = ["license"]/' -i pyproject.toml |
36 | 28 | ''; |
| 29 | + |
| 30 | + pyelftools = pkgs.fetchgit { |
| 31 | + name = "pyelftools"; |
| 32 | + url = "https://chromium.googlesource.com/chromiumos/third_party/pyelftools"; |
| 33 | + rev = "refs/heads/chromeos-0.22"; |
| 34 | + hash = "sha256-MArasbUre77vVGThaPxNotukIX+lGiNC4mhzZT52vl8="; |
| 35 | + }; |
| 36 | + |
| 37 | + crosutils = pkgs.fetchgit { |
| 38 | + name = "crosutils"; |
| 39 | + url = "https://chromium.googlesource.com/chromiumos/platform/crosutils"; |
| 40 | + rev = "refs/heads/main"; |
| 41 | + hash = "sha256-ahnXEetj99TLEocogZcSSUdj/r0QXiOw1OIVRrMt0cI="; |
| 42 | + }; |
| 43 | + |
| 44 | + ec = pkgs.fetchFromGitHub { |
| 45 | + name = "ec"; |
| 46 | + owner = "FrameworkComputer"; |
| 47 | + repo = "EmbeddedController"; |
| 48 | + rev = "fwk-lotus-azalea-19573"; |
| 49 | + hash = "sha256-37iKyZdOy8K/a8fsvaTjiC9cTkcP0JbvsfB7t1XAIco="; |
| 50 | + }; |
| 51 | + |
| 52 | + cmsis = pkgs.fetchgit { |
| 53 | + name = "cmsis"; |
| 54 | + url = "https://chromium.googlesource.com/chromiumos/third_party/zephyr/cmsis"; |
| 55 | + rev = "4aa3ff8e4f8a21e31cd9831b943acb7a7cd56ac8"; |
| 56 | + hash = "sha256-IKmdIn/K1eHBVxA0sNvzr1i5LpkgJQMAMsks13lmDNw="; |
| 57 | + }; |
| 58 | + |
| 59 | + hal_stm32 = pkgs.fetchgit { |
| 60 | + name = "hal_stm32"; |
| 61 | + url = "https://chromium.googlesource.com/chromiumos/third_party/zephyr/hal_stm32"; |
| 62 | + rev = "refs/heads/chromeos-main"; |
| 63 | + hash = "sha256-r1aks0sgUrJeX8t2lO98sOtGjBMvHgt2St0am+qEz3E="; |
| 64 | + }; |
| 65 | + |
| 66 | + zephyr = pkgs.fetchFromGitHub { |
| 67 | + name = "zephyr"; |
| 68 | + owner = "FrameworkComputer"; |
| 69 | + repo = "zephyr"; |
| 70 | + rev = "lotus-zephyr"; |
| 71 | + hash = "sha256-KgTh39Ba9jDByv7+9gDdZHCl2OOku3Y3yxq0Pt4GeBo="; |
| 72 | + }; |
| 73 | + |
| 74 | + nanopb = pkgs.fetchgit { |
| 75 | + name = "nanopb"; |
| 76 | + url = "https://chromium.googlesource.com/chromiumos/third_party/zephyr/nanopb"; |
| 77 | + rev = "refs/heads/main"; |
| 78 | + hash = "sha256-qt9ey7dbuqxIAhc4BKm0EqkMusOdsuQZNppmaN4ZVfA="; |
| 79 | + }; |
| 80 | + |
| 81 | + u-boot = pkgs.fetchgit { |
| 82 | + name = "u-boot"; |
| 83 | + url = "https://chromium.googlesource.com/chromiumos/third_party/u-boot"; |
| 84 | + rev = "refs/heads/upstream/next"; |
| 85 | + hash = "sha256-h5y0M1dupdO9CNG+OhUYi56UXsWAL5B0PTnhx+gU3FA="; |
| 86 | + fetchSubmodules = false; |
| 87 | + }; |
| 88 | + |
| 89 | + depot_tools = pkgs.fetchgit { |
| 90 | + name = "depot_tools"; |
| 91 | + url = "https://chromium.googlesource.com/chromium/tools/depot_tools"; |
| 92 | + rev = "84edf22d0e5bf3f9ae60714ed9789fd62f86cf2a"; |
| 93 | + hash = "sha256-3t03DdZ+dRen1z3PTyGt2rDPHIHTe+qS8ek/bH4kuKo="; |
| 94 | + }; |
37 | 95 | in rec { |
38 | 96 | formatter = pkgs.alejandra; |
39 | 97 |
|
| 98 | + packages.default = packages.lotus; |
| 99 | + packages.lotus = pkgs.stdenv.mkDerivation { |
| 100 | + name = "lotus"; |
| 101 | + |
| 102 | + srcs = [ |
| 103 | + pyelftools |
| 104 | + crosutils |
| 105 | + ec |
| 106 | + cmsis |
| 107 | + hal_stm32 |
| 108 | + zephyr |
| 109 | + nanopb |
| 110 | + u-boot |
| 111 | + depot_tools |
| 112 | + ]; |
| 113 | + |
| 114 | + sourceRoot = "."; |
| 115 | + |
| 116 | + postPatch = '' |
| 117 | + mkdir .repo |
| 118 | +
|
| 119 | + mkdir -p chromite/third_party |
| 120 | + mv pyelftools chromite/third_party/pyelftools |
| 121 | +
|
| 122 | + mkdir -p src |
| 123 | + mv crosutils src/scripts |
| 124 | +
|
| 125 | + mkdir -p src/platform |
| 126 | + mv ec src/platform/ec |
| 127 | +
|
| 128 | + mkdir -p src/third_party/zephyr |
| 129 | + mv cmsis src/third_party/zephyr/cmsis |
| 130 | +
|
| 131 | + mkdir -p src/third_party/zephyr |
| 132 | + mv hal_stm32 src/third_party/zephyr/hal_stm32 |
| 133 | +
|
| 134 | + mkdir -p src/third_party/zephyr |
| 135 | + mv zephyr src/third_party/zephyr/main |
| 136 | +
|
| 137 | + mkdir -p src/third_party/zephyr |
| 138 | + mv nanopb src/third_party/zephyr/nanopb |
| 139 | +
|
| 140 | + mkdir -p src/third_party/u-boot |
| 141 | + mv u-boot src/third_party/u-boot/files |
| 142 | +
|
| 143 | + mkdir -p src/chromium |
| 144 | + mv depot_tools src/chromium/depot_tools |
| 145 | + ''; |
| 146 | + |
| 147 | + nativeBuildInputs = [ |
| 148 | + zephyr-sdk |
| 149 | + pkgs.cmake |
| 150 | + pkgs.git |
| 151 | + pkgs.ninja |
| 152 | + pythonPkgs.pyyaml |
| 153 | + pythonPkgs.pykwalify |
| 154 | + pythonPkgs.packaging |
| 155 | + pythonPkgs.pyelftools |
| 156 | + pythonPkgs.colorama |
| 157 | + packages.binman |
| 158 | + ]; |
| 159 | + |
| 160 | + dontUseCmakeConfigure = true; |
| 161 | + |
| 162 | + buildPhase = '' |
| 163 | + ${packages.zmake}/bin/zmake -j8 build lotus -DCMAKE_MAKE_PROGRAM="${pkgs.ninja}/bin/ninja" -DBUILD_VERSION=awawa |
| 164 | + ''; |
| 165 | + installPhase = '' |
| 166 | + mkdir $out |
| 167 | + cp src/platform/ec/build/zephyr/lotus/output/* $out/ |
| 168 | + ''; |
| 169 | + }; |
| 170 | + |
40 | 171 | packages.zmake = pythonPkgs.buildPythonPackage { |
41 | 172 | name = "zmake"; |
42 | | - src = "${ec}/zephyr/zmake"; |
| 173 | + src = ec; |
| 174 | + sourceRoot = "ec/zephyr/zmake"; |
43 | 175 | pyproject = true; |
| 176 | + build-system = [pythonPkgs.setuptools]; |
44 | 177 |
|
45 | | - propagatedBuildInputs = with pkgs; [gcc dtc]; |
46 | | - |
| 178 | + # The DYLD_LIBRARY_PATH part here is only needed for Darwin, but it |
| 179 | + # doesn't harm Linux. |
47 | 180 | postPatch = '' |
48 | | - # TODO: binman not found. |
49 | | - echo sed -e 's#"/bin:/usr/bin"#"/bin:/usr/bin:${pkgs.gcc}/bin:${pkgs.dtc}/bin","DYLD_LIBRARY_PATH":"${pkgs.dtc}/lib"#' -i src/platform/ec/zephyr/zmake/zmake/jobserver.py |
| 181 | + sed -e 's#"/bin:/usr/bin"#"/bin:/usr/bin:${pkgs.gcc}/bin:${pkgs.dtc}/bin","DYLD_LIBRARY_PATH":"${pkgs.dtc}/lib"#' -i zmake/jobserver.py |
50 | 182 | ''; |
51 | 183 | }; |
52 | 184 |
|
|
56 | 188 | pyproject = false; |
57 | 189 | build-system = [pythonPkgs.setuptools]; |
58 | 190 |
|
| 191 | + # zmake calls (sys.executable, path-to-binman, ...) on purpose, so we |
| 192 | + # can't wrap it. This makes it unsuitable for calling directly, however. |
| 193 | + dontWrapPythonPrograms = true; |
| 194 | + |
59 | 195 | buildInputs = [ |
60 | 196 | pythonPkgs.pypaBuildHook |
61 | 197 | pythonPkgs.pipInstallHook |
62 | 198 | ]; |
| 199 | + |
63 | 200 | dependencies = [ |
64 | 201 | pythonPkgs.setuptools |
65 | 202 | packages.u_boot_pylib |
|
121 | 258 | pythonPkgs.pyelftools |
122 | 259 | pythonPkgs.colorama |
123 | 260 | pythonPkgs.setuptools |
124 | | - pythonPkgs.libfdt # <- 311 version fails to build; can't build with pip. |
| 261 | + pythonPkgs.libfdt |
125 | 262 | dtc |
126 | 263 | cmake |
127 | 264 | ninja |
|
0 commit comments