108 lines
2.9 KiB
Makefile
108 lines
2.9 KiB
Makefile
SBT ?= sbt
|
|
SBT_FLAGS ?= -Dsbt.log.noformat=true
|
|
MKDIR ?= mkdir -p
|
|
CURL ?= curl -L
|
|
MILL_BIN ?= $(HOME)/bin/mill
|
|
MILL ?= $(MILL_BIN) --color false
|
|
MILL_REMOTE_RELEASE ?= https://github.com/lihaoyi/mill/releases/download/0.3.5/0.3.5
|
|
|
|
# Fetch mill (if we don't have it).
|
|
$(MILL_BIN):
|
|
$(MKDIR) $(dir $@)
|
|
@echo $(CURL) --silent --output $@.curl --write-out "%{http_code}" $(MILL_REMOTE_RELEASE)
|
|
STATUSCODE=$(shell $(CURL) --silent --output $@.curl --write-out "%{http_code}" $(MILL_REMOTE_RELEASE)) && \
|
|
if test $$STATUSCODE -eq 200; then \
|
|
mv $@.curl $@ && chmod +x $@ ;\
|
|
else \
|
|
echo "Can't fetch $(MILL_REMOTE_RELEASE)" && cat $@.curl && echo ;\
|
|
false ;\
|
|
fi
|
|
|
|
mill-tools: $(MILL_BIN)
|
|
|
|
CHISEL_VERSION = $(shell "$(SBT)" $(SBT_FLAGS) "show version" | tail -n 1 | cut -d ' ' -f 2)
|
|
|
|
#$(info Build Chisel $(CHISEL_VERSION))
|
|
|
|
# The TEST_OUTPUT_DIR will be rm -rf'ed when "make clean"
|
|
TEST_OUTPUT_DIR ?= ./test_run_dur
|
|
RM_DIRS := $(TEST_OUTPUT_DIR)
|
|
|
|
.PHONY: smoke publish-local pubishLocal check clean jenkins-build coverage scaladoc test compile \
|
|
mill.build mill.test mill.publishLocal mill.build.all mill.test.all mill.publishLocal.all mill-tools
|
|
|
|
default: publishLocal
|
|
|
|
smoke compile:
|
|
$(SBT) $(SBT_FLAGS) compile
|
|
|
|
publish-local publishLocal:
|
|
$(SBT) $(SBT_FLAGS) publishLocal
|
|
|
|
test:
|
|
$(SBT) $(SBT_FLAGS) test
|
|
|
|
coverage:
|
|
$(SBT) $(SBT_FLAGS) coverage test
|
|
$(SBT) $(SBT_FLAGS) coverageReport coverageAggregate
|
|
|
|
clean:
|
|
$(SBT) $(SBT_FLAGS) clean
|
|
ifneq (,$(CLEAN_DIRS))
|
|
for dir in $(CLEAN_DIRS); do $(MAKE) -C $$dir clean; done
|
|
endif
|
|
ifneq (,$(RM_DIRS))
|
|
$(RM) -r $(RM_DIRS)
|
|
endif
|
|
|
|
scaladoc:
|
|
$(SBT) $(SBT_FLAGS) unidoc
|
|
|
|
site:
|
|
$(SBT) $(SBT_FLAGS) make-site
|
|
|
|
# Start off clean, then run tests for all supported configurations, and publish those versions of the code.
|
|
# Then run coverage and style tests (for developer's use).
|
|
# Don't publish the coverage test code since it contains hooks/references to the coverage test package
|
|
# and we don't want code with those dependencies published.
|
|
# We need to run the coverage tests last, since Jenkins will fail the build if it can't find their results.
|
|
jenkins-build: clean
|
|
$(SBT) $(SBT_FLAGS) test
|
|
$(SBT) $(SBT_FLAGS) clean publishLocal
|
|
$(SBT) $(SBT_FLAGS) coverage test
|
|
$(SBT) $(SBT_FLAGS) coverageReport
|
|
|
|
# Compile and package jar
|
|
mill.build: mill-tools
|
|
$(MILL) chisel3.jar
|
|
|
|
# Compile and test
|
|
mill.test: mill-tools
|
|
$(MILL) chisel3.test
|
|
|
|
# Build and publish jar
|
|
mill.publishLocal: mill-tools
|
|
$(MILL) chisel3.publishLocal
|
|
|
|
# Compile and package all jar
|
|
mill.build.all: mill-tools
|
|
$(MILL) chisel3[_].jar
|
|
|
|
# Compile and test
|
|
mill.test.all: mill-tools
|
|
$(MILL) chisel3[_].test
|
|
|
|
# Build and publish jar
|
|
mill.publishLocal.all: mill-tools
|
|
$(MILL) chisel3[_].publishLocal
|
|
|
|
# Remove all generated code.
|
|
# Until "mill clean" makes it into a release.
|
|
mill.clean:
|
|
$(RM) -rf out
|
|
|
|
# The "last-resort" rule.
|
|
# We assume the target is something like "+clean".
|
|
%::
|
|
$(SBT) $(SBT_FLAGS) $@
|