mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +00:00 
			
		
		
		
	Reapply "Merge pull request #5301 from KrystalDelusion/krys/re_5280"
This reverts commit 88eb83a0c3.
			
			
This commit is contained in:
		
							parent
							
								
									727998f663
								
							
						
					
					
						commit
						f102b25914
					
				
					 7 changed files with 171 additions and 34 deletions
				
			
		
							
								
								
									
										16
									
								
								.github/workflows/extra-builds.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/extra-builds.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,14 @@
 | 
			
		|||
name: Test extra build flows
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
on:
 | 
			
		||||
  # always test main
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  # test PRs
 | 
			
		||||
  pull_request:
 | 
			
		||||
  # allow triggering tests, ignores skip check
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pre_job:
 | 
			
		||||
| 
						 | 
				
			
			@ -11,11 +19,11 @@ jobs:
 | 
			
		|||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on documentation changes
 | 
			
		||||
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
 | 
			
		||||
          # cancel previous builds if a new commit is pushed
 | 
			
		||||
          cancel_others: 'true'
 | 
			
		||||
          # only run on push *or* pull_request, not both
 | 
			
		||||
          concurrent_skipping: 'same_content_newer'
 | 
			
		||||
          # but never cancel main
 | 
			
		||||
          cancel_others: ${{ github.ref != 'refs/heads/main' }}
 | 
			
		||||
 | 
			
		||||
  vs-prep:
 | 
			
		||||
    name: Prepare Visual Studio build
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								.github/workflows/test-build.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										44
									
								
								.github/workflows/test-build.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,14 @@
 | 
			
		|||
name: Build and run tests
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
on:
 | 
			
		||||
  # always test main
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  # test PRs
 | 
			
		||||
  pull_request:
 | 
			
		||||
  # allow triggering tests, ignores skip check
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pre_job:
 | 
			
		||||
| 
						 | 
				
			
			@ -11,11 +19,12 @@ jobs:
 | 
			
		|||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on documentation changes
 | 
			
		||||
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
 | 
			
		||||
          # cancel previous builds if a new commit is pushed
 | 
			
		||||
          cancel_others: 'true'
 | 
			
		||||
          # only run on push *or* pull_request, not both
 | 
			
		||||
          concurrent_skipping: 'same_content_newer'
 | 
			
		||||
          # but never cancel main
 | 
			
		||||
          cancel_others: ${{ github.ref != 'refs/heads/main' }}
 | 
			
		||||
 | 
			
		||||
  pre_docs_job:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    outputs:
 | 
			
		||||
| 
						 | 
				
			
			@ -24,15 +33,16 @@ jobs:
 | 
			
		|||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on readme changes
 | 
			
		||||
          paths_ignore: '["**/README.md"]'
 | 
			
		||||
          # cancel previous builds if a new commit is pushed
 | 
			
		||||
          cancel_others: 'true'
 | 
			
		||||
          # only run on push *or* pull_request, not both
 | 
			
		||||
          concurrent_skipping: 'same_content_newer'
 | 
			
		||||
          # but never cancel main
 | 
			
		||||
          cancel_others: ${{ github.ref != 'refs/heads/main' }}
 | 
			
		||||
 | 
			
		||||
  build-yosys:
 | 
			
		||||
    name: Reusable build
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    # pre_job is a subset of pre_docs_job, so we can always build for pre_docs_job
 | 
			
		||||
    needs: pre_docs_job
 | 
			
		||||
    if: needs.pre_docs_job.outputs.should_skip != 'true'
 | 
			
		||||
    env:
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +50,6 @@ jobs:
 | 
			
		|||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest, macos-latest]
 | 
			
		||||
        sanitizer: [undefined, address]
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Yosys
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +67,6 @@ jobs:
 | 
			
		|||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          make -f ../Makefile config-$CC
 | 
			
		||||
          echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf
 | 
			
		||||
          make -f ../Makefile -j$procs ENABLE_LTO=1
 | 
			
		||||
 | 
			
		||||
      - name: Log yosys-config output
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +82,7 @@ jobs:
 | 
			
		|||
      - name: Store build artifact
 | 
			
		||||
        uses: actions/upload-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
 | 
			
		||||
          name: build-${{ matrix.os }}
 | 
			
		||||
          path: build.tar
 | 
			
		||||
          retention-days: 1
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -85,12 +93,9 @@ jobs:
 | 
			
		|||
    if: needs.pre_job.outputs.should_skip != 'true'
 | 
			
		||||
    env:
 | 
			
		||||
      CC: clang
 | 
			
		||||
      ASAN_OPTIONS: halt_on_error=1
 | 
			
		||||
      UBSAN_OPTIONS: halt_on_error=1
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest, macos-latest]
 | 
			
		||||
        sanitizer: [undefined, address]
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Yosys
 | 
			
		||||
