| # Copyright 2020-2022 F4PGA 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. | 
 | # | 
 | # SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 | PLUGIN_LIST := fasm xdc params sdc ql-iob design_introspection integrateinv ql-qlf systemverilog uhdm dsp-ff | 
 | PLUGINS := $(foreach plugin,$(PLUGIN_LIST),$(plugin).so) | 
 | PLUGINS_INSTALL := $(foreach plugin,$(PLUGIN_LIST),install_$(plugin)) | 
 | PLUGINS_CLEAN := $(foreach plugin,$(PLUGIN_LIST),clean_$(plugin)) | 
 | PLUGINS_TEST := $(foreach plugin,$(PLUGIN_LIST),test_$(plugin)) | 
 |  | 
 | .PHONY: all | 
 | all: plugins | 
 |  | 
 | TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) | 
 | REQUIREMENTS_FILE ?= requirements.txt | 
 | ENVIRONMENT_FILE ?= environment.yml | 
 |  | 
 | -include third_party/make-env/conda.mk | 
 |  | 
 | define install_plugin = | 
 | .PHONY: $(1).so | 
 | $(1).so: | 
 | 	$$(MAKE) -C $(1)-plugin $$@ | 
 |  | 
 | .PHONY: install_$(1) | 
 | install_$(1): | 
 | 	$$(MAKE) -C $(1)-plugin install | 
 |  | 
 | .PHONY: clean_$(1) | 
 | clean_$(1): | 
 | 	$$(MAKE) -C $(1)-plugin clean | 
 |  | 
 | .PHONY: test_$(1) | 
 | test_$(1): | 
 | 	@$$(MAKE) --no-print-directory -C $(1)-plugin test | 
 | endef | 
 |  | 
 | $(foreach plugin,$(PLUGIN_LIST),$(eval $(call install_plugin,$(plugin)))) | 
 |  | 
 | pmgen.py: | 
 | 	wget -nc -O $@ https://raw.githubusercontent.com/YosysHQ/yosys/master/passes/pmgen/pmgen.py | 
 |  | 
 | .PHONY: plugins | 
 | plugins: $(PLUGINS) | 
 |  | 
 | .PHONY: install | 
 | install: $(PLUGINS_INSTALL) | 
 |  | 
 | .PHONY: test | 
 | test: $(PLUGINS_TEST) | 
 |  | 
 | .PHONY: plugins_clean | 
 | plugins_clean: $(PLUGINS_CLEAN) | 
 |  | 
 | .PHONY: clean | 
 | clean:: plugins_clean | 
 | 	rm -rf pmgen.py | 
 |  | 
 | CLANG_FORMAT ?= clang-format-8 | 
 | .PHONY: format | 
 | format: | 
 | 	find . \( -name "*.h" -o -name "*.cc" \) -and -not -path '*/third_party/*' -print0 | xargs -0 -P $$(nproc) ${CLANG_FORMAT} -style=file -i | 
 |  | 
 | VERIBLE_FORMAT ?= verible-verilog-format | 
 | .PHONY: format-verilog | 
 | format-verilog: | 
 | 	find */tests \( -name "*.v" -o -name "*.sv" \) -and -not -path '*/third_party/*' -print0 | xargs -0 $(VERIBLE_FORMAT) --inplace |