https://github.com/teuben/nemo
Raw File
Tip revision: d0f673bdaeabe8dffa77528c13d81063a20d29f6 authored by Peter Teuben on 03 April 2024, 01:39:10 UTC
format
Tip revision: d0f673b
Makefile.in
VERSION = NEMO V4.4 20-feb-2024 PJT
# ###############################################################################
# 	$(NEMO)/Makefile: top level Makefile for full NEMO installation
#       do not edit, it is derived from Makefile.in
# ###############################################################################

SHELL = /bin/bash
JOBS = 

#  useful for MacOSX since it can't distinguish case for most users (grmpfff)
.PHONY:  INSTALL install scripts docs nemopy


# The following subdirectories (1&2) are needed for installation, although only
# some may have been part of the tar file that was imported. 
# The 2nd set of files need to exist, and must have world write permission :-(
# They are always architecture dependant files, that never get exported and
# created during a new installation.

# these are all relative to $(NEMO)
CHECKDIR1 = data inc news tmp csh \
            man man/man1 man/man3 man/man5 man/man8 man/manl \
            demo etc adm bin lib obj \
	    local adm/install

_ASCIIDIRS_  = text bugs man/doc  $(SRC) $(USR)       # check if ASCIIDIRS can go


# absolute (derived) directories & files
CHECKDIR2 = $(NEMOBIN) $(NEMOLIB) $(NEMOOBJ) \
            $(NEMOOBJ)/bodytrans $(NEMOOBJ)/potential $(NEMOOBJ)/acc $(NEMOOBJ)/manip $(NEMOOBJ)/fit \
            $(NEMO)/py $(NEMO)/py/modules \
	    opt opt/include opt/lib opt/bin

CHECKFIL2 = $(NEMO)/adm/Usage \
	    $(NEMO)/adm/install/mknemo.log \
	    $(NEMOOBJ)/bodytrans/BTNAMES

# ###############################################################################
#  Top level sub-directories in NEMO that contain Makefiles for NEMO install.
#  Currently accepted are:
#	src 		- standard export (NEMO expects install targets)
#	usr		- user contributions (have their own install methods)
#MAKEDIRS = src usr
#MAKELIBS = corelibs dehnen
MAKEDIRS = @MAKEDIRS@
MAKELIBS = @MAKELIBS@
NEMOTARS = @NEMOTARS@
#MKNEMOS  = hdf4 hdf5 cfitsio fftw wcslib gsl - things that can be made via mknemo
MKNEMOS  = 

# ###############################################################################
# The following files/directories will be saved to a tar file
# and used in incremental export tar files (Nightly/export.csh)
# SRC is to select subsections of the whole src tree
# To get all of NEMO, choose SRC=src usr (see e.g. tarkernel below)
# --deprecated--
#
SRC = src
USR =
#
ASCIIFILES = COPYING MANIFEST NEMORC PORTING README VERSION \
	     src/Makefile \
	     configure configure.ac \
	     Makefile.in makedefs.in config.h.in \
	     nemo_start.csh.in nemo_start.sh.in \
             install-sh config.sub config.guess \
	     nemo.rc nemo_end \
	     man/tmac.an man/whatis man/Makefile 
ASCIIDIRS  = inc text data bugs csh demo \
             man/doc man/man? $(SRC) $(USR)

EXPORTA = $(ASCIIFILES) $(ASCIIDIRS)
EXPORTB = $(EXPORTA) $(NEMOBIN) $(NEMOLIB) $(NEMOOBJ)
CHKFILE = adm/chkfile

#	Some default macro names, they can be overridden by supplying them
#	on the commandline, e.g. "make tarfile /usr/moi/nemo.tar

FILE   = $(NEMO)/nemo.tar
BACKUP = $(NEMO)/nemo-fullbck.tar

#
MOTD = $(NEMO)/etc/motd
TIMESTAMP=$(NEMO)/adm/TIMESTAMP

# local NEMO enhanced installed manually by a NEMO administrator
NEMO_RC_CSH = $(NEMO)/nemo_local.csh
NEMO_RC_SH  = $(NEMO)/nemo_local.sh

