Merge pull request #11 from mabrains/drc_actions

Adding GitHub Actions for DRC testing
diff --git a/.github/workflows/drc_gf180mcu_fd_io_test.yml b/.github/workflows/drc_gf180mcu_fd_io_test.yml
new file mode 100644
index 0000000..68b9698
--- /dev/null
+++ b/.github/workflows/drc_gf180mcu_fd_io_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: Regression testing the DRC rules against gf180mcu_fd_io
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "gf180mcu_fd_io_DRC_testing"
+  gf180mcu_fd_io_DRC_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for gf180mcu_fd_io
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC-gf180mcu_fd_io
diff --git a/.github/workflows/drc_gf180mcu_fd_ip_sram_test.yml b/.github/workflows/drc_gf180mcu_fd_ip_sram_test.yml
new file mode 100644
index 0000000..f5b0f1c
--- /dev/null
+++ b/.github/workflows/drc_gf180mcu_fd_ip_sram_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: Regression testing the DRC rules against gf180mcu_fd_ip_sram
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "DRC_gf180mcu_fd_ip_sram_testing"
+  DRC_gf180mcu_fd_ip_sram_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for gf180mcu_fd_ip_sram
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC-gf180mcu_fd_ip_sram
diff --git a/.github/workflows/drc_gf180mcu_fd_sc_mcu7t5v0_test.yml b/.github/workflows/drc_gf180mcu_fd_sc_mcu7t5v0_test.yml
new file mode 100644
index 0000000..0a93fdb
--- /dev/null
+++ b/.github/workflows/drc_gf180mcu_fd_sc_mcu7t5v0_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: Regression testing the DRC rules against gf180mcu_fd_sc_mcu7t5v0
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "DRC_gf180mcu_fd_sc_mcu7t5v0_testing"
+  DRC_gf180mcu_fd_sc_mcu7t5v0_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for gf180mcu_fd_sc_mcu7t5v0
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC-gf180mcu_fd_sc_mcu7t5v0
diff --git a/.github/workflows/drc_gf180mcu_fd_sc_mcu9t5v0_test.yml b/.github/workflows/drc_gf180mcu_fd_sc_mcu9t5v0_test.yml
new file mode 100644
index 0000000..93a36f9
--- /dev/null
+++ b/.github/workflows/drc_gf180mcu_fd_sc_mcu9t5v0_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: Regression testing the DRC rules against gf180mcu_fd_sc_mcu9t5v0
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "DRC_gf180mcu_fd_sc_mcu9t5v0_testing"
+  DRC_gf180mcu_fd_sc_mcu9t5v0_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for gf180mcu_fd_sc_mcu9t5v0
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC-gf180mcu_fd_sc_mcu9t5v0
diff --git a/.github/workflows/drc_regression_test.yml b/.github/workflows/drc_regression_test.yml
new file mode 100644
index 0000000..e1934a8
--- /dev/null
+++ b/.github/workflows/drc_regression_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: Regression testing the DRC rules
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "DRC_Regression_testing"
+  DRC_Regression_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for Regression
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC_main -j$(nproc)
diff --git a/.github/workflows/drc_switch_checking_test.yml b/.github/workflows/drc_switch_checking_test.yml
new file mode 100644
index 0000000..9c8e5a2
--- /dev/null
+++ b/.github/workflows/drc_switch_checking_test.yml
@@ -0,0 +1,66 @@
+# Copyright 2022 GlobalFoundries PDK Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This is a Github Actions for testing DRC rule deck of GF180MCU
+name: DRC Switch Checking (Rule deck arguments) test
+
+# Controls when the workflow will run
+on:
+  # Triggers the workflow on push or pull request events
+  push:
+  pull_request:
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Defines environment variables
+env:
+  PDK_ROOT: $GITHUB_WORKSPACE/rules/klayout
+  PDK: drc
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "DRC_Switch_Checking_testing"
+  DRC_Switch_Checking_testing:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+
+      # Gets python version with list of needed requirements
+      - uses: actions/setup-python@v3
+        with:
+          python-version: '3.9'
+          cache: 'pip'
+          cache-dependency-path: '**/requirements.test.txt'
+
+      # Installs requirements
+      - run: pip install -r ./rules/klayout/requirements.test.txt
+
+      # Installs Klayout verison 0.27.8
+      - name: Installing Klayout 0.27.8
+        run: |
+          wget https://www.klayout.org/downloads/Ubuntu-20/klayout_0.27.8-1_amd64.deb
+          sudo apt-get install qt5-default qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev
+          sudo dpkg -i ./klayout_0.27.8-1_amd64.deb
+          sudo apt-get install -f -y
+
+      # Runs a set of commands using the runners shell
+      - name: Testing DRC for Switch Checking
+        run: |
+          cd ./rules/klayout/drc/testing
+          make test-DRC_switch -j$(nproc)
diff --git a/rules/klayout/drc/testing/Makefile b/rules/klayout/drc/testing/Makefile
index 8f75baf..37824f1 100644
--- a/rules/klayout/drc/testing/Makefile
+++ b/rules/klayout/drc/testing/Makefile
@@ -31,18 +31,39 @@
 #=================================
 
 .ONESHELL:
