# -*- Mode: makefile -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# This Makefile is used to kick off a static rooting analysis. This Makefile is
# NOT intended for use as part of the standard Mozilla build. Instead, this
# Makefile will use $PATH to subvert compiler invocations to add in the sixgill
# plugin, and then do a regular build of whatever portion of the tree you are
# analyzing. The plugins will dump out several xdb database files. Various
# analysis scripts, written in JS, will run over those database files to
# produce the final analysis output.

DEPTH		= @DEPTH@
topsrcdir	= @top_srcdir@
srcdir		= @srcdir@

include $(DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk

VPATH += $(srcdir)

# Tree to build and analyze, defaulting to the current tree
TARGET_JSOBJDIR ?= $(MOZ_BUILD_ROOT)

# Path to a JS binary to use to run the analysis. You really want this to be an
# optimized build.
JS ?= $(MOZ_BUILD_ROOT)/shell/js

# Path to an xgill checkout containing the GCC plugin, xdb-processing binaries,
# and compiler wrapper scripts used to automatically integrate into an existing
# build system.
SIXGILL ?= @SIXGILL_PATH@

# Path to the JS scripts that will perform the analysis, defaulting to the same
# place as this Makefile.in, which is probably what you want.
ANALYSIS_SCRIPT_DIR ?= $(srcdir)

# Number of simultanous analyzeRoots.js scripts to run.
JOBS ?= 6

all : rootingHazards.txt allFunctions.txt

CALL_JS := time env PATH=$$PATH:$(SIXGILL)/bin XDB=$(SIXGILL)/bin/xdb.so $(JS) 

src_body.xdb src_comp.xdb: run_complete
	@echo Started compilation at $$(date)
	$(ANALYSIS_SCRIPT_DIR)/run_complete --foreground --build-root=$(TARGET_JSOBJDIR) --work-dir=work -b $(SIXGILL)/bin $(shell pwd)
	@echo Finished compilation at $$(date)

callgraph.txt: src_body.xdb src_comp.xdb computeCallgraph.js
	@echo Started computation of $@ at $$(date)
	$(CALL_JS) $(ANALYSIS_SCRIPT_DIR)/computeCallgraph.js > $@.tmp
	mv $@.tmp $@
	@echo Finished computation of $@ at $$(date)

gcFunctions.txt: callgraph.txt computeGCFunctions.js annotations.js
	@echo Started computation of $@ at $$(date)
	$(CALL_JS) $(ANALYSIS_SCRIPT_DIR)/computeGCFunctions.js ./callgraph.txt > $@.tmp
	mv $@.tmp $@
	@echo Finished computation of $@ at $$(date)

gcFunctions.lst: gcFunctions.txt
	perl -lne 'print $$1 if /^GC Function: (.*)/' gcFunctions.txt > $@

suppressedFunctions.lst: gcFunctions.txt
	perl -lne 'print $$1 if /^Suppressed Function: (.*)/' gcFunctions.txt > $@

gcTypes.txt: src_comp.xdb computeGCTypes.js annotations.js
	@echo Started computation of $@ at $$(date)
	$(CALL_JS) $(ANALYSIS_SCRIPT_DIR)/computeGCTypes.js > $@.tmp
	mv $@.tmp $@
	@echo Finished computation of $@ at $$(date)

allFunctions.txt: src_body.xdb
	@echo Started computation of $@ at $$(date)
	time $(SIXGILL)/bin/xdbkeys $^ > $@.tmp
	mv $@.tmp $@
	@echo Finished computation of $@ at $$(date)

rootingHazards.txt: gcFunctions.lst suppressedFunctions.lst gcTypes.txt analyzeRoots.js annotations.js gen-hazards.sh
	@echo Started computation of $@ at $$(date)
	time env JS=$(JS) ANALYZE="$(ANALYSIS_SCRIPT_DIR)/analyzeRoots.js" SIXGILL="$(SIXGILL)" "$(ANALYSIS_SCRIPT_DIR)/gen-hazards.sh" $(JOBS) > $@.tmp
	mv $@.tmp $@
	@echo Finished computation of $@ at $$(date)
