diff --git a/prism/Makefile b/prism/Makefile index 919255c2..c57d252f 100644 --- a/prism/Makefile +++ b/prism/Makefile @@ -296,9 +296,9 @@ JAVA_JNI_H_DIR = $(shell \ JAVA_JNI_MD_H_DIR = $(shell (ls "$(JAVA_JNI_H_DIR)"/jni_md.h "$(JAVA_JNI_H_DIR)"/*/jni_md.h | head -n 1 | sed 's/\/jni_md.h//') 2>/dev/null) JAVA_INCLUDES = -I $(JAVA_JNI_H_DIR) -I $(JAVA_JNI_MD_H_DIR) -######################### -# Main part of Makefile # -######################### +########################################## +# Main part of Makefile: Compiling PRISM # +########################################## MAKE_DIRS = dd jdd odd dv prism mtbdd sparse hybrid parser settings userinterface pepa/compiler simulator jltl2ba jltl2dstar explicit pta param strat automata common cex @@ -313,6 +313,7 @@ default: all all: cuddpackage extpackages prism +# Build our customised version of CUDD cuddpackage: checks @if [ "$(CUDD_DIR)" = "" ]; then echo "Error: Cannot find CUDD"; exit 1; fi @if [ ! -d "$(CUDD_DIR)" ]; then echo "Error: Cannot find CUDD"; exit 1; fi @@ -325,14 +326,14 @@ cuddpackage: checks echo Skipping cudd make since it is a symlink...; \ fi) -# use this to force build of cudd (even if dir is just a symlink) +# Use this to force a build of CUDD, even if dir is just a symlink cuddpackageforce: checks @echo Making cudd ...; \ cd $(CUDD_DIR) && \ $(MAKE) C="$(C)" CC="$(C)" CPP="$(CPP)" \ XCFLAGS="$(CUDD_XCFLAGS)"; -# use this to force a rebuild (with javacc) of the main parser +# Use this to force a rebuild (with javacc) of the main parser parser: @echo Making parser ...; \ cd src/parser && \ @@ -344,6 +345,7 @@ parser: JAVACC="$(JAVACC)" \ CLASSPATHSEP="$(CLASSPATHSEP)" +# Build various external libraries needed by PRISM extpackages: checks @for ext in $(EXT_PACKAGES); do \ echo Making $$ext ...; \ @@ -368,8 +370,11 @@ extpackages: checks ) || exit 1; \ done +# Compile main PRISM code +# (we also do some preparatory checks, and build launch scripts afterwards) prism: checks make_dirs bin_scripts +# Compile each (top-level) source directory separately make_dirs: @mkdir -p bin classes obj/dd obj/jdd obj/odd obj/dv obj/prism obj/mtbdd obj/sparse obj/hybrid obj/simulator @for dir in $(MAKE_DIRS); do \ @@ -411,11 +416,87 @@ make_dirs: (dos2unix include/jni/*.h) \ fi; -# Run a single test case +# Copy/modify the launch scripts and put in the bin directory +bin_scripts: + @for target in $(BIN_TARGETS); do \ + target_trunc=`echo $$target | sed 's/\.[^.]*$$//'` && \ + echo Copying "$(SRC_DIR)/bin/$$target -> bin/$$target_trunc" && \ + cp $(SRC_DIR)/bin/$$target bin/$$target_trunc; \ + done; + @echo Copying "$(OBJ_DIR)/prism/ngprism$(EXE) -> bin/ngprism$(EXE)" && \ + cp $(OBJ_DIR)/prism/ngprism$(EXE) bin/ngprism$(EXE) + @./install.sh silent + +# Some checks to make sure that the main settings are valid +checks: + @(if [ "$(OSTYPE)" != "linux" -a "$(OSTYPE)" != "solaris" -a "$(OSTYPE)" != "cygwin" -a "$(OSTYPE)" != "darwin" ]; then \ + echo "\033[33mTo compile PRISM, the environment variable OSTYPE"; \ + echo "must be set to one of: linux, solaris, cygwin or darwin,"; \ + echo "depending on which operating system you are using."; \ + echo "This is not the case on your system. Please specify"; \ + echo "the value of OSTYPE manually to make, e.g.:"; \ + echo; \ + echo " make OSTYPE=linux"; \ + echo; \ + echo "Alternatively, if you wish, you can set the environment"; \ + echo "variable yourself (using setenv or export) or you"; \ + echo "can edit the value of OSTYPE directly in the Makefile."; \ + echo "\033[0m"; \ + exit 1; \ + fi; \ + if [ "$(JAVA_DIR)" = "" ]; then \ + echo "\033[33mPRISM was unable to find the directory which contains"; \ + echo "your Java distribution. Please specify this manually to"; \ + echo "make, as in these examples:"; \ + echo; \ + echo " make JAVA_DIR=/usr/java/j2sdk1.4.2"; \ + echo " make JAVA_DIR=\"/cygdrive/c/Program Files/Java/jdk1.4.2\""; \ + echo; \ + echo "See the PRISM manual for further information."; \ + echo; \ + echo "Alternatively, if you wish, you can set the environment"; \ + echo "variable yourself (using setenv or export) or you"; \ + echo "can edit the value of JAVA_DIR directly in the Makefile."; \ + echo "\033[0m"; \ + exit 1; \ + fi; \ + if [ ! -d "$(JAVA_DIR)" ]; then \ + echo "\033[33mJava directory \"$(JAVA_DIR)\" does not exist."; \ + echo "\033[0m"; \ + exit 1; \ + fi; \ + if [ ! -f "$(JAVA_JNI_H_DIR)"/jni.h ]; then \ + echo "\033[33mCould not locate JNI header jni.h within \"$(JAVA_DIR)\"."; \ + echo "You may need to set JAVA_DIR by hand. See the PRISM manual for details."; \ + echo "\033[0m"; \ + exit 1; \ + fi; \ + if [ ! -f "$(JAVA_JNI_MD_H_DIR)"/jni_md.h ]; then \ + echo "\033[33mCould not locate JNI header jni_md.h within \"$(JAVA_DIR)\"."; \ + echo "You may need to set JAVA_DIR by hand. See the PRISM manual for details."; \ + echo "\033[0m"; \ + exit 1; \ + fi; \ + echo "VERSION: $(VERSION)"; \ + echo "OSTYPE/ARCH: $(OSTYPE) $(ARCH)"; \ + echo "JAVA_DIR: $(JAVA_DIR)"; \ + echo "JAVA_DIR_BACKUP: $(JAVA_DIR_BACKUP)"; \ + echo "JAVAC: "`which $(JAVAC)` \ + ) + +# Misc: count the number of lines of code +count_loc: + find $(SRC_DIR) -name '*.java' -o -name '*.cc' | xargs wc -l + +########### +# Testing # +########### + +# Run a single test case from the test suite (useful quick check that the build was ok) test: bin/prism ../prism-tests/functionality/verify/dtmcs/dtmc_pctl.pm ../prism-tests/functionality/verify/dtmcs/dtmc_pctl.pm.props -prop 2 -test -# Run all tests (in ../prism-tests and ./tests) +# Run all tests from the test suite (in ../prism-tests and ./tests) # Optionally, extra arguments for prism-auto are picked up via variable TESTS_ARGS tests: testslocal @if [ -d ../prism-tests ]; then \ @@ -449,15 +530,9 @@ testsfull: --skip-export-runs --skip-duplicate-runs --test-all -a all-engines.args --timeout 1m \ -p "$(PWD)"/bin/prism --nailgun $(TESTS_ARGS); -bin_scripts: - @for target in $(BIN_TARGETS); do \ - target_trunc=`echo $$target | sed 's/\.[^.]*$$//'` && \ - echo Copying "$(SRC_DIR)/bin/$$target -> bin/$$target_trunc" && \ - cp $(SRC_DIR)/bin/$$target bin/$$target_trunc; \ - done; - @echo Copying "$(OBJ_DIR)/prism/ngprism$(EXE) -> bin/ngprism$(EXE)" && \ - cp $(OBJ_DIR)/prism/ngprism$(EXE) bin/ngprism$(EXE) - @./install.sh silent +########################## +# Building distributions # +########################## # Unless VERSION has been passed in (as VERSION=xxx), # extract version number from Java code using printversion @@ -557,14 +632,18 @@ tarcf: echo Building tar file "../"$$TARCF_DIR".tar.gz" && \ (cd ..; tar cfz $$TARCF_DIR".tar.gz" $$TARCF_DIR) -count_loc: - find $(SRC_DIR) -name '*.java' -o -name '*.cc' | xargs wc -l +# Build Javadoc (and put in javadoc directory) PRISM_CLASSPATH = "$(CLASSES_DIR)$(CLASSPATHSEP)$(LIB_DIR)/*" javadoc: @JAVADOC_DIRS=`echo $(MAKE_DIRS) | sed 's/\//./g' | sed 's/ /:/g'` && \mkdir -p javadoc; javadoc $(JFLAGS) -d javadoc -overview $(SRC_DIR)/overview.html -sourcepath $(SRC_DIR) -classpath $(SRC_DIR)$(CLASSPATHSEP)$(PRISM_CLASSPATH) -subpackages $$JAVADOC_DIRS -exclude parser +############### +# Cleaning up # +############### + +# Clean main PRISM build (not CUDD or external libs) clean: checks @(for dir in $(MAKE_DIRS); do \ echo Cleaning src/$$dir ...; \ @@ -580,6 +659,7 @@ clean: checks celan: clean +# Clean PRISM + CUDD and external libs clean_all: checks clean_cudd clean_ext clean clean_cudd: @@ -593,6 +673,7 @@ clean_ext: || exit 1; \ done ) +# Clear individual directories (sometimes useful) clean_dd: checks @(cd src/dd && $(MAKE) -s SRC_DIR="$(SRC_DIR)" CLASSES_DIR="$(CLASSES_DIR)" OBJ_DIR="$(OBJ_DIR)" LIB_DIR="$(LIB_DIR)" EXE="$(EXE)" LIBPREFIX="$(LIBPREFIX)" LIBSUFFIX="$(LIBSUFFIX)" clean) clean_jdd: checks @@ -628,60 +709,4 @@ clean_param: checks clean_strat: checks @(cd src/strat && $(MAKE) -s SRC_DIR="$(SRC_DIR)" CLASSES_DIR="$(CLASSES_DIR)" OBJ_DIR="$(OBJ_DIR)" LIB_DIR="$(LIB_DIR)" EXE="$(EXE)" LIBPREFIX="$(LIBPREFIX)" LIBSUFFIX="$(LIBSUFFIX)" clean) -checks: - @(if [ "$(OSTYPE)" != "linux" -a "$(OSTYPE)" != "solaris" -a "$(OSTYPE)" != "cygwin" -a "$(OSTYPE)" != "darwin" ]; then \ - echo "\033[33mTo compile PRISM, the environment variable OSTYPE"; \ - echo "must be set to one of: linux, solaris, cygwin or darwin,"; \ - echo "depending on which operating system you are using."; \ - echo "This is not the case on your system. Please specify"; \ - echo "the value of OSTYPE manually to make, e.g.:"; \ - echo; \ - echo " make OSTYPE=linux"; \ - echo; \ - echo "Alternatively, if you wish, you can set the environment"; \ - echo "variable yourself (using setenv or export) or you"; \ - echo "can edit the value of OSTYPE directly in the Makefile."; \ - echo "\033[0m"; \ - exit 1; \ - fi; \ - if [ "$(JAVA_DIR)" = "" ]; then \ - echo "\033[33mPRISM was unable to find the directory which contains"; \ - echo "your Java distribution. Please specify this manually to"; \ - echo "make, as in these examples:"; \ - echo; \ - echo " make JAVA_DIR=/usr/java/j2sdk1.4.2"; \ - echo " make JAVA_DIR=\"/cygdrive/c/Program Files/Java/jdk1.4.2\""; \ - echo; \ - echo "See the PRISM manual for further information."; \ - echo; \ - echo "Alternatively, if you wish, you can set the environment"; \ - echo "variable yourself (using setenv or export) or you"; \ - echo "can edit the value of JAVA_DIR directly in the Makefile."; \ - echo "\033[0m"; \ - exit 1; \ - fi; \ - if [ ! -d "$(JAVA_DIR)" ]; then \ - echo "\033[33mJava directory \"$(JAVA_DIR)\" does not exist."; \ - echo "\033[0m"; \ - exit 1; \ - fi; \ - if [ ! -f "$(JAVA_JNI_H_DIR)"/jni.h ]; then \ - echo "\033[33mCould not locate JNI header jni.h within \"$(JAVA_DIR)\"."; \ - echo "You may need to set JAVA_DIR by hand. See the PRISM manual for details."; \ - echo "\033[0m"; \ - exit 1; \ - fi; \ - if [ ! -f "$(JAVA_JNI_MD_H_DIR)"/jni_md.h ]; then \ - echo "\033[33mCould not locate JNI header jni_md.h within \"$(JAVA_DIR)\"."; \ - echo "You may need to set JAVA_DIR by hand. See the PRISM manual for details."; \ - echo "\033[0m"; \ - exit 1; \ - fi; \ - echo "VERSION: $(VERSION)"; \ - echo "OSTYPE/ARCH: $(OSTYPE) $(ARCH)"; \ - echo "JAVA_DIR: $(JAVA_DIR)"; \ - echo "JAVA_DIR_BACKUP: $(JAVA_DIR_BACKUP)"; \ - echo "JAVAC: "`which $(JAVAC)` \ - ) - #################################################