#  Master site (Maryland) specific, and probably not used anywhere else
FTPDIR = /n/ftp/pub/nemo/
SFTPDIR = ssh.astro.umd.edu:$(FTPDIR)
WWWDIR = $(NEMO)/local/www
# ###############################################################################
# INSTALL:
#	----------Installation starts here------------
# make sure you're in $(NEMO) from here

# this should remain the first target in this Makefile, so a default "make" invocation goes here
# help:   install lsb

## install:   reminder on typical install steps
install:
	@echo "There is no install because NEMO is build in place. The usual procedure is"
	@echo ""
	@echo "      ./configure  ....      -- run configure, with lots of options; try --help here"
	@echo "      make build1            -- 1: postconfig  (build would do all build1..3)"
	@echo "      make build2            -- 2: libs + falcon (build2a and build2b)"
	@echo "      make build3            -- 3: bins"
	@echo "      make build4            -- 4: mknemo build reconfirmation (advanced only)"
	@echo "      make check             -- the testsuite"
	@echo "      make bench5            -- the NEMOBENCH5 benchmark"
	@echo "      source nemo_start.sh   -- after this NEMO can be used in the shell"
	@echo "                                similar ones' exist for csh and python"
	@echo ""
	@echo "Local site variations must go in nemo_local.(c)sh and ~/.nemo_local.(c)sh"
	@echo ""
	@echo "Type 'make help' to list all other targets"

.PHONY : help
## help:      This Help
help : Makefile
	@sed -n 's/^##//p' $<


lsb:
	@lsb_release -a

## help2:     show important variables in make
help2:
	@echo ""
	@echo " ### NEMO installation help menu ###"
	@echo ""
	@echo Some important environment variables to be used are:
	@echo NEMO=$(NEMO)
	@echo NEMOSITE=$(NEMOSITE)
	@echo NEMOHOST=$(NEMOHOST)
	@echo SHELL=$(SHELL)
	@echo CC=$(CC)  CFLAGS=$(CFLAGS)
	@echo FC=$(FC)  FFLAGS=$(FFLAGS)
	@echo MAKE=$(MAKE) MFLAGS=$(MFLAGS)
	@echo MKNEMOS=$(MKNEMOS)
	@echo ""
	@echo "Additional help targets: helpfind, helptar"

## pull:      GIT pull to get the latest ('mknemo -u tsf' also does this)
pull:
	@git pull

## mknemos:   optional package installs, usually in $NEMO/opt via $NEMO/local during bootstrap
mknemos:
	@echo MKNEMOS=$(MKNEMOS)
	@for mkn in $(MKNEMOS); do \
	echo mknemo $$mkn;\
	mknemo $$mkn > install_mknemo_$$mkn.log 2>&1;\
	done