-test-DRC_SC:
+test-DRC_SC : test-DRC-gf180mcu_fd_ip_sram test-DRC-gf180mcu_fd_io test-DRC-gf180mcu_fd_sc_mcu7t5v0 test-DRC-gf180mcu_fd_sc_mcu9t5v0
+	@echo "========== DRC-DRC_SC is done =========="
+
+.ONESHELL:
+test-DRC-gf180mcu_fd_ip_sram:
 	@cd $(Testing_DIR)
-	@echo "========== DRC-SC testing =========="
-	@ python3 run_sc_regression.py --path=sc_testcases/GF018_5VGreen_SRAM_1P_64x8M8WM1.gds  \
-								   --path=sc_testcases/GF018_5VGreen_SRAM_1P_128x8M8WM1.gds \
-								   --path=sc_testcases/GF018_5VGreen_SRAM_1P_256x8M8WM1.gds \
-								   --path=sc_testcases/GF018_5VGreen_SRAM_1P_512x8M8WM1.gds \
-								   --path=sc_testcases/GF018green_ipio_5p0c_75_3lm.gds      \
-								   --path=sc_testcases/GF018green_ipio_5p0c_75_4lm.gds	    \
-								   --path=sc_testcases/GF018green_ipio_5p0c_75_5lm.gds 		\
-								   --path=sc_testcases/GF018hv5v_green_sc9.gds 				\
-								   --path=sc_testcases/GF018hv5v_mcu_sc7.gds				\
+	@echo "========== DRC-gf180mcu_fd_ip_sram testing =========="
+	@ python3 run_sc_regression.py 									\
+		--path=sc_testcases/gf180mcu_fd_ip_sram__sram64x8m8wm1.gds 	\
+		--path=sc_testcases/gf180mcu_fd_ip_sram__sram128x8m8wm1.gds	\
+		--path=sc_testcases/gf180mcu_fd_ip_sram__sram256x8m8wm1.gds	\
+		--path=sc_testcases/gf180mcu_fd_ip_sram__sram512x8m8wm1.gds	
+
+.ONESHELL:
+test-DRC-gf180mcu_fd_io:
+	@cd $(Testing_DIR)
+	@echo "========== DRC-gf180mcu_fd_io testing =========="
+	@ python3 run_sc_regression.py 					\
+		--path=sc_testcases/gf180mcu_fd_io_3lm.gds	\
+		--path=sc_testcases/gf180mcu_fd_io_4lm.gds	\
+		--path=sc_testcases/gf180mcu_fd_io_5lm.gds
+
+.ONESHELL:
+test-DRC-gf180mcu_fd_sc_mcu7t5v0:
+	@cd $(Testing_DIR)
+	@echo "========== DRC-gf180mcu_fd_sc_mcu7t5v0 testing =========="
+	@ python3 run_sc_regression.py --path=sc_testcases/gf180mcu_fd_sc_mcu7t5v0.gds
+
+.ONESHELL:
+test-DRC-gf180mcu_fd_sc_mcu9t5v0:
+	@cd $(Testing_DIR)
+	@echo "========== DRC-gf180mcu_fd_sc_mcu9t5v0 testing =========="
+	@ python3 run_sc_regression.py --path=sc_testcases/gf180mcu_fd_sc_mcu9t5v0.gds
 
 #=================================
 # ----- test-DRC_regression ------