| 
						 | 
				
			
			@ -102,11 +107,12 @@ jobs:
 | 
			
		|||
        uses: ./.github/actions/setup-build-env
 | 
			
		||||
 | 
			
		||||
      - name: Get iverilog
 | 
			
		||||
        id: get-iverilog
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          git clone https://github.com/steveicarus/iverilog.git
 | 
			
		||||
          cd iverilog
 | 
			
		||||
          echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_ENV
 | 
			
		||||
          echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      - name: Get vcd2fst
 | 
			
		||||
        shell: bash
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +129,7 @@ jobs:
 | 
			
		|||
        uses: actions/cache@v4
 | 
			
		||||
        with:
 | 
			
		||||
          path: .local/
 | 
			
		||||
          key: ${{ matrix.os }}-${IVERILOG_GIT}
 | 
			
		||||
          key: ${{ matrix.os }}-${{ steps.get-iverilog.outputs.IVERILOG_GIT }}
 | 
			
		||||
 | 
			
		||||
      - name: Build iverilog
 | 
			
		||||
        if: steps.cache-iverilog.outputs.cache-hit != 'true'
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +145,7 @@ jobs:
 | 
			
		|||
      - name: Download build artifact
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
 | 
			
		||||
          name: build-${{ matrix.os }}
 | 
			
		||||
 | 
			
		||||
      - name: Uncompress build
 | 
			
		||||
        shell: bash
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +177,6 @@ jobs:
 | 
			
		|||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest]
 | 
			
		||||
        sanitizer: [undefined]
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Yosys
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +189,7 @@ jobs:
 | 
			
		|||
      - name: Download build artifact
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
 | 
			
		||||
          name: build-${{ matrix.os }}
 | 
			
		||||
 | 
			
		||||
      - name: Uncompress build
 | 
			
		||||
        shell: bash
 | 
			
		||||
| 
						 | 
				
			
			@ -209,7 +214,6 @@ jobs:
 | 
			
		|||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest]
 | 
			
		||||
        sanitizer: [undefined, address]
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Yosys
 | 
			
		||||
| 
						 | 
				
			
			@ -223,7 +227,7 @@ jobs:
 | 
			
		|||
      - name: Download build artifact
 | 
			
		||||
        uses: actions/download-artifact@v4
 | 
			
		||||
        with:
 | 
			
		||||
          name: build-${{ matrix.os }}-${{ matrix.sanitizer }}
 | 
			
		||||
          name: build-${{ matrix.os }}
 | 
			
		||||
 | 
			
		||||
      - name: Uncompress build
 | 
			
		||||
        shell: bash
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								.github/workflows/test-compile.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/test-compile.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,14 @@
 | 
			
		|||
name: Compiler testing
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
on:
 | 
			
		||||
  # always test main
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  # test PRs
 | 
			
		||||
  pull_request:
 | 
			
		||||
  # allow triggering tests, ignores skip check
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pre_job:
 | 
			
		||||
| 
						 | 
				
			
			@ -11,11 +19,11 @@ jobs:
 | 
			
		|||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on documentation changes
 | 
			
		||||
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
 | 
			
		||||
          # cancel previous builds if a new commit is pushed
 | 
			
		||||
          cancel_others: 'true'
 | 
			
		||||
          # only run on push *or* pull_request, not both
 | 
			
		||||
          concurrent_skipping: 'same_content_newer'
 | 
			
		||||
          # but never cancel main
 | 
			
		||||
          cancel_others: ${{ github.ref != 'refs/heads/main' }}
 | 
			
		||||
 | 
			
		||||
  test-compile:
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										109
									
								
								.github/workflows/test-sanitizers.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								.github/workflows/test-sanitizers.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
