
# Location of BOINC libraries
#BOINC_DIR = /home/eric/BOINC_Project/boinc
BOINC_DIR = /tmp/SBo/boinc-client_release-7.14-7.14.3
BOINC_API_DIR = $(BOINC_DIR)/api
BOINC_LIB_DIR = $(BOINC_DIR)/lib
BOINC_SCHED_DIR = $(BOINC_DIR)/sched
BOINC_DB_DIR = $(BOINC_DIR)/db

# Location of PARI library
#PARI = /home/eric/BOINC_Project/Pari/pari-2.8-1711-ge5c317c
PARI = /tmp/SBo/pari-2.11.2

# Location of AMD headers and libraries.
#AMD_PATH = /opt/rocm/opencl
#AMD_INC  = $(AMD_PATH)/include
#AMD_LIB  = $(AMD_PATH)/lib/x86_64

AMD_PATH = /usr/include
AMD_INC  = $(AMD_PATH)/CL
AMD_LIB  = /usr/lib64


system  := $(shell uname -s | tr A-Z a-z )
hw      := $(shell uname -m)
OBase   := O$(system)-$(hw)
O       := $(OBase)-OpenCL_AMD

CC  = g++
#AR = gcc-ar
#NM = gcc-nm
#RANLIB = gcc-ranlib



INCLUDES = -I$(BOINC_DIR) -I$(BOINC_LIB_DIR) -I$(BOINC_API_DIR) -I$(BOINC_SCHED_DIR) -I$(BOINC_DB_DIR) -I$(PARI)/src/headers -I$(PARI)/$(OBase) -I$(AMD_INC)

#LIBS =  -L$(BOINC_LIB_DIR) -L$(BOINC_API_DIR) -L$(PARI)/$(OBase) -L$(AMD_LIB) -lamdocl64 -lboinc_api -lboinc -l:libpari.a -lm -l:libgmp.a -lpthread
#LIBS =  -L$(BOINC_LIB_DIR) -L$(BOINC_API_DIR) -L$(PARI)/$(OBase) -L$(AMD_LIB) -Wl,-Bdynamic -lOpenCL -lpthread -lm -Wl,-Bstatic -lboinc_api -lboinc -l:libpari.a -l:libgmp.a

LIBS =  -L$(BOINC_LIB_DIR) -L$(BOINC_API_DIR) -L$(PARI)/$(OBase) -L$(AMD_LIB) -Wl,-Bdynamic -lOpenCL -lpthread -lboinc_api -lboinc -ldl -Wl,-Bstatic -l:libpari.a -l:libgmp.a -lm

#-flto=16 -Wl,-flto=16
#CXXFLAGS = -O3 -Wall -Werror -fmax-errors=4
CXXFLAGS = -O3 -march=znver1 -fmax-errors=4

#STATIC_FLAGS = -static-libgcc -static-libstdc++ -static
STATIC_FLAGS = -static-libgcc -static-libstdc++


PREPROC_DEFS = -DAPP_VERSION_GPU_OPENCL -DGPU_VENDOR_AMD


################################################################################

# Target rules

all: build

build: $(O) $(O)/GetDecics


$(O)/polDiscTest_gpuOpenCL.o: polDiscTest_gpuOpenCL.cpp
	$(CC) $(CXXFLAGS) $(INCLUDES) $(PREPROC_DEFS) -c -o $@ $<

$(O)/polDiscTest_cpu.o: polDiscTest_cpu.cpp
	$(CC) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<

$(O)/TgtMartinet.o: TgtMartinet.cpp TgtMartinet.h $(O)/polDiscTest_cpu.o
	$(CC) $(CXXFLAGS) $(INCLUDES) $(PREPROC_DEFS) -c -o $@ $<

$(O)/GetDecics.o: GetDecics.cpp GetDecics.h
	$(CC) $(CXXFLAGS) $(INCLUDES) $(PREPROC_DEFS) -c -o $@ $<

$(O)/openCL_GetDecics.o: openCL_GetDecics.cpp openCL_GetDecics.h
	$(CC) $(CXXFLAGS) $(INCLUDES) $(PREPROC_DEFS) -c -o $@ $<

$(O)/boinc_opencl.o: $(BOINC_API_DIR)/boinc_opencl.cpp $(BOINC_API_DIR)/boinc_opencl.h
	$(CC) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<

$(O)/GetDecics: $(O)/GetDecics.o $(O)/openCL_GetDecics.o $(O)/TgtMartinet.o $(O)/polDiscTest_gpuOpenCL.o $(O)/boinc_opencl.o $(O)/polDiscTest_cpu.o
	$(CC) $(CXXFLAGS) $(STATIC_FLAGS) -o $@ $+ $(LIBS)

$(O): ;	mkdir -p $(O)

clean:
	rm -r -f $(O)
