-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcommon.mk
145 lines (120 loc) · 3.26 KB
/
common.mk
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
#-----------------------------------------------------------------------
# Copyright (c) AccelerEyes LLC. All rights reserved.
# See http://www.accelereyes.com/eula for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the above copyright notices for more information.
#-----------------------------------------------------------------------
## Set the default ArrayFire installation directory (if not already set)
AF_PATH ?= ../..
## Set the default ArrayFire and CUDA installation directories (if not already set)
CUDA_PATH ?= /usr/local/cuda
# We ship all the headers and libraries needed for OpenCL
# determine operating system
OS_WIN = 0
OS_LNX = 0
OS_MAC = 0
ifeq ($(shell uname), Darwin)
OS_MAC = 1
CFLAGS += -DOS_MAC
endif
ifeq ($(shell uname), Linux)
OS_LNX = 1
CFLAGS += -DOS_LNX
endif
ifeq ($(OS_MAC), 0)
ifeq ($(OS_LNX), 0)
OS_WIN = 1
CFLAGS += -DOS_WIN
endif
endif
# determine if 64bit OS
ifeq ($(OS_WIN), 1)
ifeq ($(findstring 64, $(shell uname -s)), 64)
OS := 64
endif
else
ifeq ($(shell uname -m), x86_64)
OS := 64
endif
endif
ifeq ($(OS_MAC),1)
VERSION=$(shell sw_vers -productVersion)
ifeq ($(shell [[ $(VERSION) =~ 10\.6.* ]] && echo 1 || echo 0),1) # SnowLeopard
OS := 64
endif
LIB := lib
else
LIB := lib$(OS)
endif
ifeq ($(OS),64)
CFLAGS += -m64
endif
ifeq ($(OS_WIN),0)
CFLAGS += -Wall -Werror -lstdc++
endif
CFLAGS += -I$(AF_PATH)/include -pthread
CFLAGS += $(shell test -f .DEBUG && echo -g -O0 -DDEBUG || echo -O2 -DNDEBUG)
ifeq ($(OS_LNX),1)
LDFLAGS += -Wl,--no-as-needed
endif
LDFLAGS += -L$(AF_PATH)/$(LIB) -lpthread -lm
LDFLAGS += -Wl,-rpath,$(AF_PATH)/$(LIB),-rpath,$(abspath $(AF_PATH))/$(LIB)
ifeq ($(findstring cuda, $(MAKECMDGOALS)), cuda)
LDFLAGS += -Wl,-rpath,$(CUDA_PATH)/$(LIB)
LDFLAGS += -lafcu -L$(CUDA_PATH)/$(LIB) -lcudart -lcurand -lcusparse -lstdc++
CFLAGS += -I$(CUDA_PATH)/include
EXT:=cuda
WIN_BIN_DIR := CUDA
TARGET := 'Release|CUDA_x64'
ifeq ($(OS_MAC),1)
LDFLAGS += -F/Library/Frameworks -framework CUDA
else
ifeq ($(OS_LNX),1)
LDFLAGS += -lcuda -lrt
endif
endif
else
CFLAGS += -DAFCL
LDFLAGS += -lafcl -lstdc++
EXT:=ocl
WIN_BIN_DIR := OpenCL
TARGET := 'Release|OpenCL_x64'
ifeq ($(OS_MAC),1)
CFLAGS += -framework OpenCL
endif
endif
SRC:=$(wildcard *.cpp)
BIN:=$(patsubst %.cpp, %_$(EXT), $(SRC))
NOEXT:=$(patsubst %.cpp, %, $(SRC))
COMPUTE_DEVICE?=0
ifeq ($(OS_WIN),1)
BIN := $(NOEXT:%=$(WIN_BIN_DIR)/%.exe)
endif
CPPFLAGS += $(CFLAGS)
cuda: $(BIN)
opencl: $(BIN)
run : $(BIN)
for F in $(BIN); do echo $$F; ./$${F} $(COMPUTE_DEVICE) -; done
$(NOEXT): $(BIN) rmsym
ln -s $(BIN) $(NOEXT)
rmsym:
rm -f $(NOEXT)
%_ocl: %.cpp
$(CC) $< $(CPPFLAGS) $(LDFLAGS) -o $@
%_cuda: %.cpp
$(CC) $< $(CPPFLAGS) $(LDFLAGS) -o $@
$(WIN_BIN_DIR)/%.exe: %_vs2008.sln %.cpp
devenv.com $< /Rebuild $(TARGET)
rm -rf $(WIN_BIN_DIR)/*.{pdb,ilk,ncb,suo,user} %USERPROFILE%
debug:
@test -f .DEBUG && (rm .DEBUG; echo off) || (touch .DEBUG; echo on)
clean:
ifeq ($(OS_WIN), 1)
rm -rf OpenCL CUDA
else
rm -f *.o $(NOEXT) *_cuda *_ocl
endif
.PHONY: all run debug clean
.NOTPARALLEL: $(WIN_BIN_DIR)/%.exe $(WIN_BIN_DIR)/%.exe