vpath  %.hh        include
vpath       ../CPX/include
vpath  %.cc src
vpath  %.ie src
vpath  %.o  obj

all: main
	export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib:../CPX/lib; \
        ./test

libs: objects

objects: cpx.hh cpx.cc
	cd obj ; rm *.o ; g++ -std=c++2a        \
                     -O3                        \
                     -z muldefs                 \
                     -fopenmp                   \
                     -floop-block               \
                     -ftree-loop-distribution   \
                     -floop-parallelize-all     \
                     -ftree-parallelize-loops=4 \
                     -ftree-vectorize           \
                     -fconcepts                 \
                     -mavx2                     \
                     -I ../include              \
                     -I ../../CPX/include       \
                     -c                         \
	             ../src/*.cc
	cd obj ; ar rs libcpx4.a *.o 
	cd obj ; mv libcpx4* ../lib
	cd obj ; for filename in *.o;           \
                 do echo mv \"$$filename\" \"$${filename//.o/\-static.u}\"; \
                 done|/bin/bash
	cd obj ; g++ -std=c++2a                 \
                     -O3                        \
                     -z muldefs                 \
                     -fopenmp                   \
                     -floop-block               \
                     -ftree-loop-distribution   \
                     -floop-parallelize-all     \
                     -ftree-parallelize-loops=4 \
                     -ftree-vectorize           \
                     -fconcepts                 \
                     -mavx2                     \
                     -I ../include              \
                     -I ../../CPX/include       \
                     -c                         \
                     -fPIC                      \
	             ../src/*.cc
	cd obj ; g++ -std=c++2a                 \
                     -O3                        \
                     -z muldefs                 \
                     -fopenmp                   \
                     -floop-block               \
                     -ftree-loop-distribution   \
                     -floop-parallelize-all     \
                     -ftree-parallelize-loops=4 \
                     -ftree-vectorize           \
                     -fconcepts                 \
                     -mavx2                     \
                     -I ../include              \
                     -I ../../CPX/include       \
                     -shared                    \
                     -o                         \
	             libcpx4.so *.o 
	cd obj ; mv libcpx4.so ../lib
	cd obj ; for filename in *.o;           \
                 do echo mv \"$$filename\" \"$${filename//.o/\-dynamic.o}\"; \
                 done|/bin/bash
	cd obj ; for filename in *.u;           \
                 do echo mv \"$$filename\" \"$${filename//.u/\.o}\";  \
                 done|/bin/bash

main: test.cc
	g++ test.cc  -std=c++2a                 \
                     -O3                        \
                     -z muldefs                 \
                     -fopenmp                   \
                     -floop-block               \
                     -ftree-loop-distribution   \
                     -floop-parallelize-all     \
                     -ftree-parallelize-loops=4 \
                     -ftree-vectorize           \
                     -fconcepts                 \
                     -mavx2                     \
                     -I include                 \
                     -I ../CPX/include          \
                     -o test                    \
                     -L lib                     \
                     -l cpx4

test: test.cc
	g++ test.cc  -std=c++2a                 \
                     -O3                        \
                     -z muldefs                 \
                     -fopenmp                   \
                     -floop-block               \
                     -ftree-loop-distribution   \
                     -floop-parallelize-all     \
                     -ftree-parallelize-loops=4 \
                     -ftree-vectorize           \
                     -fconcepts                 \
                     -mavx2                     \
                     -I include                 \
                     -I ../CPX/include          \
                     -o test                    \
                     -L lib                     \
                     -l cpx4

clean:
	rm -fr test

run:
	export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib:../CPX/lib; \
        ./test