@@ -56,59 +77,66 @@
 test-DRC-foundry-Option-1:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression foundry-Option-1 =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_6kA_MIMA_SOLDER_BUMP.gds \
-							   --metal_top="6K" --mim_option="A"  --metal_level=6 --run_name="DRC-foundry-Option-1"										
+	@python3 run_regression.py 																\
+		--path=testcases/0.0.DM000013_13_1P6M_6kA_MIMA_SOLDER_BUMP.gds.gz					\
+		--metal_top="6K" --mim_option="A"  --metal_level=6 --run_name="DRC-foundry-Option-1"										
 
 .ONESHELL:
 test-DRC-foundry-Option-2:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression foundry-Option-2 =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_9kA_MIMB_WEDGE.gds \
-							   --metal_top="9K" --mim_option="B"  --metal_level=6  --run_name="DRC-foundry-Option-2"										
+	@python3 run_regression.py 																\
+		--path=testcases/0.0.DM000013_13_1P6M_9kA_MIMB_WEDGE.gds.gz							\
+		--metal_top="9K" --mim_option="B"  --metal_level=6  --run_name="DRC-foundry-Option-2"										
 
 .ONESHELL:
 test-DRC-foundry-Option-3:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression foundry-Option-3 =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds \
-							   --metal_top="11K" --mim_option="A"  --metal_level=6	--run_name="DRC-foundry-Option-3"										
+	@python3 run_regression.py 																\
+		--path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds.gz					\
+		--metal_top="11K" --mim_option="A"  --metal_level=6	--run_name="DRC-foundry-Option-3"										
 
 .ONESHELL:
 test-DRC-foundry-Option-4:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression foundry-Option-4 =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_30kA_MIMB_BALL.gds \
-							   --metal_top="30K" --mim_option="B"  --metal_level=6	--run_name="DRC-foundry-Option-4"									
+	@python3 run_regression.py 																\
+		--path=testcases/0.0.DM000013_13_1P6M_30kA_MIMB_BALL.gds.gz							\
+		--metal_top="30K" --mim_option="B"  --metal_level=6	--run_name="DRC-foundry-Option-4"									
 
 .ONESHELL:
 test-DRC-Option-A:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression Option-A =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds \
-							   --metal_top="30K" --mim_option="A"  --metal_level=3	--run_name="DRC-Option-A"										
+	@python3 run_regression.py 														\
+		--path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds.gz			\
+		--metal_top="30K" --mim_option="A"  --metal_level=3	--run_name="DRC-Option-A"										
 
 .ONESHELL:
 test-DRC-Option-B:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression Option-B =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds \
-							   --metal_top="11K" --mim_option="B"  --metal_level=4	--run_name="DRC-Option-B"			
+	@python3 run_regression.py 														\
+		--path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds.gz			\
+		--metal_top="11K" --mim_option="B"  --metal_level=4	--run_name="DRC-Option-B"			
 
 .ONESHELL:
 test-DRC-Option-C:
 	@cd $(Testing_DIR)
 	@echo "========== DRC-Regression Option-C =========="