## dirs:      make sure all directories and files are present before install can take place
dirs: 
	@echo Checking directory structure on `date`
	@echo By `whoami` on `hostname`
	-@for i in $(CHECKDIR1) $(ASCIIDIRS); do \
	(if [ ! -d $(NEMO)/$$i ]; then \
	    mkdir $(NEMO)/$$i; \
	    chmod a+w $(NEMO)/$$i; \
	fi); done
	-@for i in $(CHECKDIR2); do \
	(if [ ! -d $$i ]; then \
	    mkdir $$i; \
	    chmod a+w $$i; \
	fi); done
	-@for i in $(CHECKFIL2); do \
	(if [ ! -f $$i ]; then \
	    touch $$i; \
	    chmod a+w $$i; \
	fi); done
	@if [ -d $(NEMOTARS) ]; then \
	    echo 'Symlink tars'; \
	    rm tars; \
	    ln -s $(NEMOTARS) tars; \
	else \
	    echo 'No tar symlink'; \
	fi
	@if [ ! -d include ]; then \
	    ln -s inc include; \
	fi
	@if [ ! -f $(TIMESTAMP) ]; then \
            echo Updating $(TIMESTAMP) file on `date`; \
	    echo `date` `hostname` `whoami` > $(TIMESTAMP); \
            echo "`cat $(NEMO)/VERSION` `date +%m%d%H%M%y` `whoami` `date` (install)" >> $(CHKFILE); \
	else \
	    echo "TIMESTAMP exists:";\
	    ls -l $(TIMESTAMP);\
	fi
	@if [ ! -f $(MOTD) ]; then \
            echo Creating $(MOTD) file on `date`; \
            echo "***********************************************" > $(MOTD);\
            echo "Nemo Release 4 ($(VERSION)) installed: " >> $(MOTD);\
	    echo "  NEMOVER = $(NEMOVER)" >> $(MOTD); \
	    echo "  `date` on `whoami`@`hostname`" >> $(MOTD); \
            echo "***********************************************">> $(MOTD);\
	else \
	    echo "MOTD exists:";\
	    ls -l $(MOTD);\
	fi
	@if [ ! -f $(NEMO_RC_CSH) ]; then \
            echo Creating $(NEMO_RC_CSH) file on `date`; \
            echo "# place your local NEMO csh commands here" > $(NEMO_RC_CSH);\
	else \
	    echo "nemo_local.csh exists:";\
	    ls -l $(NEMO_RC_CSH);\
	fi
	@if [ ! -f $(NEMO_RC_SH) ]; then \
            echo Creating $(NEMO_RC_SH) file on `date`; \
            echo "# place your local NEMO sh commands here" > $(NEMO_RC_SH);\
	else \
	    echo "nemo_local.sh exists:";\
	    ls -l $(NEMO_RC_SH);\
	fi

	@echo "`cat VERSION` `date`" >> .version
	@if [ ! -f $(NEMOLIB)/maxsizes.h ]; then \
	    cp inc/max/maxsizes.h $(NEMOLIB)/maxsizes.h;\
	else \
	    echo "$(NEMOLIB)/maxsizes.h exists:";\
	    ls -l $(NEMOLIB)/maxsizes.h;\
	fi

	@cp text/README.local local
	@cp text/README.opt   opt
	@cp text/README.obj   obj
	@echo Done with dirs at `date`

## docs:      built htmol docs
docs:
	(cd docs/source; make html)
	@echo open docs/source/_build/html/index.html

# @todo: deprecate?
pjt:
	@if [ ! -f $(NEMOLIB)/makedefs ]; then \
	    if [ -f $(NEMO)/makedefs ]; then \
              echo Copying $(NEMO)/makedefs $(NEMOLIB);\
	      cp $(NEMO)/makedefs $(NEMOLIB); \
            else \
              echo Creating dummy  $(NEMOLIB)/makedefs;\
              touch  $(NEMOLIB)/makedefs ;\
	    fi \
	else \
	    echo "$(NEMOLIB)/makedefs exists:";\
	    ls -l $(NEMOLIB)/makedefs;\
	fi

## scripts:   install scripts
scripts:
	@echo Installing scripts on `date` 
	@echo By `whoami` on `hostname`
	(cd $(NEMO)/src/scripts; $(MAKE) install)

# The next four targets are not currently supported 
#all:	nemo_lib nemo_bin

nemo_lib:
	@echo Make all subdirectories on `date`
	@echo By `whoami` on `hostname`
	-@for i in ${MAKEDIRS}; do \
		(cd $$i; echo `date` MAKE NEMO_LIB in `pwd`; \
		$(MAKE) nemo_lib); done
	@echo NEMO is installed in $(NEMO)
	@echo all done `date`

nemo_bin:
	-@for i in ${MAKEDIRS}; do \
		(cd $$i; echo `date` MAKE NEMO_BIN in `pwd`; \
		$(MAKE) nemo_bin); done
	@echo all done `date`

nemo_src:
	-@for i in ${MAKEDIRS}; do \
	(cd $$i; $(MAKE) nemo_src); done


#
# #############################################################################
# HTML stuff
#

html:  doxygen

doxygen:
	(cd text; doxygen nemo-doxygen.cfg)

README.html: README.md
	# markdown_py -x toc readme.md > readme.html
	pandoc README.md -o README.html


