mirror of
https://github.com/Haskell-Things/ImplicitCAD.git
synced 2024-11-04 01:26:48 +03:00
142 lines
5.4 KiB
Plaintext
142 lines
5.4 KiB
Plaintext
# ImplicitCAD Makefile. Build and test Implicitcad.
|
|
|
|
# This is the Makefile for when you are running a version of cabal-install less than version 1.24.
|
|
|
|
## Locations of binaries used when running tests, or generating the images to go along with our README.md.
|
|
# The location of stl2ps, from stltools, available from https://github.com/rsmith-nl/stltools/tree/develop
|
|
stl2ps=/disk4/faikvm.com/stltools/stltools/stl2ps.py
|
|
# The location of convert, from imagemagick
|
|
convert=convert
|
|
# The location of GHC, used to compile .hs examples.
|
|
GHC=ghc
|
|
# The location of the created extopenscad binary, for running shell based test cases.
|
|
EXTOPENSCAD=dist/build/extopenscad/extopenscad
|
|
# The location of the implicitsnap binary, which listens for requests via http. The backend of the website.
|
|
IMPLICITSNAP=dist/build/implicitsnap/implicitsnap
|
|
# The location of the benchmark binary, for benchmarking some implicitcad internals.
|
|
BENCHMARK=dist/build/Benchmark/Benchmark
|
|
# The location of the parser benchmark binary, specifically for benchmarking implicitcad's parser.
|
|
PARSERBENCH=dist/build/parser-bench/parser-bench
|
|
# The location of the created test binary, for running haskell test cases.
|
|
TESTSUITE=dist/build/test-implicit/test-implicit
|
|
# The location of it's source.
|
|
TESTFILES=$(shell find tests/ -name '*.hs')
|
|
# The location of the documentation generator. for documenting (some of) the extopenscad language.
|
|
DOCGEN=dist/build/docgen/docgen
|
|
|
|
## Options used when calling ImplicitCAD. for testing, and for image generation.
|
|
# Enable multiple CPU usage.
|
|
# Use the parallel garbage collector.
|
|
# spit out some performance statistics.
|
|
RTSOPTS=+RTS -N -qg -t
|
|
# The resolution to generate objects at. FIXME: what does this mean in human terms?
|
|
RESOPTS=-r 50
|
|
|
|
SCADOPTS?=-q
|
|
|
|
# Uncomment for profiling support. Note that you will need to recompile all of the libraries, as well.
|
|
#PROFILING= --enable-profiling
|
|
|
|
## FIXME: escape this right
|
|
# Uncomment for valgrind on the examples.
|
|
#VALGRIND=valgrind --tool=cachegrind --cachegrind-out-file=$$each.cachegrind.`date +%s`
|
|
|
|
LIBFILES=$(shell find Graphics -name '*.hs')
|
|
LIBTARGET=dist/build/Graphics/Implicit.o
|
|
|
|
EXECTARGETS=$(EXTOPENSCAD) $(IMPLICITSNAP) $(BENCHMARK) $(TESTSUITE) $(PARSERBENCH) $(DOCGEN)
|
|
TARGETS=$(EXECTARGETS) $(LIBTARGET)
|
|
|
|
# Mark the below fake targets as unreal, so make will not get choked up if a file with one of these names is created.
|
|
.PHONY: build install clean distclean nukeclean docs dist examples tests
|
|
|
|
# Empty out the default suffix list, to make debugging output cleaner.
|
|
.SUFFIXES:
|
|
|
|
# Allow for us to (ab)use $$* in dependencies of rules.
|
|
.SECONDEXPANSION:
|
|
|
|
# Disable make's default builtin rules, to make debugging output cleaner.
|
|
MAKEFLAGS += --no-builtin-rules
|
|
|
|
# Build implicitcad binaries.
|
|
build: $(TARGETS)
|
|
|
|
# Install implicitcad.
|
|
install: build
|
|
cabal install
|
|
|
|
# Cleanup from using the rules in this file.
|
|
clean: Setup
|
|
rm -f Examples/*.stl
|
|
rm -f Examples/*.svg
|
|
rm -f Examples/*.ps
|
|
rm -f Examples/*.png
|
|
rm -f Examples/example[0-9][0-9]
|
|
rm -f Examples/*.hi
|
|
rm -f Examples/*.o
|
|
rm -f tests/*.stl
|
|
rm -rf docs/parser.md
|
|
rm -f $(TARGETS)
|
|
rm -rf dist/build/Graphics
|
|
rm -f dist/build/libHS*
|
|
rm -f Examples/example*.cachegrind.*
|
|
|
|
# Clean up before making a release.
|
|
distclean: clean Setup
|
|
./Setup clean
|
|
rm -f Setup Setup.hi Setup.o
|
|
rm -rf dist/
|
|
rm -f `find ./ -name *~`
|
|
rm -f `find ./ -name \#*\#`
|
|
|
|
# Destroy the current user's cabal/ghc environment.
|
|
nukeclean: distclean
|
|
rm -rf ~/.cabal/ ~/.ghc/
|
|
|
|
# Generate documentation.
|
|
docs: $(DOCGEN)
|
|
./Setup haddock
|
|
$(DOCGEN) > docs/escad.md
|
|
|
|
# Upload to hackage?
|
|
dist: $(TARGETS)
|
|
./Setup sdist
|
|
|
|
# Generate examples.
|
|
examples: $(EXTOPENSCAD)
|
|
cd Examples && for each in `find ./ -name '*scad' -type f | sort`; do { echo $$each ; ../$(EXTOPENSCAD) $(SCADOPTS) $$each $(RTSOPTS); } done
|
|
cd Examples && for each in `find ./ -name '*.hs' -type f | sort`; do { filename=$(basename "$$each"); filename="$${filename%.*}"; cd ..; $(GHC) Examples/$$filename.hs -o Examples/$$filename; cd Examples; echo $$filename; $$filename +RTS -t ; } done
|
|
|
|
# Generate images from the examples, so we can upload the images to our website.
|
|
images: examples
|
|
cd Examples && for each in `find ./ -name '*.stl' -type f | sort`; do { filename=$(basename "$$each"); filename="$${filename%.*}"; if [ -e $$filename.transform ] ; then echo ${stl2ps} $$each $$filename.ps `cat $$filename.transform`; else ${stl2ps} $$each $$filename.ps; fi; ${convert} $$filename.ps $$filename.png; } done
|
|
|
|
# Hspec parser tests.
|
|
tests: $(TESTSUITE) $(TESTFILES)
|
|
# cd tests && for each in `find ./ -name '*scad' -type f | sort`; do { ../$(EXTOPENSCAD) $$each ${RESOPTS} ${RTSOPTS}; } done
|
|
$(TESTSUITE)
|
|
|
|
# The ImplicitCAD library.
|
|
$(LIBTARGET): $(LIBFILES)
|
|
cabal build implicit
|
|
|
|
# The parser test suite, since it's source is stored in a different location than the other binaries we build:
|
|
dist/build/test-implicit/test-implicit: $(TESTFILES) Setup dist/setup-config $(LIBTARGET) $(LIBFILES)
|
|
cabal build test-implicit
|
|
|
|
# Build a binary target with cabal.
|
|
dist/build/%: programs/$$(word 2,$$(subst /, ,%)).hs Setup dist/setup-config $(LIBTARGET) $(LIBFILES)
|
|
cabal build $(word 2,$(subst /, ,$*))
|
|
|
|
# Prepare to build.
|
|
dist/setup-config: Setup implicit.cabal
|
|
cabal update
|
|
cabal install --only-dependencies --upgrade-dependencies $(PROFILING)
|
|
cabal configure --enable-tests --enable-benchmarks $(PROFILING)
|
|
|
|
# The setup command, used to perform administrative tasks (haddock, upload to hackage, clean, etc...).
|
|
Setup: Setup.*hs
|
|
$(GHC) -O2 -Wall --make Setup
|
|
|