-	@python3 run_regression.py --path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds \
-							   --path=testcases/Manual_testcases.gds						 \
-							   --path=testcases/density_testcases/Mn_4_fail.gds				 \
-							   --path=testcases/density_testcases/Mn_4_pass.gds				 \
-							   --path=testcases/density_testcases/MT30_7_fail.gds			 \
-							   --path=testcases/density_testcases/MT30_7_pass.gds			 \
-							   --path=testcases/density_testcases/MT_3_fail.gds				 \
-							   --path=testcases/density_testcases/MT_3_pass.gds				 \
-							   --path=testcases/density_testcases/PL_8_fail.gds				 \
-							   --path=testcases/density_testcases/PL_8_pass.gds				 \
-							   --metal_top="9K" --mim_option="B"  --metal_level=5	--run_name="DRC-Option-C"		
+	@python3 run_regression.py 														\
+		--path=testcases/0.0.DM000013_13_1P6M_11kA_MIMA_Gold_Bump.gds.gz			\
+		--path=testcases/Manual_testcases.gds						 				\
+		--path=testcases/density_testcases/Mn_4_fail.gds				 			\
+		--path=testcases/density_testcases/Mn_4_pass.gds				 			\
+		--path=testcases/density_testcases/MT30_7_fail.gds			 				\
+		--path=testcases/density_testcases/MT30_7_pass.gds			 				\
+		--path=testcases/density_testcases/MT_3_fail.gds				 			\
+		--path=testcases/density_testcases/MT_3_pass.gds				 			\
+		--path=testcases/density_testcases/PL_8_fail.gds				 			\
+		--path=testcases/density_testcases/PL_8_pass.gds				 			\
+		--metal_top="9K" --mim_option="B"  --metal_level=5	--run_name="DRC-Option-C"		
 
 #=================================
 # -------- test-DRC_switch -------
@@ -138,15 +166,19 @@
 # Help Target
 help:
 	@echo "\n ==== The following are some of the valid targets for this Makefile ====\n"
-	@echo "... all                        (the default if no target is provided             )"
-	@echo "... clean                      (To clean all old runs                            )"
-	@echo "... test-DRC_switch            (To run switch checking regression                )"
-	@echo "... test-DRC_SC                (To run standard cells DRC regression             )"
-	@echo "... test-DRC_main              (To run main DRC full regression                  )"
-	@echo "... test-DRC-foundry-Option-1  (To run main DRC regression using foundry-Option-1)"
-	@echo "... test-DRC-foundry-Option-2  (To run main DRC regression using foundry-Option-2)"
-	@echo "... test-DRC-foundry-Option-3  (To run main DRC regression using foundry-Option-3)"
-	@echo "... test-DRC-foundry-Option-4  (To run main DRC regression using foundry-Option-4)"
-	@echo "... test-DRC-Option-A          (To run main DRC regression using Option-A        )"
-	@echo "... test-DRC-Option-B          (To run main DRC regression using Option-B        )"
-	@echo "... test-DRC-Option-C          (To run main DRC regression using Option-C        )"
+	@echo "... all                        			(the default if no target is provided             )"
+	@echo "... clean                      			(To clean all old runs                            )"
+	@echo "... test-DRC_switch            			(To run switch checking regression                )"
+	@echo "... test-DRC_SC                			(To run standard cells DRC regression             )"
+	@echo "... test-DRC-gf180mcu_fd_ip_sram			(To run SRAM IP cells DRC regression 	          )"
+	@echo "... test-DRC-gf180mcu_fd_io				(To run I/O cells DRC regression             	  )"
+	@echo "... test-DRC-gf180mcu_fd_sc_mcu7t5v0		(To run standard cells 7 tracks DRC regression    )"
+	@echo "... test-DRC-gf180mcu_fd_sc_mcu9t5v0		(To run standard cells 9 tracks DRC regression    )"
+	@echo "... test-DRC_main              			(To run main DRC full regression                  )"
+	@echo "... test-DRC-foundry-Option-1  			(To run main DRC regression using foundry-Option-1)"
+	@echo "... test-DRC-foundry-Option-2  			(To run main DRC regression using foundry-Option-2)"
+	@echo "... test-DRC-foundry-Option-3  			(To run main DRC regression using foundry-Option-3)"
+	@echo "... test-DRC-foundry-Option-4  			(To run main DRC regression using foundry-Option-4)"
+	@echo "... test-DRC-Option-A          			(To run main DRC regression using Option-A        )"
+	@echo "... test-DRC-Option-B          			(To run main DRC regression using Option-B        )"
+	@echo "... test-DRC-Option-C          			(To run main DRC regression using Option-C        )"
diff --git a/rules/klayout/drc/testing/run_regression.py b/rules/klayout/drc/testing/run_regression.py
index 6f8741a..5582f72 100644
--- a/rules/klayout/drc/testing/run_regression.py
+++ b/rules/klayout/drc/testing/run_regression.py
@@ -100,7 +100,7 @@
             if 'logger.info("Starting GF180MCU DENSITY DRC rules.")' in line:
                 remove_if = True
             if remove_if == True:
