boinc/samples/nvopencl/common_opencl_mac.mk

245 lines
6.3 KiB
Makefile

.SUFFIXES : .cl
P4_ROOT ?= ${HOME}/perforce/
# detect OS
OSUPPER = $(shell uname -s 2>/dev/null | tr [:lower:] [:upper:])
OSLOWER = $(shell uname -s 2>/dev/null | tr [:upper:] [:lower:])
# 'linux' is output for Linux system, 'darwin' for OS X
DARWIN = $(strip $(findstring DARWIN, $(OSUPPER)))
ifneq ($(DARWIN),)
SNOWLEOPARD = $(strip $(findstring 10.6, $(shell egrep "<string>10\.6" /System/Library/CoreServices/SystemVersion.plist)))
endif
# detect if 32 bit or 64 bit system
HP_64 = $(shell uname -m | grep 64)
OSARCH= $(shell uname -m)
# BOINC directory
BOINC_DIR = ../..
BOINC_API_DIR = $(BOINC_DIR)/api
BOINC_LIB_DIR = $(BOINC_DIR)/lib
BOINC_BUILD_DIR = $(BOINC_DIR)/mac_build/build/Deployment
BOINC_CONFIG_DIR = $(BOINC_DIR)/clientgui/mac
FRAMEWORKS_DIR = /System/Library/Frameworks
# Basic directory setup for SDK
# (override directories only if they are not already defined)
SRCDIR ?=
ROOTDIR ?= /Developer/GPU\ Computing
ROOTOBJDIR ?= obj
LIBDIR := $(ROOTDIR)/shared/lib/
SHAREDDIR := $(ROOTDIR)/shared/
OCLROOTDIR := $(ROOTDIR)/OpenCL/
OCLCOMMONDIR ?= $(OCLROOTDIR)/common/
OCLBINDIR ?= $(BOINC_DIR)/samples/nvopencl/
BINDIR ?= $(OCLBINDIR)/$(OSLOWER)
OCLLIBDIR := $(OCLCOMMONDIR)/lib
INCDIR ?= $(ROOTDIR)/OpenCL/common/inc/
# Includes
INCLUDES += -I$(INCDIR) -I$(OCLCOMMONDIR)/inc -I$(SHAREDDIR)/inc -I$(BOINC_CONFIG_DIR) -I$(BOINC_API_DIR) -I$(BOINC_LIB_DIR) -I$(BOINC_DIR)
# Compilers
CXX := g++
CC := gcc
# MODIFIED - add -lpthread to fix undefined reference in function start_timer_thread() in boinc_api.cpp
LINK := g++ -fPIC -lpthread $(INCLUDES)
ifeq "$(strip $(HP_64))" ""
MACHINE := 32
USRLIBDIR := -L/usr/lib/
else
MACHINE := 64
USRLIBDIR := -L/usr/lib64/
endif
# Warning flags
CXXWARN_FLAGS := \
-W -Wall \
-Wimplicit \
-Wswitch \
-Wformat \
-Wchar-subscripts \
-Wparentheses \
-Wmultichar \
-Wtrigraphs \
-Wpointer-arith \
-Wcast-align \
-Wreturn-type \
-Wno-unused-function \
$(SPACE)
CWARN_FLAGS := $(CXXWARN_FLAGS) \
-Wstrict-prototypes \
-Wmissing-prototypes \
-Wmissing-declarations \
-Wnested-externs \
-Wmain \
# architecture flag for nvcc and gcc compilers build
LIB_ARCH := $(OSARCH)
# Determining the necessary Cross-Compilation Flags
# 32-bit OS, but we target 64-bit cross compilation
ifeq ($(x86_64),1)
LIB_ARCH = x86_64
ifneq ($(DARWIN),)
CXX_ARCH_FLAGS += -arch x86_64
else
CXX_ARCH_FLAGS += -m64
endif
else
# 64-bit OS, and we target 32-bit cross compilation
ifeq ($(i386),1)
LIB_ARCH = i386
ifneq ($(DARWIN),)
CXX_ARCH_FLAGS += -arch i386
else
CXX_ARCH_FLAGS += -m32
endif
else
ifneq ($(SNOWLEOPARD),)
CXX_ARCH_FLAGS += -m32 -arch i386
LIB_ARCH = i386
else
ifeq "$(strip $(HP_64))" ""
LIB_ARCH = i386
else
LIB_ARCH = x86_64
endif
endif
endif
endif
# Compiler-specific flags
CXXFLAGS := $(CXXWARN_FLAGS) $(CXX_ARCH_FLAGS)
CFLAGS := $(CWARN_FLAGS) $(CXX_ARCH_FLAGS)
LINK += $(CXX_ARCH_FLAGS)
# Common flags
COMMONFLAGS += $(INCLUDES) -DUNIX
# Add Mac Flags
ifneq ($(DARWIN),)
COMMONFLAGS += -DMAC
endif
# Debug/release configuration
ifeq ($(dbg),1)
COMMONFLAGS += -g
BINSUBDIR := debug
LIBSUFFIX := D
else
COMMONFLAGS += -O3
BINSUBDIR := release
LIBSUFFIX :=
CXXFLAGS += -fno-strict-aliasing
CFLAGS += -fno-strict-aliasing
endif
# OpenGL is used or not (if it is used, then it is necessary to include GLEW)
ifeq ($(USEGLLIB),1)
ifneq ($(DARWIN),)
OPENGLLIB := -L/System/Library/Frameworks/OpenGL.framework/Libraries -lGL -lGLU $(SHAREDDIR)/lib/$(OSLOWER)/libGLEW.a
else
OPENGLLIB := -lGL -lGLU -lX11 -lXmu
ifeq "$(strip $(HP_64))" ""
OPENGLLIB += -lGLEW -L/usr/X11R6/lib
else
OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64
endif
endif
CUBIN_ARCH_FLAG := -m64
endif
ifeq ($(USEGLUT),1)
ifneq ($(DARWIN),)
OPENGLLIB += -framework GLUT
INCLUDES += -I/System/Library/Frameworks/OpenGL.framework/Headers
else
OPENGLLIB += -lglut
endif
endif
# Libs
ifneq ($(DARWIN),)
LIB := -L${OCLLIBDIR} -L$(LIBDIR) -L$(SHAREDDIR)/lib/$(OSLOWER)
LIB += -framework OpenCL -framework OpenGL ${OPENGLLIB} -framework AppKit ${ATF} ${LIB}
else
LIB := ${USRLIBDIR} -L${OCLLIBDIR} -L$(LIBDIR) -L$(SHAREDDIR)/lib/$(OSLOWER)
# MODIFIED - link boinc lib and boinc api
LIB += -lOpenCL ${OPENGLLIB} ${LIB} -lboinc_api -L$(BOINC_BUILD_DIR) -lboinc -L$(BOINC_BUILD_DIR)
endif
# Lib/exe configuration
ifneq ($(STATIC_LIB),)
TARGETDIR := $(OCLLIBDIR)
TARGET := $(subst .a,_$(LIB_ARCH)$(LIBSUFFIX).a,$(OCLLIBDIR)/$(STATIC_LIB))
LINKLINE = ar qv $(TARGET) $(OBJS)
else
LIB += -loclUtil_$(LIB_ARCH)$(LIBSUFFIX) -lshrutil_$(LIB_ARCH)$(LIBSUFFIX) -lboinc_api -L$(BOINC_BUILD_DIR) -lboinc -L$(BOINC_BUILD_DIR)
TARGETDIR := $(BINDIR)/$(BINSUBDIR)
TARGET := $(TARGETDIR)/$(EXECUTABLE)
LINKLINE = $(LINK) -o $(TARGET) $(OBJS) $(LIB)
endif
# check if verbose
ifeq ($(verbose), 1)
VERBOSE :=
else
VERBOSE := @
endif
# Add common flags
CXXFLAGS += $(COMMONFLAGS)
CFLAGS += $(COMMONFLAGS)
################################################################################
# Set up object files
################################################################################
OBJDIR := $(ROOTOBJDIR)/$(BINSUBDIR)
OBJS += $(patsubst %.cpp,$(OBJDIR)/%.cpp.o,$(notdir $(CCFILES)))
OBJS += $(patsubst %.c,$(OBJDIR)/%.c.o,$(notdir $(CFILES)))
################################################################################
# Rules
################################################################################
$(OBJDIR)/%.c.o : $(SRCDIR)%.c $(C_DEPS)
$(VERBOSE)$(CC) $(CFLAGS) -o $@ -c $<
$(OBJDIR)/%.cpp.o : $(SRCDIR)%.cpp $(C_DEPS)
$(VERBOSE)$(CXX) $(CXXFLAGS) -o $@ -c $<
$(TARGET): makedirectories $(OBJS) Makefile
$(VERBOSE)$(LINKLINE)
makedirectories:
$(VERBOSE)mkdir -p $(LIBDIR)
$(VERBOSE)mkdir -p $(OBJDIR)
$(VERBOSE)mkdir -p $(TARGETDIR)
tidy :
$(VERBOSE)find . | egrep "#" | xargs rm -f
$(VERBOSE)find . | egrep "\~" | xargs rm -f
clean : tidy
$(VERBOSE)rm -f $(OBJS)
$(VERBOSE)rm -f $(TARGET)
clobber : clean
$(VERBOSE)rm -rf $(ROOTOBJDIR)
$(VERBOSE)find $(TARGETDIR) | egrep "ptx" | xargs rm -f
$(VERBOSE)find $(TARGETDIR) | egrep "txt" | xargs rm -f
$(VERBOSE)rm -f $(TARGETDIR)/samples.list