diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index cc14be6..371faac 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -15,6 +15,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + with: + submodules: 'true' - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub diff --git a/Dockerfile b/Dockerfile index 4a61f05..cee2ccc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,9 +12,9 @@ WORKDIR $workdir ENV user root USER $user COPY artifact/benchmarks $workdir/benchmarks -COPY artifact/pta/ $workdir/pta COPY artifact/util/ $workdir/util/ COPY artifact/run.py $workdir/ +COPY artifact/qilin.py $workdir/ COPY artifact/__init__.py $workdir/ -COPY --from=buildEnv /build/artifact/pta/Qilin-1.0-SNAPSHOT.jar $workdir/pta/ +COPY --from=buildEnv /build/artifact/Qilin-1.0-SNAPSHOT.jar $workdir/ CMD /bin/bash diff --git a/README.md b/README.md index 0a7110f..42fd5d7 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,17 @@ QiLin is introduced in our ECOOP'22 paper. You might want to cite our paper by c } ``` ## A Quick Start +### Download +This repository contains a `submodule` that contains a set of real-world ready-to-use benchmarks for QiLin. +If you want to run QiLin on these benchmarks, so please use the following command to fetch QiLin sources: +``` +$ git clone --recurse-submodules https://github.com/QiLinPTA/QiLin.git +``` + +If you have cloned QiLin in a normal way, you can use this command to download these benchmarks: +``` +$ git submodule update --init +``` ### Building QiLin with Gradle We use Gradle as the build automation tool. To build Qilin, use ``` diff --git a/artifact/qilin.py b/artifact/qilin.py index f0e71f5..721f7c5 100755 --- a/artifact/qilin.py +++ b/artifact/qilin.py @@ -14,7 +14,7 @@ runJava_cmd = 'java -Xms1g %s -cp ' + CLASSPATH + ' driver.Main %s' OPTIONMESSAGE = 'The valid OPTIONs are:\n' \ + option('-help|-h', 'print this message.') \ - + option('-jre=<[jre1.6.0_45|jre1.8.0_312]>', 'specify the version of JDK.') \ + + option('-jre=', 'specify the version of JDK.') \ + bioption('-Xmx', '\b', ' Specify the maximum size, in bytes, of the memory allocation pool.') \ + bioption('-timeout', 'seconds', 'Timeout for PTA (default value: -1 (unlimited)).') \ + option('-ptahelp', 'print help info for pointer analysis.') diff --git a/artifact/run.py b/artifact/run.py index 1c7a54a..d5e2740 100755 --- a/artifact/run.py +++ b/artifact/run.py @@ -87,6 +87,7 @@ def runPTA(analysis, bm, OPTIONSTYLE): print('old result found. skip this.') return cmd += ' > ' + outputFile + cmd += " -jre=jre1.6.0_45" print(cmd) pta.runPointsToAnalysis(cmd.split()) @@ -99,6 +100,7 @@ def runPTA(analysis, bm, OPTIONSTYLE): + option('-dump', 'dump statistics into files.') \ + option('', 'specify pointer analysis.') \ + option('', 'specify benchmark.') \ + + option('-jre=<[jre1.6.0_45|jre1.8.0_312]>', 'specify the JRE version.') \ + option('-out=', 'specify output path.') \ + option('-M', 'run Turner modularly.') \ + option('-pre', 'run pre-analysis only.') \