forked from facebookarchive/caffe2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.py
156 lines (135 loc) · 6.63 KB
/
build.py
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
147
148
149
150
151
152
153
154
155
156
"""Configuration for the Caffe2 installation.
"""
class Config(object):
############################################################################
# Common settings that are necessary to build Caffe2's core functionality.
############################################################################
# If you want to show a lot of the build details, set VERBOSE_BUILD to True.
# This will show the detailed commands being run during the build process.
VERBOSE_BUILD = False
# Specify your compiler.
CC = "c++"
# Specify your archiver.
AR = "ar"
# Specify your output folder.
GENDIR = "gen"
# Specify if you want to use the system protocol buffer or not.
# If you have protobuf installed, use the following two lines usually
# suffice:
USE_SYSTEM_PROTOBUF = True
PROTOC_BINARY = "protoc"
# Otherwise, use the following line: we will build protobuf using the
# included source file.
#USE_SYSTEM_PROTOBUF = False
#PROTOC_BINARY = 'gen/third_party/google/protoc'
# Note for the line above: if you are doing things like cross-compilation,
# the built protoc compiler will not work on the host, in which case you
# will need to provide a protoc binary that can run on the host environment.
# Choose if Caffe2 uses only lite proto or not. Note that this will turn off
# quite a few capabilities in Caffe2's generated protobuf, notably the text
# format support. But, if you are using lite proto already, you don't want
# text format anyway, do you?
USE_LITE_PROTO = False
# Eigen: Eigen is a third party library that Caffe2 uses for some numerical
# operations. If you have eigen installed in your system, you can simply use
# USE_SYSTEM_EIGEN = True. Otherwise (for example when you are cross
# compiling) you may want to set USE_SYSTEM_EIGEN to False.
USE_SYSTEM_EIGEN = False
# BLAS backend: which backend to use for blas functions.
# Note that, if the BLAS backend is MKL, we will also assume that the
# MKL VSL library is present, and we will use the VSL function calls as
# well.
# Also note that, if the BLAS backend is eigen, there is actually *no*
# actual blas function calls. We only routed the caffe-specific functions
# to use Eigen.
BLAS_BACKEND = "eigen"
# google-glog: Caffe can choose to use google glog, which will allow a more
# sophisticated logging scheme. It also comes with a minimal logging tool
# that does not depend on glog. If you wish to use glog, set USE_GLOG to
# True.
USE_GLOG = True
# Whether to use RTTI or not. Note that this might not always work; to
# disable RTTI means that all your dependencies, most notably protobuf, have
# to be built without RTTI. If you don't know, leave USE_RTTI True.
USE_RTTI = True
# Whether to use openmp or not. Note that currently, a lot of Caffe2's code
# is not using openmp, but the underlying Eigen library can take advantage
# of that.
USE_OPENMP = True
# Manually specified defines.
DEFINES = ["-DNDEBUG"]
# Manually specified include paths. These include paths are searched before
# any auto-generated include paths.
INCLUDES = []
# Manually specified lib directories. These are searched before any
# auto-generated library directories.
LIBDIRS = []
# Additional cflags you would like to add to the compilation.
CFLAGS = []
# If you have a nice CPU, you can enable several intrinsics. Make sure you know
# that these are available on your CPU though, otherwise you will get illegal
# instruction errors.
#CFLAGS = ["-mavx", "-mavx2", "-mfma"]
# Additional link flags you would like to add to the compilation.
LINKFLAGS = []
# Additional libraries to link against. This will be appended to each link
# link command.
ADDITIONAL_LIBS = []
###########################################################################
# (optional) CUDA. If you do not specify this, the GPU part of Caffe2 will
# not be available.
############################################################################
# Specify the cuda directory.
CUDA_DIR = "/usr/local/cuda"
# If you are cross compiling, you may need to add paths where the cuda
# libraries for the target platform can be found. Otherwise, leave it empty.
MANUAL_CUDA_LIB_DIRS = []
CUDA_GENCODE = [
'arch=compute_30,code=sm_30',
'arch=compute_35,code=sm_35',
'arch=compute_50,code=sm_50',
]
# additional CUDA cflags to pass to nvcc.
CUDA_CFLAGS = []
# You can choose to add the path of the cuda libraries to the rpath, so that
# during runtime you do not need to hard-code the library paths. You can,
# of course, set this to False.
CUDA_ADD_TO_RPATH = True
# Specify if you want to link cuda as static libraries.
LINK_CUDA_STATIC = True
############################################################################
# (optional) MPI setting.
############################################################################
# Specify the MPI c++ compiler. You usually don't need to change this.
MPICC = "mpic++"
MPIRUN = "mpirun"
# Specify ompi_info if you are using openmpi.
OMPI_INFO = 'ompi_info'
# Now, the cuda MPI suport is available after certain versions (such as
# OpenMPI 1.7), but it is possible that the MPI is built without cuda
# support. We will try to figure out if cuda support is available, but
# sometimes you may need to manually request MPI operators to go to
# "fallback" mode: in which case the MPI operations are carried out by CUDA
# memory copy followed by MPI in the CPU space.
FORCE_FALLBACK_CUDA_MPI = False
# Whether to add the MPI library to rpath.
MPI_ADD_TO_RPATH = True
################################################################################
# Very rarely used configurations.
################################################################################
# If the platform uses a non-conventional shared library extension, manually
# specify it here.
SHARED_LIB_EXT = ''
# If you would like to pass in any specific environmental variables to the
# build command, do it here.
ENVIRONMENTAL_VARS = {}
# Optimization flags: -O2 in default. The reason we do not include it
# directly in the CFLAGS option is because it will be inserted to both
# c++ and nvcc: some cflags may not be compatible with nvcc so we do not
# want to put all cflags into nvcc.
OPTIMIZATION_FLAGS = ["-O2"]
# brew.py
if __name__ == '__main__':
from brewtool.brewery import Brewery
import sys
Brewery.Run(Config, sys.argv)