165 lines
4.6 KiB
Nix
165 lines
4.6 KiB
Nix
{
|
|
description = "fpga-assembler";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/2c8d3f48d33929642c1c12cd243df4cc7d2ce434";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
flake-utils,
|
|
}@inputs:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
};
|
|
common = with pkgs; {
|
|
bazel = bazel_7;
|
|
jdk = jdk;
|
|
};
|
|
in
|
|
{
|
|
devShells.default =
|
|
let
|
|
# There is too much volatility between even micro-versions of
|
|
# newer clang-format. Use slightly older version for now.
|
|
clang_for_formatting = pkgs.llvmPackages_17.clang-tools;
|
|
|
|
# clang tidy: use latest.
|
|
clang_for_tidy = pkgs.llvmPackages_18.clang-tools;
|
|
in
|
|
with pkgs;
|
|
pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
git
|
|
common.bazel
|
|
common.jdk
|
|
bash
|
|
gdb
|
|
|
|
# For clang-tidy and clang-format.
|
|
clang_for_formatting
|
|
clang_for_tidy
|
|
|
|
# For buildifier, buildozer.
|
|
bazel-buildtools
|
|
bant
|
|
|
|
# Profiling and sanitizers.
|
|
linuxPackages_latest.perf
|
|
pprof
|
|
perf_data_converter
|
|
valgrind
|
|
|
|
# FPGA utils.
|
|
openfpgaloader
|
|
];
|
|
|
|
CLANG_TIDY = "${clang_for_tidy}/bin/clang-tidy";
|
|
CLANG_FORMAT = "${clang_for_formatting}/bin/clang-format";
|
|
|
|
shellHook = ''
|
|
exec bash
|
|
'';
|
|
};
|
|
|
|
# Package fpga-assembler.
|
|
packages.default =
|
|
(pkgs.callPackage (
|
|
{
|
|
buildBazelPackage,
|
|
stdenv,
|
|
fetchFromGitHub,
|
|
lib,
|
|
nix-gitignore,
|
|
}:
|
|
let
|
|
system = stdenv.hostPlatform.system;
|
|
registry = fetchFromGitHub {
|
|
owner = "bazelbuild";
|
|
repo = "bazel-central-registry";
|
|
rev = "63f3af762b2fdd7acaa7987856cd3ac314eaea09";
|
|
hash = "sha256-ugNzoP0gdrhl9vH1TRdwoevuTsSqjitXnAoMSSTlCgI=";
|
|
};
|
|
in
|
|
buildBazelPackage {
|
|
pname = "fpga-as";
|
|
|
|
version = "0.0.1";
|
|
|
|
src = nix-gitignore.gitignoreSourcePure [ ] ./.;
|
|
|
|
bazelFlags = [
|
|
"--registry"
|
|
"file://${registry}"
|
|
];
|
|
|
|
postPatch = ''
|
|
patchShebangs scripts/create-workspace-status.sh
|
|
'';
|
|
|
|
fetchAttrs = {
|
|
hash =
|
|
{
|
|
aarch64-linux = "sha256-E4VHjDa0qkHmKUNpTBfJi7dhMLcd1z5he+p31/XvUl8=";
|
|
x86_64-linux = "sha256-hVBJB0Hsd9sXuEoNcjhTkbPl89vlZT1w39JppCD+n8Y=";
|
|
}
|
|
.${system} or (throw "No hash for system: ${system}");
|
|
};
|
|
|
|
removeRulesCC = false;
|
|
removeLocalConfigCc = false;
|
|
removeLocalConfigSh = false;
|
|
|
|
nativeBuildInputs = [
|
|
common.jdk
|
|
pkgs.git
|
|
pkgs.bash
|
|
# Convenient tool to enter into the sandbox and start debugging.
|
|
pkgs.breakpointHook
|
|
];
|
|
|
|
bazel = common.bazel;
|
|
|
|
bazelBuildFlags = [ "-c opt" ];
|
|
bazelTestTargets = [ "//..." ];
|
|
bazelTargets = [ "//fpga:fpga-as" ];
|
|
|
|
buildAttrs = {
|
|
installPhase = ''
|
|
install -D --strip bazel-bin/fpga/fpga-as "$out/bin/fpga-as"
|
|
'';
|
|
};
|
|
|
|
meta = {
|
|
description = "Tool to convert FASM to FPGA bitstream.";
|
|
homepage = "https://github.com/lromor/fpga-assembler";
|
|
license = lib.licenses.asl20;
|
|
platforms = lib.platforms.linux;
|
|
};
|
|
}
|
|
) { }).overrideAttrs
|
|
(
|
|
final: prev: {
|
|
# Fixup the deps so they always contain correrct
|
|
# shebangs paths pointing to the store.
|
|
deps = prev.deps.overrideAttrs (
|
|
final: prev: {
|
|
installPhase =
|
|
''
|
|
patchShebangs $bazelOut/external
|
|
''
|
|
+ prev.installPhase;
|
|
}
|
|
);
|
|
}
|
|
);
|
|
}
|
|
);
|
|
}
|