diff --git a/make/models b/make/models index 256e4b7821..83b67ca7c0 100644 --- a/make/models +++ b/make/models @@ -2,17 +2,21 @@ # Models (to be passed through stanc) ## MODEL_HEADER := $(STAN)src/stan/model/model_header.hpp +MODEL_PCH := $(MODEL_HEADER:.hpp=.hpp.gch) CMDSTAN_MAIN := src/cmdstan/main.cpp +$(MODEL_PCH) : $(MODEL_HEADER) + @echo 'Compiling pre-compiled header' + $(COMPILE.cc) -O$O $(MODEL_HEADER) -o $@ .PRECIOUS: %.hpp %.o -$(patsubst %.stan,%,$(wildcard $(addsuffix .stan,$(MAKECMDGOALS)))) : %$(EXE) : %.hpp %.stan bin/stanc$(EXE) bin/stansummary$(EXE) bin/diagnose$(EXE) $(LIBCVODES) +$(patsubst %.stan,%,$(wildcard $(addsuffix .stan,$(MAKECMDGOALS)))) : %$(EXE) : %.hpp %.stan bin/stanc$(EXE) bin/stansummary$(EXE) bin/diagnose$(EXE) $(LIBCVODES) $(MODEL_PCH) @echo '' @echo '--- Linking C++ model ---' ifneq (,$(findstring allow_undefined,$(STANCFLAGS))) - $(LINK.cc) -O$O $(OUTPUT_OPTION) $(CMDSTAN_MAIN) -include $< -include $(USER_HEADER) $(LIBCVODES) + $(LINK.cc) -include-pch $(MODEL_PCH) -O$O $(OUTPUT_OPTION) $(CMDSTAN_MAIN) -include $< -include $(USER_HEADER) $(LIBCVODES) else - $(LINK.cc) -O$O $(OUTPUT_OPTION) $(CMDSTAN_MAIN) -include $< $(LIBCVODES) + $(LINK.cc) -include-pch $(MODEL_PCH) -O$O $(OUTPUT_OPTION) $(CMDSTAN_MAIN) -include $< $(LIBCVODES) endif .PRECIOUS: %.hpp @@ -20,4 +24,3 @@ endif @echo '' @echo '--- Translating Stan model to C++ code ---' $(WINE) bin$(PATH_SEPARATOR)stanc$(EXE) $(STANCFLAGS) $< --o=$@ - diff --git a/makefile b/makefile index 34899786f5..6a8b67daed 100644 --- a/makefile +++ b/makefile @@ -249,6 +249,7 @@ clean-manual: clean-all: clean clean-libraries $(RM) -r bin + $(RM) $(STAN)src/stan/model/model_header.hpp.gch ## # Submodule related tasks