# #############################################################################
# EXPORT

helptar:
	@echo "Install tar targets:"
	@echo "  % make targit"
	@echo "  % make targit0"
	@echo "  % make tarfile [FILE=$(FILE)]"
	@echo "  % make tarbackup [BACKUP=$(BACKUP)]"
	@echo "  % make purge"
	@echo "  % make ftp"
	@echo "  % make usrftp [USR=$(USR)]"
	@echo "  % make tarkernel"
	@echo "  % make tarbima"
	@echo "  % make tarorbit"
	@echo "  % make dist"
	@echo "  % make distu"
	@echo ""


# @todo warning:  VER vs. $NEMOVER
VER = `cat $(NEMO)/VERSION`
GIT1 = https://github.com/teuben/nemo/
GIT2 = https://github.com/teuben/pgplot/

targit:
	rm -rf nemo_$(VER)
	git clone $(GIT1) nemo_$(VER)
	mkdir nemo_$(VER)/local
	git clone $(GIT2) nemo_$(VER)/local/pgplot
	echo WARNING: snapshot gitless export `date` >> nemo_$(VER)/VERSION
	rm -rf nemo_$(VER)/.git nemo_$(VER)/local/pgplot/.git
	tar zcf nemo_$(VER).tar.gz nemo_$(VER)

targit0:
	rm -rf nemo_git
	git clone $(GIT1) nemo_git
	mkdir nemo_git/local
	git clone $(GIT2) nemo_git/local/pgplot
	tar zcf nemo_git.tar.gz nemo_git

upstream:
	-git remote add upstream https://github.com/teuben/nemo
	@echo Reminder, to sync with the upsteam:
	@echo "  git checkout master"
	@echo "  git fetch upstream"
	@echo "  git merge upstream/master"
	@echo "  git status"
	@echo "Always make sure you work in a branch, to keep your local master same as upstream/master"

# autoconf/GIT based export
#

DIST_DIR = nemo_$(NEMOVER)

## dist:      reminder what to do for making a new distribution
dist:
	@if [ ! -d $(DIST_DIR) ]; \
	then \
	  echo 'TODO for a new DIST: -------------------------------------'; \
	  echo 'git pull' ;\
	  echo Date: `date`; \
	  echo 'Change this date in:  www/nemo/lastftp {FIX THIS}'; \
	  echo 'Change: docs/whatsnew.html'; \
	  echo 'Change: docs/index.html'; \
	  echo 'Change: CITATION.cff'; \
	  echo 'Change: codemeta.json'; \
	  echo 'And run the following commands: '; \
	  echo 'make targit'; \
	  echo 'scp $(DIST_DIR).tar.gz $(SFTPDIR)'; \
	  echo "git tag `echo nemo_$(NEMOVER) | sed 's/\./_/g'`"; \
	  echo "git push origin `echo nemo_$(NEMOVER) | sed 's/\./_/g'`"; \
	  echo 'src/scripts/version inc'; \
	  echo 'git commit VERSION inc/version.h'; \
	  echo 'git push'; \
	  echo 'DONE: ----------------------------------------------------'; \
	else \
	  echo Directory $(DIST_DIR) exists; \
	fi;


# The following 'ftp' targets only supposed to work at the master site

COMPRESS = gzip -f
NEMOTAR  = nemo_`cat $(NEMO)/VERSION`.tar

export:
	@echo "Steps to update NEMO:"
	@echo "make dist                        GIT based distribution maker"
	@echo "make new                         to see what's new for ftp"
	@echo "make ftp                         full  compressed (src) export"
	@echo "src/scripts/version inc          increase patch level"
	@echo "  or:"
	@echo "src/scripts/version set MA.MI.PA set new Major/Minor/Patch"
	@echo "FTPDIR=$(FTPDIR)"
	@echo "SFTPDIR=$(SFTPDIR)"
	@echo "NEMOTAR=$(NEMOTAR)"


