1- # This list is required for static linking and exported to CaffeConfig.cmake
1+ # These lists are later turned into target properties on main caffe library target
22set (Caffe_LINKER_LIBS "" )
3+ set (Caffe_INCLUDE_DIRS "" )
4+ set (Caffe_DEFINITIONS "" )
5+ set (Caffe_COMPILE_OPTIONS "" )
36
47# ---[ Boost
58find_package (Boost 1.46 REQUIRED COMPONENTS system thread filesystem)
6- include_directories ( SYSTEM ${Boost_INCLUDE_DIR } )
7- list (APPEND Caffe_LINKER_LIBS ${Boost_LIBRARIES} )
9+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${Boost_INCLUDE_DIRS } )
10+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${Boost_LIBRARIES} )
811
912# ---[ Threads
1013find_package (Threads REQUIRED)
11- list (APPEND Caffe_LINKER_LIBS ${CMAKE_THREAD_LIBS_INIT} )
14+ list (APPEND Caffe_LINKER_LIBS PRIVATE ${CMAKE_THREAD_LIBS_INIT} )
15+
16+ # ---[ OpenMP
17+ if (USE_OPENMP)
18+ # Ideally, this should be provided by the BLAS library IMPORTED target. However,
19+ # nobody does this, so we need to link to OpenMP explicitly and have the maintainer
20+ # to flick the switch manually as needed.
21+ #
22+ # Moreover, OpenMP package does not provide an IMPORTED target as well, and the
23+ # suggested way of linking to OpenMP is to append to CMAKE_{C,CXX}_FLAGS.
24+ # However, this naïve method will force any user of Caffe to add the same kludge
25+ # into their buildsystem again, so we put these options into per-target PUBLIC
26+ # compile options and link flags, so that they will be exported properly.
27+ find_package (OpenMP REQUIRED)
28+ list (APPEND Caffe_LINKER_LIBS PRIVATE ${OpenMP_CXX_FLAGS} )
29+ list (APPEND Caffe_COMPILE_OPTIONS PRIVATE ${OpenMP_CXX_FLAGS} )
30+ endif ()
1231
1332# ---[ Google-glog
1433include ("cmake/External/glog.cmake" )
15- include_directories ( SYSTEM ${GLOG_INCLUDE_DIRS} )
16- list (APPEND Caffe_LINKER_LIBS ${GLOG_LIBRARIES} )
34+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${GLOG_INCLUDE_DIRS} )
35+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${GLOG_LIBRARIES} )
1736
1837# ---[ Google-gflags
1938include ("cmake/External/gflags.cmake" )
20- include_directories ( SYSTEM ${GFLAGS_INCLUDE_DIRS} )
21- list (APPEND Caffe_LINKER_LIBS ${GFLAGS_LIBRARIES} )
39+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${GFLAGS_INCLUDE_DIRS} )
40+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${GFLAGS_LIBRARIES} )
2241
2342# ---[ Google-protobuf
2443include (cmake/ProtoBuf.cmake)
2544
2645# ---[ HDF5
2746find_package (HDF5 COMPONENTS HL REQUIRED)
28- include_directories ( SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR } )
29- list (APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES} )
47+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${HDF5_INCLUDE_DIRS } )
48+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES} )
3049
3150# ---[ LMDB
3251if (USE_LMDB)
3352 find_package (LMDB REQUIRED)
34- include_directories ( SYSTEM ${LMDB_INCLUDE_DIR} )
35- list (APPEND Caffe_LINKER_LIBS ${LMDB_LIBRARIES} )
36- add_definitions ( -DUSE_LMDB)
53+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${LMDB_INCLUDE_DIR} )
54+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${LMDB_LIBRARIES} )
55+ list ( APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LMDB)
3756 if (ALLOW_LMDB_NOLOCK)
38- add_definitions ( -DALLOW_LMDB_NOLOCK)
57+ list ( APPEND Caffe_DEFINITIONS PRIVATE -DALLOW_LMDB_NOLOCK)
3958 endif ()
4059endif ()
4160
4261# ---[ LevelDB
4362if (USE_LEVELDB)
4463 find_package (LevelDB REQUIRED)
45- include_directories ( SYSTEM ${LevelDB_INCLUDE } )
46- list (APPEND Caffe_LINKER_LIBS ${LevelDB_LIBRARIES} )
47- add_definitions ( -DUSE_LEVELDB)
64+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${LevelDB_INCLUDES } )
65+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${LevelDB_LIBRARIES} )
66+ list ( APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LEVELDB)
4867endif ()
4968
5069# ---[ Snappy
5170if (USE_LEVELDB)
5271 find_package (Snappy REQUIRED)
53- include_directories ( SYSTEM ${Snappy_INCLUDE_DIR} )
54- list (APPEND Caffe_LINKER_LIBS ${Snappy_LIBRARIES} )
72+ list ( APPEND Caffe_INCLUDE_DIRS PRIVATE ${Snappy_INCLUDE_DIR} )
73+ list (APPEND Caffe_LINKER_LIBS PRIVATE ${Snappy_LIBRARIES} )
5574endif ()
5675
5776# ---[ CUDA
@@ -63,8 +82,7 @@ if(NOT HAVE_CUDA)
6382 message (WARNING "-- CUDA is not detected by cmake. Building without it..." )
6483 endif ()
6584
66- # TODO: remove this not cross platform define in future. Use caffe_config.h instead.
67- add_definitions (-DCPU_ONLY)
85+ list (APPEND Caffe_DEFINITIONS PUBLIC -DCPU_ONLY)
6886endif ()
6987
7088if (USE_NCCL)
@@ -80,10 +98,10 @@ if(USE_OPENCV)
8098 if (NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
8199 find_package (OpenCV REQUIRED COMPONENTS core highgui imgproc)
82100 endif ()
83- include_directories ( SYSTEM ${OpenCV_INCLUDE_DIRS} )
84- list (APPEND Caffe_LINKER_LIBS ${OpenCV_LIBS} )
101+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenCV_INCLUDE_DIRS} )
102+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${OpenCV_LIBS} )
85103 message (STATUS "OpenCV found (${OpenCV_CONFIG_PATH} )" )
86- add_definitions ( -DUSE_OPENCV)
104+ list ( APPEND Caffe_DEFINITIONS PUBLIC -DUSE_OPENCV)
87105endif ()
88106
89107# ---[ BLAS
@@ -93,26 +111,26 @@ if(NOT APPLE)
93111
94112 if (BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas" )
95113 find_package (Atlas REQUIRED)
96- include_directories ( SYSTEM ${Atlas_INCLUDE_DIR} )
97- list (APPEND Caffe_LINKER_LIBS ${Atlas_LIBRARIES} )
114+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${Atlas_INCLUDE_DIR} )
115+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${Atlas_LIBRARIES} )
98116 elseif (BLAS STREQUAL "Open" OR BLAS STREQUAL "open" )
99117 find_package (OpenBLAS REQUIRED)
100- include_directories ( SYSTEM ${OpenBLAS_INCLUDE_DIR} )
101- list (APPEND Caffe_LINKER_LIBS ${OpenBLAS_LIB} )
118+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenBLAS_INCLUDE_DIR} )
119+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${OpenBLAS_LIB} )
102120 elseif (BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl" )
103121 find_package (MKL REQUIRED)
104- include_directories ( SYSTEM ${MKL_INCLUDE_DIR} )
105- list (APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES} )
106- add_definitions ( -DUSE_MKL)
122+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${MKL_INCLUDE_DIR} )
123+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${MKL_LIBRARIES} )
124+ list ( APPEND Caffe_DEFINITIONS PUBLIC -DUSE_MKL)
107125 endif ()
108126elseif (APPLE )
109127 find_package (vecLib REQUIRED)
110- include_directories ( SYSTEM ${vecLib_INCLUDE_DIR} )
111- list (APPEND Caffe_LINKER_LIBS ${vecLib_LINKER_LIBS} )
128+ list ( APPEND Caffe_INCLUDE_DIRS PUBLIC ${vecLib_INCLUDE_DIR} )
129+ list (APPEND Caffe_LINKER_LIBS PUBLIC ${vecLib_LINKER_LIBS} )
112130
113131 if (VECLIB_FOUND)
114132 if (NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*" )
115- add_definitions ( -DUSE_ACCELERATE)
133+ list ( APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE)
116134 endif ()
117135 endif ()
118136endif ()
@@ -156,9 +174,9 @@ if(BUILD_python)
156174 if (PYTHONLIBS_FOUND AND NUMPY_FOUND AND Boost_PYTHON_FOUND)
157175 set (HAVE_PYTHON TRUE )
158176 if (BUILD_python_layer)
159- add_definitions ( -DWITH_PYTHON_LAYER)
160- include_directories ( SYSTEM ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} )
161- list (APPEND Caffe_LINKER_LIBS ${PYTHON_LIBRARIES} ${Boost_LIBRARIES} )
177+ list ( APPEND Caffe_DEFINITIONS PRIVATE -DWITH_PYTHON_LAYER)
178+ list ( APPEND Caffe_INCLUDE_DIRS PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} PUBLIC ${Boost_INCLUDE_DIRS} )
179+ list (APPEND Caffe_LINKER_LIBS PRIVATE ${PYTHON_LIBRARIES} PUBLIC ${Boost_LIBRARIES} )
162180 endif ()
163181 endif ()
164182endif ()
0 commit comments