name: Check clang sanitizers
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  # always test main
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  # ignore PRs due to time needed
 | 
			
		||||
  # allow triggering tests, ignores skip check
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pre_job:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    outputs:
 | 
			
		||||
      should_skip: ${{ steps.skip_check.outputs.should_skip }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on documentation changes
 | 
			
		||||
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
 | 
			
		||||
 | 
			
		||||
  run_san:
 | 
			
		||||
    name: Build and run tests
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    needs: pre_job
 | 
			
		||||
    if: needs.pre_job.outputs.should_skip != 'true'
 | 
			
		||||
    env:
 | 
			
		||||
      CC: clang
 | 
			
		||||
      ASAN_OPTIONS: halt_on_error=1
 | 
			
		||||
      UBSAN_OPTIONS: halt_on_error=1
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest, macos-latest]
 | 
			
		||||
        sanitizer: ['undefined,address']
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Yosys
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: true
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
 | 
			
		||||
      - name: Setup environment
 | 
			
		||||
        uses: ./.github/actions/setup-build-env
 | 
			
		||||
 | 
			
		||||
      - name: Get iverilog
 | 
			
		||||
        id: get-iverilog
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          git clone https://github.com/steveicarus/iverilog.git
 | 
			
		||||
          cd iverilog
 | 
			
		||||
          echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      - name: Get vcd2fst
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          git clone https://github.com/mmicko/libwave.git
 | 
			
		||||
          mkdir -p ${{ github.workspace }}/.local/
 | 
			
		||||
          cd libwave
 | 
			
		||||
          cmake . -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.local
 | 
			
		||||
          make -j$procs
 | 
			
		||||
          make install
 | 
			
		||||
 | 
			
		||||
      - name: Cache iverilog
 | 
			
		||||
        id: cache-iverilog
 | 
			
		||||
        uses: actions/cache@v4
 | 
			
		||||
        with:
 | 
			
		||||
          path: .local/
 | 
			
		||||
          key: ${{ matrix.os }}-${{ steps.get-iverilog.outputs.IVERILOG_GIT }}
 | 
			
		||||
 | 
			
		||||
      - name: Build iverilog
 | 
			
		||||
        if: steps.cache-iverilog.outputs.cache-hit != 'true'
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir -p ${{ github.workspace }}/.local/
 | 
			
		||||
          cd iverilog
 | 
			
		||||
          autoconf
 | 
			
		||||
          CC=gcc CXX=g++ ./configure --prefix=${{ github.workspace }}/.local
 | 
			
		||||
          make -j$procs
 | 
			
		||||
          make install
 | 
			
		||||
 | 
			
		||||
      - name: Check iverilog
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          iverilog -V
 | 
			
		||||
 | 
			
		||||
      - name: Build
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          make config-$CC
 | 
			
		||||
          echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf
 | 
			
		||||
          make -j$procs ENABLE_LTO=1
 | 
			
		||||
 | 
			
		||||
      - name: Log yosys-config output
 | 
			
		||||
        run: |
 | 
			
		||||
          ./yosys-config || true
 | 
			
		||||
 | 
			
		||||
      - name: Run tests
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          make -j$procs test TARGETS= EXTRA_TARGETS= CONFIG=$CC
 | 
			
		||||
 | 
			
		||||
      - name: Report errors
 | 
			
		||||
        if: ${{ failure() }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          find tests/**/*.err -print -exec cat {} \;
 | 
			
		||||
							
								
								
									
										16
									
								
								.github/workflows/test-verific.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/test-verific.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,14 @@
 | 
			
		|||
name: Build and run tests with Verific (Linux)
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
on:
 | 
			
		||||
  # always test main
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  # test PRs
 | 
			
		||||
  pull_request:
 | 
			
		||||
  # allow triggering tests, ignores skip check
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pre-job:
 | 
			
		||||
| 
						 | 
				
			
			@ -11,11 +19,11 @@ jobs:
 | 
			
		|||
      - id: skip_check
 | 
			
		||||
        uses: fkirc/skip-duplicate-actions@v5
 | 
			
		||||
        with:
 | 
			
		||||
          # don't run on documentation changes
 | 
			
		||||
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
 | 
			
		||||
          # cancel previous builds if a new commit is pushed
 | 
			
		||||
          cancel_others: 'true'
 | 
			
		||||
          # only run on push *or* pull_request, not both
 | 
			
		||||
          concurrent_skipping: 'same_content_newer'
 | 
			
		||||
          # but never cancel main
 | 
			
		||||
          cancel_others: ${{ github.ref != 'refs/heads/main' }}
 | 
			
		||||
 | 
			
		||||
  test-verific:
 | 
			
		||||
    needs: pre-job
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -880,7 +880,7 @@ struct Parser {
 | 
			
		|||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				var.clk_en = find_single_cap(pdef.clken, cram.options, portopts, "clken");
 | 
			
		||||
				var.clk_en = find_single_cap(pdef.clken, cram.options, portopts, "clken") != nullptr;
 | 
			
		||||
			}
 | 
			
		||||
			const PortWidthDef *wdef = find_single_cap(pdef.width, cram.options, portopts, "width");
 | 
			
		||||
			if (wdef) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ struct PortVariant {
 | 
			
		|||
	PortKind kind;
 | 
			
		||||
	int clk_shared;
 | 
			
		||||
	ClkPolKind clk_pol;
 | 
			
		||||
	bool clk_en;
 | 
			
		||||
	bool clk_en = false;
 | 
			
		||||
	bool width_tied;
 | 
			
		||||
	int min_wr_wide_log2;
 | 
			
		||||
	int max_wr_wide_log2;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue