aboutsummaryrefslogtreecommitdiff
path: root/reproduce/analysis/make
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2019-10-01 16:17:59 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2019-10-01 16:23:39 +0100
commit7caa2845304c40540a336f840b3ca468bf6c8697 (patch)
tree2ee7942a848f6880e5e2f9c2252e365bc20b7e65 /reproduce/analysis/make
parent6f86ba0c1f84b9c349666254c2a9716ba2058a3b (diff)
Preparation phase added before final building
In many real-world scenarios, `./project make' can really benefit from having some basic information about the data before being run. For example when quering a server. If we know how many datasets were downloaded and their general properties, it can greatly optmize the process when we are designing the solution to be run in `./project make'. Therefore with this commit, a new phase has been added to the template's design: `./project prepare'. In the raw template this is empty, because the simple analysis done in the template doesn't warrant it. But everything is ready for projects using the template to add preparation phases prior to the analysis.
Diffstat (limited to 'reproduce/analysis/make')
-rw-r--r--reproduce/analysis/make/prepare.mk35
-rw-r--r--reproduce/analysis/make/top-make.mk (renamed from reproduce/analysis/make/top.mk)0
-rw-r--r--reproduce/analysis/make/top-prepare.mk91
3 files changed, 126 insertions, 0 deletions
diff --git a/reproduce/analysis/make/prepare.mk b/reproduce/analysis/make/prepare.mk
new file mode 100644
index 0000000..3e41fa9
--- /dev/null
+++ b/reproduce/analysis/make/prepare.mk
@@ -0,0 +1,35 @@
+# Basic preparations, called by `./project prepare'.
+#
+# Copyright (C) 2019 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+#
+# This Makefile is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This Makefile is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details. See <http://www.gnu.org/licenses/>.
+
+
+
+
+
+# Final-target
+#
+# Without this file, `./project make' won't work.
+$(BDIR)/software/preparation-done.txt:
+
+ # If you need to add preparations define targets above to do the
+ # preparations. Recall that before this file, `top-prepare.mk'
+ # loads `initialize.mk' and `download.mk', so you can safely assume
+ # everything that is defined there in this Makefile.
+ #
+ # TIP: the targets can actually be automatically generated
+ # Makefiles that are used by `./project make'. They can include
+ # variables, or actual rules. Just make sure that those Makefiles
+ # aren't written in the source directory! Even though they are
+ # Makefiles, they are automatically built, so they should be
+ # somewhere under $(BDIR).
+ @touch $@
diff --git a/reproduce/analysis/make/top.mk b/reproduce/analysis/make/top-make.mk
index 7d20800..7d20800 100644
--- a/reproduce/analysis/make/top.mk
+++ b/reproduce/analysis/make/top-make.mk
diff --git a/reproduce/analysis/make/top-prepare.mk b/reproduce/analysis/make/top-prepare.mk
new file mode 100644
index 0000000..3353638
--- /dev/null
+++ b/reproduce/analysis/make/top-prepare.mk
@@ -0,0 +1,91 @@
+# Do basic preparations to optimize the project's running.
+#
+# NOTE: This file is very similar to `top-make.mk', so the large comments
+# are not included here. Please see that file for thorough comments on each
+# step.
+#
+# Copyright (C) 2019 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+#
+# This Makefile is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This Makefile is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# A copy of the GNU General Public License is available at
+# <http://www.gnu.org/licenses/>.
+
+
+
+
+
+# Load the local configuration (created after running
+# `./project configure').
+include reproduce/software/config/installation/LOCAL.mk
+
+
+
+
+
+# Ultimate target of this project
+# -------------------------------
+#
+# See `top-make.mk' for complete explanation.
+ifeq (x$(reproducible_paper_group_name),x$(GROUP-NAME))
+all: $(BDIR)/software/preparation-done.txt
+ @echo "";
+ echo "----------------"
+ echo "Project preparation has been completed without any errors."
+ echo ""
+ echo "Please run the following command to start building the project."
+ echo "(Replace '8' with the number of CPU threads on your system)"
+ echo ""
+ if [ "x$(GROUP-NAME)" = x ]; then
+ echo " $$ ./project make"
+ else
+ echo " $$ ./project make --group=$(GROUP-NAME) -j8"
+ fi
+ echo ""
+else
+all:
+ @if [ "x$(GROUP-NAME)" = x ]; then
+ echo "Project is NOT configured for groups, please run"
+ echo " $$ ./project prepare"
+ else
+ echo "Project is configured for groups, please run"
+ echo " $$ ./project prepare --group=$(GROUP-NAME) -j8"
+ fi
+endif
+
+
+
+
+
+# Define source Makefiles
+# -----------------------
+#
+# See `top-make.mk' for complete explanation.
+#
+# To ensure that `prepare' and `make' have the same basic definitions and
+# environment and that all `downloads' are managed in one place, both
+# `./project prepare' and `./project make' will first read `initialize.mk'
+# and `downloads.mk'.
+makesrc = initialize \
+ download \
+ prepare
+
+
+
+
+
+# Include all analysis Makefiles
+# ------------------------------
+#
+# See `top-make.mk' for complete explanation.
+include reproduce/analysis/config/*.mk
+include reproduce/software/config/installation/versions.mk
+include $(foreach s,$(makesrc), reproduce/analysis/make/$(s).mk)