ftp:
	@echo Working from FTPDIR=$(FTPDIR) :;df -k $(FTPDIR)
	@$(MAKE) tarfile "SRC=$(SRC)" "USR=$(USR)" FILE=$(FTPDIR)/$(NEMOTAR)
	@echo Compressing
	@$(COMPRESS) $(FTPDIR)/$(NEMOTAR)
	@cp VERSION src/scripts/bootstrap README $(FTPDIR)
	@(cd $(FTPDIR); rm nemo.tar.gz; ln -s $(NEMOTAR).gz nemo.tar.gz)
	@ls -l $(FTPDIR)
	@echo "<A HREF=ftp://ftp.astro.umd.edu/pub/nemo/$(NEMOTAR).gz> $(NEMOTAR).gz </A>"  > $(WWWDIR)/lastftp
	@echo "(`date`)" >> $(WWWDIR)/lastftp
#	@(cd $(FTPDIR) ; ls -l $(NEMOTAR).gz > $(WWWDIR)/lastftp)
#	@echo `ls -l $(FTPDIR)/$(NEMOTAR).gz` > $(WWWDIR)/lastftp
#	@echo "Last updated on `date` by `whoami`" > $(WWWDIR)/lastftp

#		only do this when you really are done with "ftp"
stamp:
	@echo "`cat $(NEMO)/VERSION` `date +%m%d%H%M%y` `whoami` `date`" >> $(CHKFILE)
	@tail -1 $(CHKFILE)
	@echo You should probably now increment the version:
	@echo "   src/scripts/version inc"

new_time:
	@echo "`cat $(NEMO)/VERSION` `date +%m%d%H%M%y` `whoami` `date`" >> $(CHKFILE)
	@tail -1 $(CHKFILE)

test2:
	@echo "<A HREF=ftp://ftp.astro.umd.edu/pub/nemo/$(NEMOTAR).gz> $(NEMOTAR).gz </A>"  > $(WWWDIR)/lastftp
	@echo "(`date`)" >> $(WWWDIR)/lastftp


# #############################################################################
#	Some helpful non-NEMO targets

# deprecated: needs doc files
miriad:
	@echo "Installing miriad shells..."
	(cd $(NEMO)/src/tools/miriad/miriad;\
	 $(MAKE) miriad ; mv miriad $(NEMOBIN); $(MAKE) clean)
	(cd $(NEMO)/src/tools/miriad/mirtool;\
	 $(MAKE) nemotool ; mv nemotool $(NEMOBIN); $(MAKE) clean)

# deprecated: makeindex comes with latex
makeindex:
	@echo "Installing makeindex utility for LaTeX manuals"	(cd $(NEMO)/src/tools/makeindex;\
	 $(MAKE);mv indexsrc/index $(NEMOBIN)/makeindex;$(MAKE) clean)

## pgplot:    internal PGPLOT install (not recommended anymore)
pgplot:
	src/scripts/pgplot.install png=$(PNG) gif=$(GIF)

## cfitsio:   some of the essentials that can be installed in $NEMO/opt
cfitsio:
	(source nemo_start.sh ; src/scripts/mknemo.d/cfitsio)

## hdf4:      install hdf4 via mknemo
hdf4:
	(source nemo_start.sh ; src/scripts/mknemo.d/hdf4)

## hdf5:      install hdf5 via mknemo
hdf5:
	(source nemo_start.sh ; src/scripts/mknemo.d/hdf5)


# deprecated: superseded by glnemo2
vogl:
	src/scripts/nemo.vogl


## build:     perform the first 3 builds (build1, build2, build3)
build:   build1 build2 build3

## build1:    postconfig and mknemos
build1:
	(source nemo_start.sh ; $(MAKE) postconfig mknemos)
	@echo 'Continue with "make build2 (or build2a build2b)"'

## build2:    scripts and library
build2:
	(source nemo_start.sh ; $(MAKE) scripts libs)
	@echo 'Continue with "make build3"'

## build3:    binaries
build3:
	(source nemo_start.sh ; $(MAKE) -j $(JOBS) bins)
	@echo 'Continue with "make build4 for advanced runs"'
	@echo ' and/or "make check bench5" for a final check'