-                if 'CHIP.area' in line or 'end ' in line and 'end #' not in line:
+                if 'CHIP.area' in line or 'end\n' in line and 'end #' not in line:
                     line = ''
             if 'GEOMETRY RULES' in line:
                 break
diff --git a/rules/klayout/drc/testing/run_sc_regression.py b/rules/klayout/drc/testing/run_sc_regression.py
index 664d39b..f08ac69 100644
--- a/rules/klayout/drc/testing/run_sc_regression.py
+++ b/rules/klayout/drc/testing/run_sc_regression.py
@@ -139,8 +139,9 @@
             os.system(f"klayout -b -r split_gds.rb -rd input={path}")
             print(f"File {path} was splitted into multiple gds files")
 
-    other_files = os.listdir('sc')
-    args["--path"] = args["--path"] + other_files
+    if os.path.exists("sc"):
+        other_files = os.listdir('sc')
+        args["--path"] = args["--path"] + other_files
 
     # Get input data for simulator
     for path in args["--path"]:
diff --git a/rules/klayout/drc/testing/run_switch_checking.py b/rules/klayout/drc/testing/run_switch_checking.py
index 73b1215..87ef89a 100644
--- a/rules/klayout/drc/testing/run_switch_checking.py
+++ b/rules/klayout/drc/testing/run_switch_checking.py
@@ -74,7 +74,7 @@
         os.system('mkdir -p {0}'.format(run_directory))
 
         log_file = run_directory + "/" + test_case + ".log"
-        os.system('python3 ../run_drc.py --path=switch_checking/switch_checking.gds {0} >> {1}'.format(switches, log_file))
+        os.system('python3 ../run_drc.py --path=switch_checking/simple_por.gds.gz {0} >> {1}'.format(switches, log_file))
 
         check_output_log(log_file, expected_result)
 
diff --git a/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram128x8m8wm1.gds b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram128x8m8wm1.gds
new file mode 100644
index 0000000..5397ff3
--- /dev/null
+++ b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram128x8m8wm1.gds
Binary files differ
diff --git a/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram256x8m8wm1.gds b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram256x8m8wm1.gds
new file mode 100644
index 0000000..7fd6339
--- /dev/null
+++ b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram256x8m8wm1.gds
Binary files differ
diff --git a/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram512x8m8wm1.gds b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram512x8m8wm1.gds
new file mode 100644
index 0000000..cd71da3
--- /dev/null
+++ b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram512x8m8wm1.gds
Binary files differ
diff --git a/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram64x8m8wm1.gds b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram64x8m8wm1.gds
new file mode 100644
index 0000000..d53a578
--- /dev/null
+++ b/rules/klayout/drc/testing/sc_testcases/gf180mcu_fd_ip_sram__sram64x8m8wm1.gds
Binary files differ
diff --git a/rules/klayout/drc/testing/switch_checking/simple_por.gds.gz b/rules/klayout/drc/testing/switch_checking/simple_por.gds.gz
new file mode 100644
index 0000000..920b37f
--- /dev/null
+++ b/rules/klayout/drc/testing/switch_checking/simple_por.gds.gz
Binary files differ
diff --git a/rules/klayout/drc/testing/switch_checking/switch_checking.gds b/rules/klayout/drc/testing/switch_checking/switch_checking.gds
deleted file mode 100644
index 025aa90..0000000
--- a/rules/klayout/drc/testing/switch_checking/switch_checking.gds
+++ /dev/null
Binary files differ
diff --git a/rules/klayout/requirements.test.txt b/rules/klayout/requirements.test.txt
new file mode 100644
index 0000000..3f6804c
--- /dev/null
+++ b/rules/klayout/requirements.test.txt
@@ -0,0 +1,4 @@
+docopt==0.6.2
+pandas==1.3.4
+sympy==1.9
+numpy==1.20.3