diff --git a/contrib/Dockerfile b/contrib/Dockerfile index f00f4ec2..3fb211df 100644 --- a/contrib/Dockerfile +++ b/contrib/Dockerfile @@ -1,8 +1,10 @@ -FROM docker.io/library/ubuntu:23.10 as base +FROM docker.io/library/ubuntu:24.04 as base RUN apt-get -qq update -y \ && DEBIAN_FRONTEND=noninteractive \ apt-get install -y --no-install-recommends \ + autoconf \ + bash-completion \ bison \ build-essential \ ca-certificates \ @@ -11,53 +13,66 @@ RUN apt-get -qq update -y \ clang-tidy \ cmake \ flex \ + g++ \ gawk \ + gcc \ git \ - golang \ + gperf \ graphviz \ - iverilog \ + help2man \ less \ libboost-dev \ libboost-filesystem-dev \ libboost-iostreams-dev \ libboost-program-options-dev \ + libboost-python-dev \ + libboost-system-dev \ libboost-thread-dev \ libeigen3-dev \ libffi-dev \ + libfl-dev \ libftdi-dev \ - libglib2.0-dev \ + libpython3-dev \ libusb-1.0-0-dev \ - libpixman-1-dev \ libreadline-dev \ lld \ llvm \ - mercurial \ + make \ nano \ - ninja-build \ + ncdu \ + perl \ pkg-config \ + psmisc \ + python-is-python3 \ python3 \ + python3-full \ python3-dev \ + python3-pip \ + python3-pytest \ + sdcc \ tcl-dev \ - verilator \ vim \ xdot \ - sdcc \ - splint \ - cmake \ - gcc-arm-none-eabi \ - libnewlib-arm-none-eabi \ - libstdc++-arm-none-eabi-newlib \ + zlib1g-dev \ && rm -rf /var/lib/apt/lists/* +# Enable bash completion +RUN sed -i '/#if ! shopt -oq posix; then/ s/^#//' /etc/bash.bashrc +RUN sed -i '/# if \[ -f \/usr\/share\/bash-completion\/bash_completion \]; then/ s/^#//' /etc/bash.bashrc +RUN sed -i '/# . \/usr\/share\/bash-completion\/bash_completion/ s/^#//' /etc/bash.bashrc +RUN sed -i '/# elif \[ -f \/etc\/bash_completion \]; then/ s/^#//' /etc/bash.bashrc +RUN sed -i '/# . \/etc\/bash_completion/ s/^#//' /etc/bash.bashrc +RUN sed -i '/# fi/ s/^#//' /etc/bash.bashrc +RUN sed -i '/#fi/ s/^#//' /etc/bash.bashrc FROM base as toolsbuilder -RUN git clone https://github.com/YosysHQ/icestorm /src +RUN git clone --depth=1 https://github.com/YosysHQ/icestorm /src WORKDIR /src -RUN git checkout d20a5e9001f46262bf0cef220f1a6943946e421d \ +RUN git checkout 738af822905fdcf0466e9dd784b9ae4b0b34987f \ && make -j$(nproc --ignore=2) \ && make install -RUN git >/usr/local/repo-commit-icestorm describe --all --always --long --dirty +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-icestorm WORKDIR / RUN rm -rf /src @@ -66,34 +81,69 @@ RUN git clone -b interfaces --depth=1 https://github.com/tillitis/icestorm /src WORKDIR /src/iceprog RUN make -j$(nproc --ignore=2) \ && make PROGRAM_PREFIX=tillitis- install -RUN git >/usr/local/repo-commit-tillitis--icestorm describe --all --always --long --dirty +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-tillitis--icestorm WORKDIR / RUN rm -rf /src -RUN git clone -b yosys-0.36 --depth=1 https://github.com/YosysHQ/yosys /src +RUN git clone -b 0.45 --depth=1 https://github.com/YosysHQ/yosys /src WORKDIR /src -RUN make -j$(nproc --ignore=2) \ +RUN git submodule update --init \ + && make -j$(nproc --ignore=2) \ + && make install +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-yosys +WORKDIR / +RUN rm -rf /src + +RUN git clone -b nextpnr-0.7 https://github.com/YosysHQ/nextpnr /src +WORKDIR /src +# Add "Fix handling of RNG seed" #1369 +RUN git cherry-pick --no-commit 6ca64526bb18ace8690872b09ca1251567c116de +# Add early exit if place fails on timing +RUN sed -i 's/if (do_route) {/if (do_route \&\& !had_nonfatal_error) {/' common/kernel/command.cc +RUN sed -i 's/bool warn_on_failure = false/bool warn_on_failure = true/' common/kernel/timing.h +RUN cmake -DARCH=ice40 . \ + && make -j$(nproc --ignore=2) \ && make install -RUN git >/usr/local/repo-commit-yosys describe --all --always --long --dirty +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-nextpnr WORKDIR / RUN rm -rf /src -RUN git clone -b nextpnr-0.6 --depth=1 https://github.com/YosysHQ/nextpnr /src +RUN git clone -b v12_0 --depth=1 https://github.com/steveicarus/iverilog /src WORKDIR /src -RUN cmake -DARCH=ice40 -DCMAKE_INSTALL_PREFIX=/usr/local . \ +RUN sh autoconf.sh \ + && ./configure \ && make -j$(nproc --ignore=2) \ && make install -RUN git >/usr/local/repo-commit-nextpnr describe --all --always --long --dirty +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-iverilog WORKDIR / RUN rm -rf /src -RUN git clone --branch 1.5.1 --depth 1 https://github.com/raspberrypi/pico-sdk.git /usr/local/pico-sdk -WORKDIR /usr/local/pico-sdk -RUN git submodule update --init -RUN git >/usr/local/repo-commit-picosdk describe --all --always --long --dirty +RUN git clone -b v5.028 --depth=1 https://github.com/verilator/verilator /src +WORKDIR /src +RUN autoconf \ + && ./configure \ + && make -j$(nproc --ignore=2) \ + && make test \ + && make install +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-verilator WORKDIR / +RUN rm -rf /src +ADD https://github.com/chipsalliance/verible/releases/download/v0.0-3795-gf4d72375/verible-v0.0-3795-gf4d72375-linux-static-x86_64.tar.gz /src/verible.tar.gz +WORKDIR /src +RUN tar xvf verible.tar.gz +RUN mv -v verible*/bin/* /usr/local/bin +RUN verible-verilog-format --version | head -1 > /usr/local/repo-commit-verible +WORKDIR / +RUN rm -rf /src + +RUN git clone -b v1.9.1 https://github.com/cocotb/cocotb.git /src +WORKDIR /src +RUN pip install . --break-system-packages +RUN git describe --all --always --long --dirty > /usr/local/repo-commit-cocotb +WORKDIR / +RUN rm -rf /src FROM base -LABEL org.opencontainers.image.description="Toolchain for building TKey FPGA bitstream, firmware, apps, programmer firmware" +LABEL org.opencontainers.image.description="Toolchain for building TKey FPGA bitstream" COPY --from=toolsbuilder /usr/local/ /usr/local diff --git a/hw/application_fpga/Makefile b/hw/application_fpga/Makefile index 64fce8de..a6392bc1 100644 --- a/hw/application_fpga/Makefile +++ b/hw/application_fpga/Makefile @@ -237,7 +237,8 @@ LINT_FLAGS = \ -Wno-WIDTHEXPAND \ -Wno-UNOPTFLAT \ --timescale 1ns/1ns \ - -DNO_ICE40_DEFAULT_ASSIGNMENTS + -DNO_ICE40_DEFAULT_ASSIGNMENTS \ + -Wno-GENUNNAMED lint: $(FPGA_SRC) $(VERILOG_SRCS) $(ICE40_SIM_CELLS) $(LINT) $(LINT_FLAGS) \