#       Advanced build examples that require opt=1 during the build.
#       normally not needed
BINS4   = tsf tabhist tsd orboom sdinfo lmtinfo
BINS4H  = nemo yapp hdf4 hdf5 cfitsio netcdf
## build4:    advanced binaries that need various 3rd party libraries (hdf4/5, cfitsio, netcdf)
build4:
	@echo "This will test linked with: $(BINS4H)"
	(source nemo_start.sh ; mknemo  $(BINS4))
	@echo 'Continue with "make check"'

## rebuild:   configure again and re-build
rebuild: config.status
	./config.status
	$(MAKE) build

# the exact python method under development

python: anaconda3

python_setup: nemo_start.py
	python -c 'import sys; print(sys.path)'

testpython:
	(source nemo_start.sh; cd src/scripts/python; make tests)

anaconda3:
	(source nemo_start.sh ; src/scripts/install_anaconda3)

nemopy:
	pip install -e .



helpconfig:
	@echo config, configure, config_extra, config_clean

postconfig:	dirs config_extra scripts

## reconfig:  re-configure in case their dependent files changed (your call)
reconfig:
	./config.status

config:	configure
	./configure

configure:	configure.ac
	autoconf

config_extra:
	cp config.h makedefs $(NEMOLIB)

DIFF = diff

diff_new:
	-$(DIFF) config.h $(NEMOLIB)
	-$(DIFF) makedefs $(NEMOLIB)

#	useful if you want to start with a clean slate
config_clean:
	rm -f $(CONFIG_CLEAN)
CLEAN = bin lib obj adm/TIMESTAMP etc/motd $(CONFIG_CLEAN)

CONFIG_CLEAN = config.h makedefs config.cache config.log config.status \
	nemo_start.sh nemo_start.csh

clean:
	@echo There is no single clean, there is cleanall, config_clean and distclean:
	@echo ""
	@echo '"make config_clean" would remove' 
	@echo ""
	@echo $(CONFIG_CLEAN)
	@echo ""
	@echo '2) "make cleanall" would remove' 
	@echo ""
	@echo $(CLEAN)
	@echo and clean the falcON related directories
	@echo ""
	@echo '3) "make cleansrc" would clean the src tree (of .o files and such)'
	@echo ""
	@echo '"make distclean" would remove NEMORC.local as well as'
	@echo ""
	@echo $(CHECKDIR2)

distclean: config_clean cleansrc
	@echo Cleaning as much as one can to simulate a distribution
	rm -rf $(CHECKDIR2)

cleanall:
	rm -rf $(CLEAN)
	$(MAKE) -C $(NEMO)/usr/dehnen clean

cleansrc:
	(cd src; $(MAKE) clean)

# via configure it will select:    MAKELIBS = corelibs dehnen     
libs:	$(MAKELIBS)
	@echo Done at `date`

build2a:  scripts corelibs
	@echo Done at `date` - continue with build2b or build3

build2b:  dehnen
	@echo Done at `date` - continue with build3

# gyrfalcON
dehnen:
	-(cd usr/dehnen; $(MAKE) -i clean all) >> install.log 2>&1 

corelibs:
	@echo Starting at `date`, tail -f $(NEMO)/install.log
	@echo Starting at `date` on `uname -a` > install.log
	-(cd src/tutor/main; rm -f maine.o; make -f $(NEMOLIB)/makedefs  maine.o CFLAGS="-v -c")  >> install.log 2>&1 
	-(cd src;$(MAKE) -i -j $(JOBS) clean install) >> install.log 2>&1

maine:
	-(cd src/tutor/main; rm -f maine.o; make -f $(NEMOLIB)/makedefs  maine.o CFLAGS="-v -c")

slib:
	(cd $(NEMOLIB); \
	ld -shared -o libnemo.so --whole-archive libnemo.a)


bins:
	@echo Starting at `date`, tail -f $(NEMO)/install.log	
	cd src;$(MAKE) -i -j $(JOBS) bins >> ../install.log 2>&1 
	cd usr;$(MAKE) -i -j $(JOBS) bins >> ../install.log 2>&1 
	@echo Done at `date`

