1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
###########################################################################
# Copyright (C) 2009 by Oliver Bock #
# oliver.bock[AT]aei.mpg.de #
# #
# This file is part of Einstein@Home (Radio Pulsar Edition). #
# #
# Einstein@Home 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, version 2 of the License. #
# #
# Einstein@Home 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. #
# #
# You should have received a copy of the GNU General Public License #
# along with Einstein@Home. If not, see <http://www.gnu.org/licenses/>. #
# #
###########################################################################
# path settings
EINSTEIN_RADIO_SRC?=$(PWD)
EINSTEIN_RADIO_INSTALL?=$(PWD)
PKG_CONFIG_PATH=$(EINSTEIN_RADIO_INSTALL)/lib/pkgconfig
CUDA_INSTALL_PATH?=/usr/local/cuda
# config values
CXX ?= g++
# variables
LIBS += -L$(EINSTEIN_RADIO_INSTALL)/lib
LIBS += $(shell $(EINSTEIN_RADIO_INSTALL)/bin/gsl-config --libs)
LIBS += $(shell export PKG_CONFIG_PATH="$(EINSTEIN_RADIO_INSTALL)/lib/pkgconfig" && pkg-config --libs fftw3f)
LIBS += $(shell $(EINSTEIN_RADIO_INSTALL)/bin/xml2-config --libs)
LIBS += -lboinc_api -lboinc
LIBS += $(EINSTEIN_RADIO_SRC)/cuda/redist/mac/5.5/lib/libcufft.5.5.dylib # CUDA FFT
LIBS += $(EINSTEIN_RADIO_SRC)/cuda/redist/mac/5.5/lib/libcudart.5.5.dylib # CUDA runtime library
LIBS += -L$(CUDA_INSTALL_PATH)/lib
LIBS += -lcuda # CUDA driver library
LIBS += -L/usr/lib
LIBS += -lpthread
LIBS += $(EINSTEIN_RADIO_INSTALL)/lib/libz.a
LDFLAGS += -static-libgcc
CXXFLAGS += -I$(EINSTEIN_RADIO_INSTALL)/include
CXXFLAGS += $(shell $(EINSTEIN_RADIO_INSTALL)/bin/gsl-config --cflags)
CXXFLAGS += $(shell export PKG_CONFIG_PATH="$(EINSTEIN_RADIO_INSTALL)/lib/pkgconfig" && pkg-config --cflags fftw3f)
CXXFLAGS += $(shell $(EINSTEIN_RADIO_INSTALL)/bin/xml2-config --cflags)
CXXFLAGS += -I$(EINSTEIN_RADIO_INSTALL)/include/boinc
CXXFLAGS += -I$(CUDA_INSTALL_PATH)/include
CXXFLAGS += -DHAVE_INLINE -DBOINCIFIED
CXXFLAGS += -DUSE_CUDA
DEPS = Makefile
OBJS = demod_binary.o demod_binary_cuda.cu.o demod_binary_hs_cuda.cu.o hs_common.o rngmed.o erp_boinc_ipc.o erp_getopt.o erp_getopt1.o erp_utilities.o cuda_utilities.o
EINSTEINBINARY_TARGET ?= einsteinbinary_macosx_cuda
TARGET = $(EINSTEINBINARY_TARGET)
# primary role based tagets
default: release
debug: $(TARGET)
#profile: clean $(TARGET)
release: clean $(TARGET)
# target specific options (generic)
debug: CXXFLAGS_BASE += -DLOGLEVEL=debug -pg -O0 -Wall
#profile: CXXFLAGS_BASE += -DNDEBUG -DLOGLEVEL=info -O3 -Wall
release: CXXFLAGS_BASE += -DNDEBUG -DLOGLEVEL=info -O3 -Wall
# target specific options (nvcc)
debug: CXXFLAGS_CUDA += $(CXXFLAGS) $(CXXFLAGS_BASE)
debug: NVCCFLAGS += -G
#profile: CXXFLAGS_CUDA += $(CXXFLAGS) $(CXXFLAGS_BASE)
#profile: NVCCFLAGS += -O3
release: CXXFLAGS_CUDA += $(CXXFLAGS) $(CXXFLAGS_BASE)
release: NVCCFLAGS += -O3
# target specific options (gcc)
debug: CXXFLAGS_GCC += $(CXXFLAGS) $(CXXFLAGS_BASE) -ggdb3
#profile: CXXFLAGS_GCC += $(CXXFLAGS) $(CXXFLAGS_BASE) -ggdb3 -fprofile-generate
#release: CXXFLAGS_GCC += $(CXXFLAGS) $(CXXFLAGS_BASE) -ggdb3 -fprofile-use
release: CXXFLAGS_GCC += $(CXXFLAGS) $(CXXFLAGS_BASE) -ggdb3
# file based targets
#profile:
# @echo "Removing previous profiling data..."
# rm -f *_profile.*
# rm -f *.gcda
# @echo "Gathering profiling data (this takes roughly half a minute)..."
# ./$(TARGET) -t $(EINSTEIN_RADIO_SRC)/../test/templates_400Hz_2_short.bank -l $(EINSTEIN_RADIO_SRC)/data/zaplist_232.txt -A 0.04 -P 3.0 -W -z -i $(EINSTEIN_RADIO_SRC)/../test/J1907+0740_dm_482.binary -c status_profile.cpt -o resu
# @echo "Finished gathering profiling data..."
$(TARGET): $(DEPS) $(EINSTEIN_RADIO_SRC)/erp_boinc_wrapper.cpp $(OBJS)
$(CXX) -g $(CXXFLAGS_GCC) $(LDFLAGS) $(EINSTEIN_RADIO_SRC)/erp_boinc_wrapper.cpp -o $(TARGET) $(OBJS) $(LIBS)
demod_binary.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/demod_binary.c $(EINSTEIN_RADIO_SRC)/demod_binary.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/demod_binary.c
demod_binary_cuda.ptx: $(DEPS) $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.cu $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.cuh
nvcc --ptx $(NVCCFLAGS) --compiler-options="$(CXXFLAGS_CUDA)" $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.cu
mv demod_binary_cuda.ptx db.dev
demod_binary_cuda.cu.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.cu $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.h demod_binary_cuda.ptx
nvcc --cuda -dir=$(TARGET).devcode -ext=all $(NVCCFLAGS) --compiler-options="$(CXXFLAGS_CUDA)" $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_cuda.cu
$(CXX) -g $(CXXFLAGS_CUDA) -ggdb3 -c demod_binary_cuda.cu.cpp.ii -o demod_binary_cuda.cu.o
demod_binary_hs_cuda.ptx: $(DEPS) $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_hs_cuda.cu $(EINSTEIN_RADIO_SRC)/cuda/app/harmonic_summing_kernel.cuh
nvcc --ptx $(NVCCFLAGS) --compiler-options="$(CXXFLAGS_CUDA)" $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_hs_cuda.cu
mv demod_binary_hs_cuda.ptx dbhs.dev
demod_binary_hs_cuda.cu.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_hs_cuda.cu $(EINSTEIN_RADIO_SRC)/cuda/app/harmonic_summing_kernel.cuh demod_binary_hs_cuda.ptx
nvcc --cuda -dir=$(TARGET).devcode -ext=all $(NVCCFLAGS) --compiler-options="$(CXXFLAGS_CUDA)" $(EINSTEIN_RADIO_SRC)/cuda/app/demod_binary_hs_cuda.cu
$(CXX) -g $(CXXFLAGS_CUDA) -ggdb3 -c demod_binary_hs_cuda.cu.cpp.ii -o demod_binary_hs_cuda.cu.o
hs_common.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/hs_common.c $(EINSTEIN_RADIO_SRC)/hs_common.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/hs_common.c
rngmed.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/rngmed.c $(EINSTEIN_RADIO_SRC)/rngmed.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/rngmed.c
erp_boinc_ipc.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/erp_boinc_ipc.cpp $(EINSTEIN_RADIO_SRC)/erp_boinc_ipc.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/erp_boinc_ipc.cpp
erp_getopt.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/erp_getopt.c $(EINSTEIN_RADIO_SRC)/erp_getopt.h $(EINSTEIN_RADIO_SRC)/erp_getopt_int.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/erp_getopt.c
erp_getopt1.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/erp_getopt1.c $(EINSTEIN_RADIO_SRC)/erp_getopt.h $(EINSTEIN_RADIO_SRC)/erp_getopt_int.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/erp_getopt1.c
erp_utilities.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/erp_utilities.cpp $(EINSTEIN_RADIO_SRC)/erp_utilities.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/erp_utilities.cpp
cuda_utilities.o: $(DEPS) $(EINSTEIN_RADIO_SRC)/cuda/app/cuda_utilities.c $(EINSTEIN_RADIO_SRC)/cuda/app/cuda_utilities.h
$(CXX) -g $(CXXFLAGS_GCC) -c $(EINSTEIN_RADIO_SRC)/cuda/app/cuda_utilities.c
install:
mkdir -p $(EINSTEIN_RADIO_INSTALL)/../dist
cp $(TARGET) $(EINSTEIN_RADIO_INSTALL)/../dist
cp *.dev $(EINSTEIN_RADIO_INSTALL)/../dist
cp db.dev $(EINSTEIN_RADIO_INSTALL)/../dist/$(TARGET)-db.dev
cp dbhs.dev $(EINSTEIN_RADIO_INSTALL)/../dist/$(TARGET)-dbhs.dev
clean:
rm -f $(OBJS) $(TARGET)
rm -rf $(TARGET).devcode
|