diff --git a/templates/chisel/build.mill b/templates/chisel/build.mill new file mode 100644 index 0000000..0288c56 --- /dev/null +++ b/templates/chisel/build.mill @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2024 Jiuyang Liu +package build + +import mill._ +import mill.scalalib._ +import mill.define.{Command, TaskModule} +import mill.scalalib.publish._ +import mill.scalalib.scalafmt._ +import mill.scalalib.TestModule.Utest +import mill.util.Jvm +import coursier.maven.MavenRepository + +object deps { + val scalaVer = "2.13.15" + val mainargs = ivy"com.lihaoyi::mainargs:0.5.0" + val oslib = ivy"com.lihaoyi::os-lib:0.9.1" + val upickle = ivy"com.lihaoyi::upickle:3.3.1" + val chisel = ivy"org.chipsalliance::chisel::0.0.0+0-no-vcs-SNAPSHOT" + val chiselPlugin = ivy"org.chipsalliance:chisel-plugin_${scalaVer}:0.0.0+0-no-vcs-SNAPSHOT" +} + +object gcd extends GCD +trait GCD extends common.HasChisel with ScalafmtModule { + def scalaVersion = Task(deps.scalaVer) + + def chiselModule = None + def chiselPluginJar = Task(None) + def chiselPluginIvy = Some(deps.chiselPlugin) + def chiselIvy = Some(deps.chisel) +} + +object elaborator extends Elaborator +trait Elaborator extends common.ElaboratorModule with ScalafmtModule { + def scalaVersion = Task(deps.scalaVer) + + def circtInstallPath = + Task.Input(PathRef(os.Path(T.ctx().env("CIRCT_INSTALL_PATH")))) + + def generators = Seq(gcd) + + def mainargsIvy = deps.mainargs + + def chiselModule = None + def chiselPluginJar = Task(None) + def chiselPluginIvy = Some(deps.chiselPlugin) + def chiselIvy = Some(deps.chisel) +} diff --git a/templates/chisel/build.sc b/templates/chisel/build.sc deleted file mode 100644 index 1a2be93..0000000 --- a/templates/chisel/build.sc +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: 2024 Jiuyang Liu - -import mill._ -import mill.scalalib._ -import mill.define.{Command, TaskModule} -import mill.scalalib.publish._ -import mill.scalalib.scalafmt._ -import mill.scalalib.TestModule.Utest -import mill.util.Jvm -import coursier.maven.MavenRepository -import $file.dependencies.chisel.build -import $file.common - -object deps { - val scalaVer = "2.13.15" - val mainargs = ivy"com.lihaoyi::mainargs:0.5.0" - val oslib = ivy"com.lihaoyi::os-lib:0.9.1" - val upickle = ivy"com.lihaoyi::upickle:3.3.1" -} - -object chisel extends Chisel - -trait Chisel extends millbuild.dependencies.chisel.build.Chisel { - def crossValue = deps.scalaVer - override def millSourcePath = os.pwd / "dependencies" / "chisel" -} - -object gcd extends GCD -trait GCD extends millbuild.common.HasChisel with ScalafmtModule { - def scalaVersion = T(deps.scalaVer) - - def chiselModule = Some(chisel) - def chiselPluginJar = T(Some(chisel.pluginModule.jar())) - def chiselIvy = None - def chiselPluginIvy = None -} - -object elaborator extends Elaborator -trait Elaborator extends millbuild.common.ElaboratorModule with ScalafmtModule { - def scalaVersion = T(deps.scalaVer) - - def panamaconverterModule = panamaconverter - - def circtInstallPath = - T.input(PathRef(os.Path(T.ctx().env("CIRCT_INSTALL_PATH")))) - - def generators = Seq(gcd) - - def mainargsIvy = deps.mainargs - - def chiselModule = Some(chisel) - def chiselPluginJar = T(Some(chisel.pluginModule.jar())) - def chiselPluginIvy = None - def chiselIvy = None -} - -object panamaconverter extends PanamaConverter -trait PanamaConverter extends millbuild.dependencies.chisel.build.PanamaConverter { - def crossValue = deps.scalaVer - - override def millSourcePath = - os.pwd / "dependencies" / "chisel" / "panamaconverter" - - def scalaVersion = T(deps.scalaVer) -} diff --git a/templates/chisel/common.sc b/templates/chisel/common.mill similarity index 92% rename from templates/chisel/common.sc rename to templates/chisel/common.mill index 6575e3e..db218d2 100644 --- a/templates/chisel/common.sc +++ b/templates/chisel/common.mill @@ -1,5 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2024 Jiuyang Liu +package build import mill._ import mill.scalalib._ @@ -39,9 +40,8 @@ trait HasChisel extends ScalaModule { trait ElaboratorModule extends ScalaModule with HasChisel { def generators: Seq[ScalaModule] - def panamaconverterModule: ScalaModule def circtInstallPath: T[PathRef] - override def moduleDeps = super.moduleDeps ++ Seq(panamaconverterModule) ++ generators + override def moduleDeps = super.moduleDeps ++ generators def mainargsIvy: Dep override def ivyDeps = T(super.ivyDeps() ++ Seq(mainargsIvy)) override def javacOptions = T(super.javacOptions() ++ Seq("--enable-preview", "--release", "21")) diff --git a/templates/chisel/flake.lock b/templates/chisel/flake.lock index 4029d99..c95b909 100644 --- a/templates/chisel/flake.lock +++ b/templates/chisel/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1729880355, - "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", + "lastModified": 1735834308, + "narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", + "rev": "6df24922a1400241dae323af55f30e4318a6ca65", "type": "github" }, "original": { diff --git a/templates/chisel/flake.nix b/templates/chisel/flake.nix index 7457674..646ab69 100644 --- a/templates/chisel/flake.nix +++ b/templates/chisel/flake.nix @@ -21,14 +21,15 @@ inherit system; }; in + with pkgs; { - formatter = pkgs.nixpkgs-fmt; + formatter = nixpkgs-fmt; legacyPackages = pkgs; - devShells.default = pkgs.mkShell ({ - inputsFrom = [ pkgs.gcd.gcd-compiled pkgs.gcd.tb-dpi-lib ]; - nativeBuildInputs = [ pkgs.cargo pkgs.rustfmt pkgs.rust-analyzer ]; + devShells.default = mkShell ({ + inputsFrom = [ gcd.gcd-compiled gcd.tb-dpi-lib ]; + packages = [ cargo rustfmt rust-analyzer nixd nvfetcher]; RUST_SRC_PATH = - "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; - } // pkgs.gcd.tb-dpi-lib.env // pkgs.gcd.gcd-compiled.env); + "${rust.packages.stable.rustPlatform.rustLibSrc}"; + } // gcd.tb-dpi-lib.env // gcd.gcd-compiled.env); }); } diff --git a/templates/chisel/nix/gcd/gcd.nix b/templates/chisel/nix/gcd/gcd.nix index a3dc54f..c1a0789 100644 --- a/templates/chisel/nix/gcd/gcd.nix +++ b/templates/chisel/nix/gcd/gcd.nix @@ -4,6 +4,7 @@ { lib , stdenv , fetchMillDeps +, publishMillModule , makeWrapper , jdk21 , git @@ -20,6 +21,15 @@ }: let + chisel = + publishMillModule { + name = "chisel"; + version = "9999"; + outputHash = "sha256-ZJGYxmTg4+8UU3V3MTxBSWow4XYKQ4KuCvD/PBxLSEc="; + publishPhase = "mill -i unipublish.publishLocal"; + nativeBuildInputs = [ git ]; + }; + self = stdenv.mkDerivation rec { name = "gcd"; @@ -29,8 +39,8 @@ let toSource { root = ./../..; fileset = unions [ - ./../../build.sc - ./../../common.sc + ./../../build.mill + ./../../common.mill ./../../gcd ./../../elaborator ]; @@ -42,9 +52,10 @@ let src = with lib.fileset; toSource { root = ./../..; - fileset = unions [ ./../../build.sc ./../../common.sc ]; + fileset = unions [ ./../../build.mill ./../../common.mill ]; }; - millDepsHash = "sha256-5VTgJ1JaIxP3wk/WsFj+W1VGFE2xoPKu3XbmTVOvMdk="; + millDepModules = [ chisel ]; + millDepsHash = "sha256-cPGkRjKc42dcSOXHAW9JAl/AKgwPdl+T8bVPsWCXxpM="; nativeBuildInputs = [ projectDependencies.setupHook ]; }; diff --git a/templates/chisel/nix/overlay.nix b/templates/chisel/nix/overlay.nix index c6c1677..5e71beb 100644 --- a/templates/chisel/nix/overlay.nix +++ b/templates/chisel/nix/overlay.nix @@ -20,6 +20,8 @@ final: prev: { fetchMillDeps = final.callPackage ./pkgs/mill-builder.nix { }; + publishMillModule = final.callPackage ./pkgs/dependencies { }; + circt-full = final.callPackage ./pkgs/circt-full.nix { }; # faster strip-undetereminism diff --git a/templates/chisel/nix/pkgs/dependencies/_sources/generated.json b/templates/chisel/nix/pkgs/dependencies/_sources/generated.json index 4e20105..f93e4ac 100644 --- a/templates/chisel/nix/pkgs/dependencies/_sources/generated.json +++ b/templates/chisel/nix/pkgs/dependencies/_sources/generated.json @@ -1,7 +1,7 @@ { "chisel": { "cargoLocks": null, - "date": "2024-10-28", + "date": "2025-01-09", "extract": null, "name": "chisel", "passthru": null, @@ -11,12 +11,12 @@ "fetchSubmodules": false, "leaveDotGit": false, "name": null, - "owner": "chipsalliance", + "owner": "unlsycn", "repo": "chisel", - "rev": "66bab812796eb5a5c0bbe3308ee01fc6752557eb", - "sha256": "sha256-gaaNEGqxm213vQ3er6vn7kC8na0D745IdDnJWwQPgms=", + "rev": "ea01f89d39c138bc4c260baf5e8e088e120f4265", + "sha256": "sha256-KNcAgOA/YBt+1QOVXGpK/33BZ8PpDcHDdAnIBDLfSqI=", "type": "github" }, - "version": "66bab812796eb5a5c0bbe3308ee01fc6752557eb" + "version": "ea01f89d39c138bc4c260baf5e8e088e120f4265" } } \ No newline at end of file diff --git a/templates/chisel/nix/pkgs/dependencies/_sources/generated.nix b/templates/chisel/nix/pkgs/dependencies/_sources/generated.nix index 7eb852b..0313a19 100644 --- a/templates/chisel/nix/pkgs/dependencies/_sources/generated.nix +++ b/templates/chisel/nix/pkgs/dependencies/_sources/generated.nix @@ -3,14 +3,14 @@ { chisel = { pname = "chisel"; - version = "66bab812796eb5a5c0bbe3308ee01fc6752557eb"; + version = "ea01f89d39c138bc4c260baf5e8e088e120f4265"; src = fetchFromGitHub { - owner = "chipsalliance"; + owner = "unlsycn"; repo = "chisel"; - rev = "66bab812796eb5a5c0bbe3308ee01fc6752557eb"; + rev = "ea01f89d39c138bc4c260baf5e8e088e120f4265"; fetchSubmodules = false; - sha256 = "sha256-gaaNEGqxm213vQ3er6vn7kC8na0D745IdDnJWwQPgms="; + sha256 = "sha256-KNcAgOA/YBt+1QOVXGpK/33BZ8PpDcHDdAnIBDLfSqI="; }; - date = "2024-10-28"; + date = "2025-01-09"; }; } diff --git a/templates/chisel/nix/pkgs/dependencies/default.nix b/templates/chisel/nix/pkgs/dependencies/default.nix new file mode 100644 index 0000000..b8c8d38 --- /dev/null +++ b/templates/chisel/nix/pkgs/dependencies/default.nix @@ -0,0 +1,47 @@ +{ pkgs +, stdenv +, mill +, ... +}: +{ name +, version +, outputHash +, publishPhase +, ... +}@args: +let + dependencies = pkgs.callPackage ./_sources/generated.nix { }; +in +stdenv.mkDerivation { + pname = name; + src = dependencies.${name}.src; + + inherit version outputHash; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + + nativeBuildInputs = [ mill ] ++ (args.nativeBuildInputs or [ ]); + + impureEnvVars = [ "JAVA_OPTS" ]; + + buildPhase = '' + runHook preBuild + echo "-Duser.home=$TMPDIR -Divy.home=$TMPDIR/ivy $JAVA_OPTS" | tr ' ' '\n' > mill-java-opts + export MILL_JVM_OPTS_PATH=$PWD/mill-java-opts + + # Use "https://repo1.maven.org/maven2/" only to keep dependencies integrity + export COURSIER_REPOSITORIES="ivy2Local|central" + + ${publishPhase} + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/.ivy2 + mv $TMPDIR/ivy/local $out/.ivy2/local + runHook postInstall + ''; +} diff --git a/templates/chisel/nix/pkgs/dependencies/nvfetcher.toml b/templates/chisel/nix/pkgs/dependencies/nvfetcher.toml index 04efd42..e72d08b 100644 --- a/templates/chisel/nix/pkgs/dependencies/nvfetcher.toml +++ b/templates/chisel/nix/pkgs/dependencies/nvfetcher.toml @@ -1,4 +1,4 @@ [chisel] -src.git = "https://github.com/chipsalliance/chisel" -src.branch = "main" -fetch.github = "chipsalliance/chisel" +src.git = "https://github.com/unlsycn/chisel" +src.branch = "mill-bump" +fetch.github = "unlsycn/chisel" diff --git a/templates/chisel/nix/pkgs/mill-builder.nix b/templates/chisel/nix/pkgs/mill-builder.nix index 86e8f99..95e3e63 100644 --- a/templates/chisel/nix/pkgs/mill-builder.nix +++ b/templates/chisel/nix/pkgs/mill-builder.nix @@ -1,9 +1,9 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: 2024 Jiuyang Liu -{ stdenvNoCC, mill, writeText, makeSetupHook, runCommand, lib }: +{ stdenvNoCC, mill, rsync, writeText, makeSetupHook, lib }: -{ name, src, millDepsHash, ... }@args: +{ name, src, millDepModules, millDepsHash, ... }@args: let mill-rt-version = lib.head (lib.splitString "+" mill.jre.version); @@ -13,16 +13,24 @@ let nativeBuildInputs = [ mill - ] ++ (args.nativeBuildInputs or [ ]); + rsync + ] + ++ millDepModules + ++ (args.nativeBuildInputs or [ ]); impureEnvVars = [ "JAVA_OPTS" ]; buildPhase = '' runHook preBuild - export JAVA_OPTS="-Duser.home=$TMPDIR $JAVA_OPTS" + echo "-Duser.home=$TMPDIR $JAVA_OPTS" | tr ' ' '\n' > mill-java-opts + export MILL_JVM_OPTS_PATH=$PWD/mill-java-opts + + mkdir -p $TMPDIR/.ivy2 + ${ lib.concatStringsSep "\n" + (map (module: "rsync -a --chmod=D775,F664 ${module}/.ivy2/local/ $TMPDIR/.ivy2/local/") millDepModules)} # Use "https://repo1.maven.org/maven2/" only to keep dependencies integrity - export COURSIER_REPOSITORIES="central" + export COURSIER_REPOSITORIES="ivy2Local|central" mill -i __.prepareOffline mill -i __.scalaCompilerClasspath @@ -31,8 +39,9 @@ let installPhase = '' runHook preInstall - mkdir -p $out/.cache + mkdir -p $out/.cache $out/.ivy2 mv $TMPDIR/.cache/coursier $out/.cache/coursier + mv $TMPDIR/.ivy2/local $out/.ivy2/local runHook postInstall ''; @@ -51,11 +60,14 @@ let (writeText "mill-setup-hook" '' setupMillCache() { local tmpdir=$(mktemp -d) - export JAVA_OPTS="$JAVA_OPTS -Duser.home=$tmpdir" + echo "$JAVA_OPTS -Duser.home=$tmpdir" | tr ' ' '\n' > mill-java-opts + export MILL_JVM_OPTS_PATH=$PWD/mill-java-opts - mkdir -p "$tmpdir"/.cache "$tmpdir/.mill/ammonite" + mkdir -p "$tmpdir"/.cache "$tmpdir"/.ivy2 "$tmpdir/.mill/ammonite" cp -r "${self}"/.cache/coursier "$tmpdir"/.cache/ + cp -r "${self}"/.ivy2/local "$tmpdir"/.ivy2/ + touch "$tmpdir/.mill/ammonite/rt-${mill-rt-version}.jar" echo "JAVA HOME dir set to $tmpdir"