missingbins:
	ls $(NEMO)/bin > bins.list
	-$(DIFF) bins.list src/scripts
	@echo This NEMO has `wc -l bins.list`, the benchmark is `wc -l src/scripts/bins.list`

test:
	@echo ISSUE the following command:
	@echo 'src/scripts/testsuite -b'

testbins:
	src/scripts/testsuite -b

testsuite:
	@echo ISSUE the following command:
	@echo 'src/scripts/testsuite -b'


## check:     basic regression test
check: 
	(source nemo_start.sh; src/scripts/testsuite | tee -a install.log )

checklog:
	cat testsuite.log

# check help/man consistency after a build
checkpars:
	src/scripts/checkpars.py -v > checkpars.log
	@grep ^'Files read'           checkpars.log
	@grep ^'Bad files found'      checkpars.log

TIME = /usr/bin/time

## bench:     basic benchmark test based off all Benchfile's
bench:   benchtest

benchtest:
	(source nemo_start.sh; src/scripts/benchsuite)
	@echo 'Found following timing results:'
	@grep ^NEMOBENCH benchsuite.log

bench0:
	(source nemo_start.sh; $(TIME) src/scripts/nemo.bench bsf=0)

bench1:
	(source nemo_start.sh; $(TIME) src/scripts/nemo.bench bsf=1)

bench2:
	(source nemo_start.sh; $(TIME) src/scripts/nemo.bench mode=2)

## bench4:    4 times the flops benchmarks
bench4:
	(source nemo_start.sh; cd src/tutor/bench; make flops; ./flops 4)


## bench5:    special nemobench5
bench5:
	(source nemo_start.sh; $(TIME) src/scripts/nemo.bench mode=5 | tee -a install.log )

## bench8:    OpenMP test
bench8:
	(source nemo_start.sh; cd src/tutor/mp; make scaling2 bench8)

bench10:
	(source nemo_start.sh; $(TIME) src/scripts/nemo.bench mode=10) | grep ^NEMOBENCH

## bench11:   special gyrfalcON bench with 1e6 particles
bench11:
	mkplummer - 1000000 seed=123 | gyrfalcON - . eps=0.05 kmax=7 tstop=0.125
	@echo " 0.1250000000 -0.2499838110 0.2497201 -0.4997039 -0.4980992 1.0027 0.00018 1.0e-09   5 14  0.11  1.05  1.18   0:00:20.38 [bench11]"

## bench11a:  like bench11 but run forever
bench11a:
	mkplummer - 1000000 seed=123 | gyrfalcON - . eps=0.05 kmax=7

## bench12:   special hackcode1 bench with 1e6 particles
bench12:
	mkplummer - 200000 seed=123 | /usr/bin/time -f %Usec hackcode1 - . eps=0.05 tstop=0.125 freq=128 | grep 0.125
	@echo "       0.125   -0.2461   -0.5038  82877192        22       391      0.29 [bench12]"

## bench12a:  like bench12 but run forever
bench12a:
	mkplummer - 200000 seed=123 | /usr/bin/time -f %Usec hackcode1 - . eps=0.05 tstop=999999 freq=128


## bench13:    sorting a plummer sphere
bench13:
	@t0=`xrandom -1`;mkplummer - 1000000 seed=123 | snapsort - - r | hackdens - . debug=-1; t1=`xrandom -1`; nemoinp "($$t1-$$t0)/100"

#
TEST=""
reinstall:
	@echo 'It is adviced to "git update" before this step'
	docs/test_a_new_nemo_git reuse=1 nemo=. $(TEST)

sure:	libs bins

.makedefs:
	$(MAKE) -f src/Makefile makedefs_help

## install_apt:   install apt packages (e.g. ubuntu, debian)
install_apt:
	sudo apt install `grep -v ^# src/scripts/requirements/apt.txt`

## install_dnf:   install dnf packages (e.g. fedora, redhat)
install_dnf:
	sudo dnf install `grep -v ^# src/scripts/requirements/dnf.txt`

## Alas, there are many more undocumented targets
back to top