"llm/vscode:/vscode.git/clone" did not exist on "93956826ffb358682f140ed9cb932553fff41cc5"
CMakeLists.txt 39 KB
Newer Older
1
2
3
4
5
#
# This is a CMake makefile.  You can find the cmake utility and
# information about it at http://www.cmake.org
#

6

7
cmake_minimum_required(VERSION 2.8.12)
8
project(dlib)
9

10
11
12
13
14
15
16
17
18
19
20
set(CPACK_PACKAGE_NAME "dlib")
set(CPACK_PACKAGE_VERSION_MAJOR "19")
set(CPACK_PACKAGE_VERSION_MINOR "13")
set(CPACK_PACKAGE_VERSION_PATCH "99")
set(VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
# Only print these messages once, even if dlib is added multiple times via add_subdirectory()
if (NOT TARGET dlib)
   message(STATUS "Using CMake version: ${CMAKE_VERSION}")
   message(STATUS "Compiling dlib version: ${VERSION}")
endif()

21
22
23
24

include(cmake_utils/set_compiler_specific_options.cmake)


David Seifert's avatar
David Seifert committed
25
26
27
# Adhere to GNU filesystem layout conventions
include(GNUInstallDirs)

Davis King's avatar
Davis King committed
28
29
30
31
32
33
if (POLICY CMP0063)
   # This policy tells cmake to really honor CXX_VISIBILITY_PRESET rather than
   # ignore it for backwards compatibility.
   cmake_policy(SET CMP0063 NEW)
endif()

34
# default to a Release build (except if CMAKE_BUILD_TYPE is set)
35
36
include(cmake_utils/release_build_by_default)
include(cmake_utils/use_cpp_11.cmake)
37

38
39
40
41
# Set DLIB_VERSION in the including CMake file so they can use it to do whatever they want. 
get_directory_property(has_parent PARENT_DIRECTORY)
if(has_parent)
   set(DLIB_VERSION ${VERSION} PARENT_SCOPE)
42
43
44
   if (NOT DEFINED DLIB_IN_PROJECT_BUILD)
      set(DLIB_IN_PROJECT_BUILD true)
   endif()
45
endif()
46

47
if (DLIB_IN_PROJECT_BUILD)
Davis King's avatar
Davis King committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61

   # Check if we are being built as part of a pybind11 module. 
   if (COMMAND pybind11_add_module)
      set(CMAKE_POSITION_INDEPENDENT_CODE True)
      if (CMAKE_COMPILER_IS_GNUCXX)
         # Just setting CMAKE_POSITION_INDEPENDENT_CODE should be enough to set
         # -fPIC for GCC but sometimes it still doesn't get set, so make sure it
         # does.
         add_definitions("-fPIC")
      endif()
      # Make DLIB_ASSERT statements not abort the python interpreter, but just return an error.
      list(APPEND active_preprocessor_switches "-DDLIB_NO_ABORT_ON_2ND_FATAL_ERROR")
   endif()

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
   # DLIB_IN_PROJECT_BUILD==true means you are using dlib by invoking
   # add_subdirectory(dlib) in the parent project. In this case, we always want
   # to build dlib as a static library so the parent project doesn't need to
   # deal with some random dlib shared library file.  It is much better to
   # statically compile dlib into the parent project.  So the following bit of
   # CMake ensures that happens.  However, we have to take care to compile dlib
   # with position independent code if appropriate (i.e. if the parent project
   # is a shared library).
   if (BUILD_SHARED_LIBS)
      if (CMAKE_COMPILER_IS_GNUCXX)
         # Just setting CMAKE_POSITION_INDEPENDENT_CODE should be enough to set
         # -fPIC for GCC but sometimes it still doesn't get set, so make sure it
         # does.
         add_definitions("-fPIC")
      endif()
      set(CMAKE_POSITION_INDEPENDENT_CODE true)
   endif()

   # Tell cmake to build dlib as a static library
   set(BUILD_SHARED_LIBS false)
endif()


85
86
87
88
89
90
91
92
if (CMAKE_VERSION VERSION_LESS "3.9.0")
   # Set only because there are old target_link_libraries() statements in the
   # FindCUDA.cmake file that comes with CMake that error out if the new behavior
   # is used.  In newer versions of CMake we can instead set CUDA_LINK_LIBRARIES_KEYWORD which fixes this issue.
   cmake_policy(SET CMP0023 OLD)
else()
   set(CUDA_LINK_LIBRARIES_KEYWORD PUBLIC)
endif()
93

94

95
96
97
macro (enable_preprocessor_switch option_name)
   list(APPEND active_preprocessor_switches "-D${option_name}")
endmacro()
98

99
100
101
macro (disable_preprocessor_switch option_name)
   if (active_preprocessor_switches)
      list(REMOVE_ITEM active_preprocessor_switches "-D${option_name}")
102
   endif()
103
endmacro()
104

105
106
macro (toggle_preprocessor_switch option_name)
   if (${option_name})
107
      enable_preprocessor_switch(${option_name})
108
   else()
109
      disable_preprocessor_switch(${option_name})
110
111
   endif()
endmacro()
112

113

114

115
116
# Suppress superfluous randlib warnings about libdlib.a having no symbols on MacOSX.
if (APPLE)
Davis King's avatar
Davis King committed
117
118
119
120
   set(CMAKE_C_ARCHIVE_CREATE   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
   set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
   set(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
   set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
121
122
endif()

123
124
125
126
127
128
129
130
131
# Don't try to call add_library(dlib) and setup dlib's stuff if it has already
# been done by some other part of the current cmake project.  We do this
# because it avoids getting warnings/errors about cmake policy CMP0002.  This
# happens when a project tries to call add_subdirectory() on dlib more than
# once.  This most often happens when the top level of a project depends on two
# or more other things which both depend on dlib. 
if (NOT TARGET dlib)

   set (DLIB_ISO_CPP_ONLY_STR 
Davis King's avatar
Davis King committed
132
      "Enable this if you don't want to compile any non-ISO C++ code (i.e. you don't use any of the API Wrappers)" )
133
   set (DLIB_NO_GUI_SUPPORT_STR 
Davis King's avatar
Davis King committed
134
      "Enable this if you don't want to compile any of the dlib GUI code" )
135
   set (DLIB_ENABLE_STACK_TRACE_STR 
Davis King's avatar
Davis King committed
136
      "Enable this if you want to turn on the DLIB_STACK_TRACE macros" )
137
   set (DLIB_USE_BLAS_STR
Davis King's avatar
Davis King committed
138
      "Disable this if you don't want to use a BLAS library" )
139
   set (DLIB_USE_LAPACK_STR
Davis King's avatar
Davis King committed
140
      "Disable this if you don't want to use a LAPACK library" )
141
   set (DLIB_USE_CUDA_STR
Davis King's avatar
Davis King committed
142
      "Disable this if you don't want to use NVIDIA CUDA" )
143
   set (DLIB_USE_MKL_SEQUENTIAL_STR
Davis King's avatar
Davis King committed
144
      "Enable this if you have MKL installed and want to use the sequential version instead of the multi-core version." )
145
   set (DLIB_PNG_SUPPORT_STR
Davis King's avatar
Davis King committed
146
      "Disable this if you don't want to link against libpng" )
147
   set (DLIB_GIF_SUPPORT_STR
Davis King's avatar
Davis King committed
148
      "Disable this if you don't want to link against libgif" )
149
   set (DLIB_JPEG_SUPPORT_STR
Davis King's avatar
Davis King committed
150
      "Disable this if you don't want to link against libjpeg" )
151
   set (DLIB_LINK_WITH_SQLITE3_STR
Davis King's avatar
Davis King committed
152
      "Disable this if you don't want to link against sqlite3" )
153
   #set (DLIB_USE_FFTW_STR "Disable this if you don't want to link against fftw" )
Duncan Palmer's avatar
Duncan Palmer committed
154
   set (DLIB_USE_MKL_FFT_STR
Davis King's avatar
Davis King committed
155
      "Disable this is you don't want to use the MKL DFTI FFT implementation" )
156
   set (DLIB_ENABLE_ASSERTS_STR
Davis King's avatar
Davis King committed
157
      "Enable this if you want to turn on the DLIB_ASSERT macro" )
158

159

160
   option(DLIB_ENABLE_ASSERTS ${DLIB_ENABLE_ASSERTS_STR} OFF)
161
   option(DLIB_ISO_CPP_ONLY ${DLIB_ISO_CPP_ONLY_STR} OFF)
162
   toggle_preprocessor_switch(DLIB_ISO_CPP_ONLY)
163
   option(DLIB_NO_GUI_SUPPORT ${DLIB_NO_GUI_SUPPORT_STR} OFF)
164
   toggle_preprocessor_switch(DLIB_NO_GUI_SUPPORT)
165
   option(DLIB_ENABLE_STACK_TRACE ${DLIB_ENABLE_STACK_TRACE_STR} OFF)
166
   toggle_preprocessor_switch(DLIB_ENABLE_STACK_TRACE)
167
   option(DLIB_USE_MKL_SEQUENTIAL ${DLIB_USE_MKL_SEQUENTIAL_STR} OFF)
168

169
   if(DLIB_ENABLE_ASSERTS)
170
171
172
173
      # Set these variables so they are set in the config.h.in file when dlib
      # is installed.
      set (DLIB_DISABLE_ASSERTS false)
      set (ENABLE_ASSERTS true) 
174
175
      enable_preprocessor_switch(ENABLE_ASSERTS)
      disable_preprocessor_switch(DLIB_DISABLE_ASSERTS)
176
177
178
179
180
   else()
      # Set these variables so they are set in the config.h.in file when dlib
      # is installed.
      set (DLIB_DISABLE_ASSERTS true)
      set (ENABLE_ASSERTS false) 
181
      disable_preprocessor_switch(ENABLE_ASSERTS)
182
183
184
185
186
187
188
189
190
191
192
193
194
195
      # Never force the asserts off when doing an in project build.  The only
      # time this matters is when using visual studio.  The visual studio IDE
      # has a drop down that lets the user select either release or debug
      # builds.  The DLIB_ASSERT macro is setup to enable/disable automatically
      # based on this drop down (via preprocessor magic).  However, if
      # DLIB_DISABLE_ASSERTS is defined it permanently disables asserts no
      # matter what, which would defeat the visual studio drop down.  So here
      # we make a point to not do that kind of severe disabling when in a
      # project build.  It should also be pointed out that DLIB_DISABLE_ASSERTS
      # is only needed when building and installing dlib as a separately
      # installed library.  It doesn't matter when doing an in project build. 
      if (NOT DLIB_IN_PROJECT_BUILD)
         enable_preprocessor_switch(DLIB_DISABLE_ASSERTS)
      endif()
196
197
198
199
200
201
202
203
204
   endif()

   if (DLIB_ISO_CPP_ONLY)
      option(DLIB_JPEG_SUPPORT ${DLIB_JPEG_SUPPORT_STR} OFF)
      option(DLIB_LINK_WITH_SQLITE3 ${DLIB_LINK_WITH_SQLITE3_STR} OFF)
      option(DLIB_USE_BLAS ${DLIB_USE_BLAS_STR} OFF)
      option(DLIB_USE_LAPACK ${DLIB_USE_LAPACK_STR} OFF)
      option(DLIB_USE_CUDA ${DLIB_USE_CUDA_STR} OFF)
      option(DLIB_PNG_SUPPORT ${DLIB_PNG_SUPPORT_STR} OFF)
205
      option(DLIB_GIF_SUPPORT ${DLIB_GIF_SUPPORT_STR} OFF)
206
      #option(DLIB_USE_FFTW ${DLIB_USE_FFTW_STR} OFF)
Duncan Palmer's avatar
Duncan Palmer committed
207
      option(DLIB_USE_MKL_FFT ${DLIB_USE_MKL_FFT_STR} OFF)
208
   else()
209
210
211
212
213
214
      option(DLIB_JPEG_SUPPORT ${DLIB_JPEG_SUPPORT_STR} ON)
      option(DLIB_LINK_WITH_SQLITE3 ${DLIB_LINK_WITH_SQLITE3_STR} ON)
      option(DLIB_USE_BLAS ${DLIB_USE_BLAS_STR} ON)
      option(DLIB_USE_LAPACK ${DLIB_USE_LAPACK_STR} ON)
      option(DLIB_USE_CUDA ${DLIB_USE_CUDA_STR} ON)
      option(DLIB_PNG_SUPPORT ${DLIB_PNG_SUPPORT_STR} ON)
215
      option(DLIB_GIF_SUPPORT ${DLIB_GIF_SUPPORT_STR} ON)
216
      #option(DLIB_USE_FFTW ${DLIB_USE_FFTW_STR} ON)
Duncan Palmer's avatar
Duncan Palmer committed
217
      option(DLIB_USE_MKL_FFT ${DLIB_USE_MKL_FFT_STR} ON)
218
   endif()
219
220
221
222
223
   toggle_preprocessor_switch(DLIB_JPEG_SUPPORT)
   toggle_preprocessor_switch(DLIB_USE_BLAS)
   toggle_preprocessor_switch(DLIB_USE_LAPACK)
   toggle_preprocessor_switch(DLIB_USE_CUDA)
   toggle_preprocessor_switch(DLIB_PNG_SUPPORT) 
224
   toggle_preprocessor_switch(DLIB_GIF_SUPPORT) 
225
   #toggle_preprocessor_switch(DLIB_USE_FFTW)
Duncan Palmer's avatar
Duncan Palmer committed
226
   toggle_preprocessor_switch(DLIB_USE_MKL_FFT)
227

228

229
   set(source_files 
Davis King's avatar
Davis King committed
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
      base64/base64_kernel_1.cpp
      bigint/bigint_kernel_1.cpp
      bigint/bigint_kernel_2.cpp
      bit_stream/bit_stream_kernel_1.cpp
      entropy_decoder/entropy_decoder_kernel_1.cpp
      entropy_decoder/entropy_decoder_kernel_2.cpp
      entropy_encoder/entropy_encoder_kernel_1.cpp
      entropy_encoder/entropy_encoder_kernel_2.cpp
      md5/md5_kernel_1.cpp
      tokenizer/tokenizer_kernel_1.cpp
      unicode/unicode.cpp
      data_io/image_dataset_metadata.cpp
      data_io/mnist.cpp
      global_optimization/global_function_search.cpp
      filtering/kalman_filter.cpp
      test_for_odr_violations.cpp
Davis King's avatar
Davis King committed
246
      svm/auto.cpp
Davis King's avatar
Davis King committed
247
      )
Davis King's avatar
Davis King committed
248

249

250
251
252
   set(dlib_needed_libraries)
   set(dlib_needed_includes)

253
   if (DLIB_ISO_CPP_ONLY)
Davis King's avatar
Davis King committed
254
      add_library(dlib ${source_files} )
255
   else()
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281

      set(source_files ${source_files}
         sockets/sockets_kernel_1.cpp
         bsp/bsp.cpp
         dir_nav/dir_nav_kernel_1.cpp
         dir_nav/dir_nav_kernel_2.cpp
         dir_nav/dir_nav_extensions.cpp
         linker/linker_kernel_1.cpp
         logger/extra_logger_headers.cpp
         logger/logger_kernel_1.cpp
         logger/logger_config_file.cpp
         misc_api/misc_api_kernel_1.cpp
         misc_api/misc_api_kernel_2.cpp
         sockets/sockets_extensions.cpp
         sockets/sockets_kernel_2.cpp
         sockstreambuf/sockstreambuf.cpp
         sockstreambuf/sockstreambuf_unbuffered.cpp
         server/server_kernel.cpp
         server/server_iostream.cpp
         server/server_http.cpp
         threads/multithreaded_object_extension.cpp
         threads/threaded_object_extension.cpp
         threads/threads_kernel_1.cpp
         threads/threads_kernel_2.cpp
         threads/threads_kernel_shared.cpp
         threads/thread_pool_extension.cpp
282
         threads/async.cpp
283
284
         timer/timer.cpp
         stack_trace.cpp
285
286
         cuda/cpu_dlib.cpp
         cuda/tensor_tools.cpp
287
288
         )

289
290
291
292
293
294
      if(UNIX)
         set(CMAKE_THREAD_PREFER_PTHREAD ON)
         find_package(Threads REQUIRED)
         set(dlib_needed_libraries ${dlib_needed_libraries} ${CMAKE_THREAD_LIBS_INIT})
      endif()

295
296
297
      # we want to link to the right stuff depending on our platform.  
      if (WIN32 AND NOT CYGWIN) ###############################################################################
         if (DLIB_NO_GUI_SUPPORT)
298
            set (dlib_needed_libraries ws2_32 winmm)
299
         else()
300
            set (dlib_needed_libraries ws2_32 winmm comctl32 gdi32 imm32)
301
302
         endif()
      elseif(APPLE) ############################################################################
Davis King's avatar
Davis King committed
303
         set(CMAKE_MACOSX_RPATH 1)
304
         if (NOT DLIB_NO_GUI_SUPPORT)
305
306
            find_package(X11 QUIET)
            if (X11_FOUND)
307
               # If both X11 and anaconda are installed, it's possible for the
Davis King's avatar
merged  
Davis King committed
308
309
               # anaconda path to appear before /opt/X11, so we remove anaconda.
               foreach (ITR ${X11_INCLUDE_DIR})
310
                  if ("${ITR}" MATCHES "(.*)(Ana|ana|mini)conda(.*)")
311
                     list (REMOVE_ITEM X11_INCLUDE_DIR ${ITR})
Davis King's avatar
merged  
Davis King committed
312
                  endif ()
313
               endforeach(ITR)
314
315
               include_directories(${X11_INCLUDE_DIR})
               set (dlib_needed_libraries ${dlib_needed_libraries} ${X11_LIBRARIES})
316
            else()
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
               find_library(xlib X11)
               # Make sure X11 is in the include path.  Note that we look for
               # Xlocale.h rather than Xlib.h because it avoids finding a partial
               # copy of the X11 headers on systems with anaconda installed.
               find_path(xlib_path Xlocale.h
                  PATHS 
                  /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include
                  /opt/local/include
                  PATH_SUFFIXES X11
                  )
               if (xlib AND xlib_path)
                  get_filename_component(x11_path ${xlib_path} PATH CACHE)
                  include_directories(${x11_path})
                  set(dlib_needed_libraries ${dlib_needed_libraries} ${xlib} )
                  set(X11_FOUND 1)
               endif()
            endif()
            if (NOT X11_FOUND)
335
336
               message(" *****************************************************************************")
               message(" *** DLIB GUI SUPPORT DISABLED BECAUSE X11 DEVELOPMENT LIBRARIES NOT FOUND ***")
337
               message(" *** Make sure XQuartz is installed if you want GUI support.               ***")
Davis King's avatar
Davis King committed
338
               message(" *** You can download XQuartz from: https://www.xquartz.org/               ***")
339
               message(" *****************************************************************************")
340
               set(DLIB_NO_GUI_SUPPORT ON CACHE STRING ${DLIB_NO_GUI_SUPPORT_STR} FORCE )
341
               enable_preprocessor_switch(DLIB_NO_GUI_SUPPORT)
342
            endif()
343
344
         endif()

345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
         mark_as_advanced(pthreadlib xlib xlib_path x11_path)
      else () ##################################################################################
         # link to the nsl library if it exists.  this is something you need sometimes 
         find_library(nsllib nsl)
         if (nsllib)
            set (dlib_needed_libraries ${dlib_needed_libraries} ${nsllib})
         endif ()

         # link to the socket library if it exists.  this is something you need on solaris
         find_library(socketlib socket)
         if (socketlib)
            set (dlib_needed_libraries ${dlib_needed_libraries} ${socketlib})
         endif ()

         if (NOT DLIB_NO_GUI_SUPPORT)
            include(FindX11)
            if (X11_FOUND)
               include_directories(${X11_INCLUDE_DIR})
               set (dlib_needed_libraries ${dlib_needed_libraries} ${X11_LIBRARIES})
            else()
365
366
               message(" *****************************************************************************")
               message(" *** DLIB GUI SUPPORT DISABLED BECAUSE X11 DEVELOPMENT LIBRARIES NOT FOUND ***")
367
368
               message(" *** Make sure libx11-dev is installed if you want GUI support.            ***")
               message(" *** On Ubuntu run: sudo apt-get install libx11-dev                        ***")
369
               message(" *****************************************************************************")
370
               set(DLIB_NO_GUI_SUPPORT ON CACHE STRING ${DLIB_NO_GUI_SUPPORT_STR} FORCE )
371
               enable_preprocessor_switch(DLIB_NO_GUI_SUPPORT)
372
            endif()
373
374
         endif()

375
376
         mark_as_advanced(nsllib pthreadlib socketlib)
      endif () ##################################################################################
377

378
379
380
381
382
383
384
385
386
387
388
389
      if (NOT DLIB_NO_GUI_SUPPORT)
         set(source_files ${source_files}
            gui_widgets/fonts.cpp
            gui_widgets/widgets.cpp
            gui_widgets/drawable.cpp
            gui_widgets/canvas_drawing.cpp
            gui_widgets/style.cpp
            gui_widgets/base_widgets.cpp
            gui_core/gui_core_kernel_1.cpp
            gui_core/gui_core_kernel_2.cpp
            )
      endif()
390

391
      INCLUDE (CheckFunctionExists)
392

393
394
395
      if (DLIB_GIF_SUPPORT)
         find_package(GIF QUIET)
         if (GIF_FOUND)
396
            set (dlib_needed_includes ${dlib_needed_includes} ${GIF_INCLUDE_DIR})
397
398
399
400
401
402
403
            set (dlib_needed_libraries ${dlib_needed_libraries} ${GIF_LIBRARY})
         else()
            set(DLIB_GIF_SUPPORT OFF CACHE STRING ${DLIB_GIF_SUPPORT_STR} FORCE )
            toggle_preprocessor_switch(DLIB_GIF_SUPPORT)
         endif()
      endif()

404
      if (DLIB_PNG_SUPPORT)
405
         # try to find libpng 
Davis King's avatar
Davis King committed
406
         find_package(PNG QUIET)
407
408
         # Make sure there isn't something wrong with the version of LIBPNG
         # installed on this system.  
409
         if (PNG_FOUND)
410
            set(CMAKE_REQUIRED_LIBRARIES ${PNG_LIBRARIES})
411
412
            CHECK_FUNCTION_EXISTS(png_create_read_struct LIBPNG_IS_GOOD)
         endif()
413
         if (PNG_FOUND AND LIBPNG_IS_GOOD)
414
            include_directories(${PNG_INCLUDE_DIR})
415
            set (dlib_needed_libraries ${dlib_needed_libraries} ${PNG_LIBRARIES})
416
            set(REQUIRES_LIBS " libpng")
417
         else()
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
            # If we can't find libpng then statically compile it in.
            include_directories(external/libpng external/zlib)
            set(source_files ${source_files}
               external/libpng/png.c
               external/libpng/pngerror.c
               external/libpng/pngget.c
               external/libpng/pngmem.c
               external/libpng/pngpread.c
               external/libpng/pngread.c
               external/libpng/pngrio.c
               external/libpng/pngrtran.c
               external/libpng/pngrutil.c
               external/libpng/pngset.c
               external/libpng/pngtrans.c
               external/libpng/pngwio.c
               external/libpng/pngwrite.c
               external/libpng/pngwtran.c
               external/libpng/pngwutil.c
               external/zlib/adler32.c
               external/zlib/compress.c
               external/zlib/crc32.c
               external/zlib/deflate.c
               external/zlib/gzclose.c
               external/zlib/gzlib.c
               external/zlib/gzread.c
               external/zlib/gzwrite.c
               external/zlib/infback.c
               external/zlib/inffast.c
               external/zlib/inflate.c
               external/zlib/inftrees.c
               external/zlib/trees.c
               external/zlib/uncompr.c
               external/zlib/zutil.c
               )
452
453

            include(cmake_utils/check_if_neon_available.cmake)
454
455
            if (ARM_NEON_IS_AVAILABLE)
               message (STATUS "NEON instructions will be used for libpng.")
456
457
458
459
460
461
462
463
               enable_language(ASM)
               set(source_files ${source_files}
                  external/libpng/arm/arm_init.c
                  external/libpng/arm/filter_neon_intrinsics.c
                  external/libpng/arm/filter_neon.S
                  )
               set_source_files_properties(external/libpng/arm/filter_neon.S PROPERTIES COMPILE_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_CXX_FLAGS} -x assembler-with-cpp")
            endif()
464
            set(REQUIRES_LIBS "")
465
         endif()
466
467
468
469
         set(source_files ${source_files}
            image_loader/png_loader.cpp
            image_saver/save_png.cpp
            )
470
      endif()
471

472
      if (DLIB_JPEG_SUPPORT)
473
         # try to find libjpeg 
474
         find_package(JPEG QUIET)
475
         # Make sure there isn't something wrong with the version of libjpeg 
476
477
         # installed on this system.  Also don't use the installed libjpeg
         # if this is an APPLE system because apparently it's broken (as of 2015/01/01).
478
         if (JPEG_FOUND AND NOT ("${JPEG_INCLUDE_DIR}" MATCHES "(.*)(Ana|ana|mini)conda(.*)"))
479
480
481
            set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARY})
            CHECK_FUNCTION_EXISTS(jpeg_read_header LIBJPEG_IS_GOOD)
         endif()
482
         if (JPEG_FOUND AND LIBJPEG_IS_GOOD AND NOT APPLE)
483
484
485
            include_directories(${JPEG_INCLUDE_DIR})
            set (dlib_needed_libraries ${dlib_needed_libraries} ${JPEG_LIBRARY})
         else()
486
            # If we can't find libjpeg then statically compile it in.
487
            add_definitions(-DDLIB_JPEG_STATIC)
488
            set(source_files ${source_files}
Davis King's avatar
Davis King committed
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
               external/libjpeg/jcomapi.cpp
               external/libjpeg/jdapimin.cpp
               external/libjpeg/jdapistd.cpp
               external/libjpeg/jdatasrc.cpp
               external/libjpeg/jdcoefct.cpp
               external/libjpeg/jdcolor.cpp
               external/libjpeg/jddctmgr.cpp
               external/libjpeg/jdhuff.cpp
               external/libjpeg/jdinput.cpp
               external/libjpeg/jdmainct.cpp
               external/libjpeg/jdmarker.cpp
               external/libjpeg/jdmaster.cpp
               external/libjpeg/jdmerge.cpp
               external/libjpeg/jdphuff.cpp
               external/libjpeg/jdpostct.cpp
               external/libjpeg/jdsample.cpp
               external/libjpeg/jerror.cpp
               external/libjpeg/jidctflt.cpp
               external/libjpeg/jidctfst.cpp
               external/libjpeg/jidctint.cpp
               external/libjpeg/jidctred.cpp
               external/libjpeg/jmemmgr.cpp
               external/libjpeg/jmemnobs.cpp
               external/libjpeg/jquant1.cpp
               external/libjpeg/jquant2.cpp
               external/libjpeg/jutils.cpp  
               external/libjpeg/jcapimin.cpp
               external/libjpeg/jdatadst.cpp
               external/libjpeg/jcparam.cpp
               external/libjpeg/jcapistd.cpp
               external/libjpeg/jcmarker.cpp
               external/libjpeg/jcinit.cpp
               external/libjpeg/jcmaster.cpp
               external/libjpeg/jcdctmgr.cpp
               external/libjpeg/jccoefct.cpp  
               external/libjpeg/jccolor.cpp  
               external/libjpeg/jchuff.cpp  
               external/libjpeg/jcmainct.cpp  
               external/libjpeg/jcphuff.cpp  
               external/libjpeg/jcprepct.cpp  
               external/libjpeg/jcsample.cpp
               external/libjpeg/jfdctint.cpp
               external/libjpeg/jfdctflt.cpp
               external/libjpeg/jfdctfst.cpp
               )
534
         endif()
535
536
         set(source_files ${source_files}
            image_loader/jpeg_loader.cpp
Davis King's avatar
Davis King committed
537
            image_saver/save_jpeg.cpp
538
            )
539
540
      endif()

541

542
      if (DLIB_USE_BLAS OR DLIB_USE_LAPACK OR DLIB_USE_MKL_FFT)
Davis King's avatar
Davis King committed
543
         # Try to find BLAS, LAPACK and MKL
Davis King's avatar
Davis King committed
544
         include(cmake_utils/find_blas.cmake)
545

546
547
548
549
550
         if (DLIB_USE_BLAS)
            if (blas_found)
               set (dlib_needed_libraries ${dlib_needed_libraries} ${blas_libraries})
            else()
               set(DLIB_USE_BLAS OFF CACHE STRING ${DLIB_USE_BLAS_STR} FORCE )
551
               toggle_preprocessor_switch(DLIB_USE_BLAS)
552
            endif()
553
554
         endif()

555
556
557
         if (DLIB_USE_LAPACK)
            if (lapack_found)
               set (dlib_needed_libraries ${dlib_needed_libraries} ${lapack_libraries})
558
559
560
561
562
563
564
               if (lapack_with_underscore)
                  set(LAPACK_FORCE_UNDERSCORE 1)
                  enable_preprocessor_switch(LAPACK_FORCE_UNDERSCORE)
               elseif (lapack_without_underscore)
                  set(LAPACK_FORCE_NOUNDERSCORE 1)
                  enable_preprocessor_switch(LAPACK_FORCE_NOUNDERSCORE)
               endif ()
565
566
            else()
               set(DLIB_USE_LAPACK OFF CACHE STRING ${DLIB_USE_LAPACK_STR} FORCE )
567
               toggle_preprocessor_switch(DLIB_USE_LAPACK)
568
            endif()
569
         endif()
570

571
         if (DLIB_USE_MKL_FFT)
572
            if (found_intel_mkl AND found_intel_mkl_headers)
573
               set (dlib_needed_includes ${dlib_needed_includes} ${mkl_include_dir})
574
575
576
577
578
579
               set (dlib_needed_libraries ${dlib_needed_libraries} ${mkl_libraries})
            else()
               set(DLIB_USE_MKL_FFT OFF CACHE STRING ${DLIB_USE_MKL_FFT_STR} FORCE )
               toggle_preprocessor_switch(DLIB_USE_MKL_FFT)
            endif()
         endif()
Duncan Palmer's avatar
Duncan Palmer committed
580
581
      endif()

582

583
      if (DLIB_USE_CUDA)
584
         find_package(CUDA 7.5)
585

586
587
588
589
         if (CUDA_FOUND AND MSVC AND NOT CUDA_CUBLAS_LIBRARIES AND "${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
            message(WARNING "You have CUDA installed, but we can't use it unless you put visual studio in 64bit mode.")
            set(CUDA_FOUND 0)
         endif()
590

591
         if (CUDA_FOUND AND (NOT USING_OLD_VISUAL_STUDIO_COMPILER))
592

593
594
595
596
            # There is some bug in cmake that causes it to mess up the
            # -std=c++11 option if you let it propagate it to nvcc in some
            # cases.  So instead we disable this and manually include
            # things from CMAKE_CXX_FLAGS in the CUDA_NVCC_FLAGS list below.
597
            if (APPLE)
598
               set(CUDA_PROPAGATE_HOST_FLAGS OFF)
599
600
               # Grab all the -D flags from CMAKE_CXX_FLAGS so we can pass them
               # to nvcc.
601
               string(REGEX MATCHALL "-D[^ ]*" FLAGS_FOR_NVCC "${CMAKE_CXX_FLAGS}")
602
603
            endif()

604

605
            set(CUDA_HOST_COMPILATION_CPP ON)
606
607
608
            # Note that we add __STRICT_ANSI__ to avoid freaking out nvcc with gcc specific
            # magic in the standard C++ header files (since nvcc uses gcc headers on
            # linux).
609
            list(APPEND CUDA_NVCC_FLAGS "-arch=sm_30;-D__STRICT_ANSI__;-D_MWAITXINTRIN_H_INCLUDED;-D_FORCE_INLINES;${FLAGS_FOR_NVCC}")
610
            list(APPEND CUDA_NVCC_FLAGS ${active_preprocessor_switches})
611
612
613
            if (NOT DLIB_IN_PROJECT_BUILD)
               LIST(APPEND CUDA_NVCC_FLAGS -DDLIB__CMAKE_GENERATED_A_CONFIG_H_FILE)
            endif()
614
615
616
            if (NOT MSVC)
               list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
            endif()
617
618
619
            if (CMAKE_POSITION_INDEPENDENT_CODE)
               # sometimes this setting isn't propagated to NVCC, which then causes the
               # compile to fail.  So make sure it's propagated.
620
621
622
               if (NOT MSVC) # Visual studio doesn't have -fPIC so don't do it in that case.
                  list(APPEND CUDA_NVCC_FLAGS "-Xcompiler -fPIC")
               endif()
623
            endif()
624

625
            include(cmake_utils/test_for_cudnn/find_cudnn.txt)
626

627
            if (cudnn AND cudnn_include AND NOT DEFINED cuda_test_compile_worked AND NOT DEFINED cudnn_test_compile_worked)
628
629
               # make sure cuda is really working by doing a test compile
               message(STATUS "Building a CUDA test project to see if your compiler is compatible with CUDA...")
630

Davis King's avatar
Davis King committed
631
632
633
634
               set(CUDA_TEST_CMAKE_FLAGS 
                  "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
                  "-DCMAKE_INCLUDE_PATH=${CMAKE_INCLUDE_PATH}"
                  "-DCMAKE_LIBRARY_PATH=${CMAKE_LIBRARY_PATH}")
635

636
               if (NOT MSVC) # see https://github.com/davisking/dlib/issues/363
637
638
639
                  list(APPEND CUDA_TEST_CMAKE_FLAGS "-DCUDA_HOST_COMPILER=${CUDA_HOST_COMPILER}")
               endif()

Davis King's avatar
Davis King committed
640
641
642
643
644
645
               try_compile(cuda_test_compile_worked 
                  ${PROJECT_BINARY_DIR}/cuda_test_build 
                  ${PROJECT_SOURCE_DIR}/cmake_utils/test_for_cuda cuda_test
                  CMAKE_FLAGS ${CUDA_TEST_CMAKE_FLAGS}
                  OUTPUT_VARIABLE try_compile_output_message
                  )
646
               if (NOT cuda_test_compile_worked)
647
648
649
650
651
652
                  string(REPLACE "\n" "\n   ***   " try_compile_output_message "${try_compile_output_message}")
                  message(STATUS "*****************************************************************************************************************")
                  message(STATUS "*** CUDA was found but your compiler failed to compile a simple CUDA program so dlib isn't going to use CUDA. ")
                  message(STATUS "*** The output of the failed CUDA test compile is shown below: ")
                  message(STATUS "***   ${try_compile_output_message}")
                  message(STATUS "*****************************************************************************************************************")
653
654
               else()
                  message(STATUS "Checking if you have the right version of cuDNN installed.")
Davis King's avatar
Davis King committed
655
656
657
658
659
                  try_compile(cudnn_test_compile_worked 
                     ${PROJECT_BINARY_DIR}/cudnn_test_build 
                     ${PROJECT_SOURCE_DIR}/cmake_utils/test_for_cudnn cudnn_test
                     CMAKE_FLAGS ${CUDA_TEST_CMAKE_FLAGS}
                     )
660
661
662
663
                  if (NOT cudnn_test_compile_worked)
                     message(STATUS "*** Found cuDNN, but it looks like the wrong version so dlib will not use it.              ***")
                     message(STATUS "*** Dlib requires cuDNN V5.0 OR GREATER.  Since cuDNN is not found DLIB WILL NOT USE CUDA. ***")
                     message(STATUS "*** If you have cuDNN then set CMAKE_PREFIX_PATH to include cuDNN's folder.                ***")
664
                  endif()
665
666
               endif()
            endif()
667

668
669
            # Find where cuSOLVER is since the FindCUDA cmake package doesn't
            # bother to look for it.
670
            get_filename_component(cuda_blas_path "${CUDA_CUBLAS_LIBRARIES}" DIRECTORY)
671
            find_library(cusolver cusolver HINTS ${cuda_blas_path})
672
673
674
675
676
677
            mark_as_advanced(cusolver)
            # Also find OpenMP since cuSOLVER needs it.  Importantly, we only
            # look for one to link to if our use of BLAS, specifically the
            # Intel MKL, hasn't already decided what to use.  This is because
            # it makes the MKL bug out if you link to another openmp lib other
            # than Intel's when you use the MKL.
678
            if (NOT openmp_libraries AND NOT MSVC AND NOT XCODE AND NOT APPLE)
679
680
               find_package(OpenMP)
               if (OPENMP_FOUND)
681
                  set(openmp_libraries ${OpenMP_CXX_FLAGS}) 
682
               else()
683
684
                  message(STATUS "*** Didn't find OpenMP, which is required to use CUDA. ***")
                  set(CUDA_FOUND 0)
685
               endif()
686
687
            endif()
         endif()
688

689
         if (CUDA_FOUND AND cudnn AND (NOT USING_OLD_VISUAL_STUDIO_COMPILER) AND cuda_test_compile_worked AND cudnn_test_compile_worked AND cudnn_include)
690
            set(source_files ${source_files} 
691
692
693
694
695
696
697
               cuda/cuda_dlib.cu 
               cuda/cudnn_dlibapi.cpp
               cuda/cublas_dlibapi.cpp
               cuda/cusolver_dlibapi.cu
               cuda/curand_dlibapi.cpp
               cuda/cuda_data_ptr.cpp
               cuda/gpu_data.cpp
698
               )
Davis King's avatar
Davis King committed
699
            set(dlib_needed_libraries ${dlib_needed_libraries} 
Davis King's avatar
Davis King committed
700
701
702
703
704
               ${CUDA_CUBLAS_LIBRARIES} 
               ${cudnn}
               ${CUDA_curand_LIBRARY}
               ${cusolver}
               )
Davis King's avatar
Davis King committed
705
            if(openmp_libraries)
706
707
               list(APPEND dlib_needed_libraries ${openmp_libraries})
            endif()
Davis King's avatar
Davis King committed
708

709
            include_directories(${cudnn_include})
710
            message(STATUS "Enabling CUDA support for dlib.  DLIB WILL USE CUDA")
711
712
         else()
            set(DLIB_USE_CUDA OFF CACHE STRING ${DLIB_USE_BLAS_STR} FORCE )
713
            toggle_preprocessor_switch(DLIB_USE_CUDA)
714
            if (USING_OLD_VISUAL_STUDIO_COMPILER)
715
               message(STATUS "*** Dlib CUDA support requires C++11 but your compiler doesn't support it. ***")
716
            endif()
717
            message(STATUS "Disabling CUDA support for dlib.  DLIB WILL NOT USE CUDA")
718
719
         endif()
      endif()
Davis King's avatar
Davis King committed
720

721

722
723
724
725
726
      if (DLIB_LINK_WITH_SQLITE3)
         find_library(sqlite sqlite3)
         # make sure sqlite3.h is in the include path
         find_path(sqlite_path sqlite3.h)
         if (sqlite AND sqlite_path)
727
            set(dlib_needed_includes ${dlib_needed_includes} ${sqlite_path})
728
729
730
731
            set(dlib_needed_libraries ${dlib_needed_libraries} ${sqlite} )
         else()
            set(DLIB_LINK_WITH_SQLITE3 OFF CACHE STRING ${DLIB_LINK_WITH_SQLITE3_STR} FORCE )
         endif()
732
         mark_as_advanced(sqlite sqlite_path)
733
734
735
      endif()


736

737
      if (DLIB_USE_FFTW)
738
739
740
741
         find_library(fftw fftw3)
         # make sure fftw3.h is in the include path
         find_path(fftw_path fftw3.h)
         if (fftw AND fftw_path)
742
            set(dlib_needed_includes ${dlib_needed_includes} ${fftw_path})
743
744
            set(dlib_needed_libraries ${dlib_needed_libraries} ${fftw} )
         else()
745
746
            set(DLIB_USE_FFTW OFF CACHE STRING ${DLIB_USE_FFTW_STR} FORCE )
            toggle_preprocessor_switch(DLIB_USE_FFTW)
747
         endif()
748
         mark_as_advanced(fftw fftw_path)
749
750
      endif()

751

752
753
754

      # Tell CMake to build dlib via add_library()/cuda_add_library()
      if (DLIB_USE_CUDA)
755
756
757
         # The old cuda_add_library() command doesn't support CMake's newer dependency
         # stuff, so we have to set the include path manually still, which we do here.
         include_directories(${dlib_needed_includes})
758
         cuda_add_library(dlib ${source_files} )
759
      else()
760
         add_library(dlib ${source_files} )
761
      endif()
762

763
   endif ()  ##### end of if NOT DLIB_ISO_CPP_ONLY ##########################################################
764

765

766
   target_include_directories(dlib
Davis King's avatar
Davis King committed
767
768
769
770
      INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
      INTERFACE $<INSTALL_INTERFACE:include>
      PUBLIC ${dlib_needed_includes}
      )
771
   target_link_libraries(dlib PUBLIC ${dlib_needed_libraries})
772
773
774
   if (DLIB_IN_PROJECT_BUILD)
      target_compile_options(dlib PUBLIC ${active_preprocessor_switches})
   else()
775
776
777
      # These are private in this case because they will be controlled by the
      # contents of dlib/config.h once it's installed. But for in project
      # builds, there is no real config.h so they are public in the above case.
778
      target_compile_options(dlib PRIVATE ${active_preprocessor_switches})
779
780
781
782
      # Do this so that dlib/config.h won't set DLIB_NOT_CONFIGURED. This will then allow
      # the code in dlib/threads_kernel_shared.cpp to emit a linker error for users who
      # don't use the configured config.h file generated by cmake.
      target_compile_options(dlib PRIVATE -DDLIB__CMAKE_GENERATED_A_CONFIG_H_FILE)
783
784
785
786

      # Do this so that dlib/config.h can record the version of dlib it's configured with
      # and ultimately issue a linker error to people who try to use a binary dlib that is
      # the wrong version.
787
788
789
      set(DLIB_CHECK_FOR_VERSION_MISMATCH 
         DLIB_VERSION_MISMATCH_CHECK__EXPECTED_VERSION_${CPACK_PACKAGE_VERSION_MAJOR}_${CPACK_PACKAGE_VERSION_MINOR}_${CPACK_PACKAGE_VERSION_PATCH})
      target_compile_options(dlib PRIVATE "-DDLIB_CHECK_FOR_VERSION_MISMATCH=${DLIB_CHECK_FOR_VERSION_MISMATCH}")
790
791
792
   endif()


793
794
   # Allow the unit tests to ask us to compile the all/source.cpp file just to make sure it compiles.
   if (DLIB_TEST_COMPILE_ALL_SOURCE_CPP)
795
      add_library(dlib_all_source_cpp STATIC all/source.cpp) 
796
      target_link_libraries(dlib_all_source_cpp dlib)
797
      target_compile_options(dlib_all_source_cpp PUBLIC ${active_preprocessor_switches})
798
799
800
      enable_cpp11_for_target(dlib_all_source_cpp)
   endif()

Davis King's avatar
Davis King committed
801
802
803
   enable_cpp11_for_target(dlib)
   if((MSVC AND CMAKE_VERSION VERSION_LESS 3.11) OR CMAKE_VERSION VERSION_LESS 3.3)
      target_compile_options(dlib PUBLIC ${active_compile_opts})
804
      target_compile_options(dlib PRIVATE ${active_compile_opts_private})
Davis King's avatar
Davis King committed
805
806
   else()
      target_compile_options(dlib PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${active_compile_opts}>)
807
      target_compile_options(dlib PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${active_compile_opts_private}>)
808
   endif()
809

810
   # Install the library
811
   if (NOT DLIB_IN_PROJECT_BUILD)
Davis King's avatar
Davis King committed
812
813
814
815
816
817
818
      set_target_properties(dlib PROPERTIES
         VERSION ${VERSION})
      install(TARGETS dlib
         EXPORT dlib 
         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # Windows considers .dll to be runtime artifacts
         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
         ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
819

Davis King's avatar
Davis King committed
820
821
822
      install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dlib
         FILES_MATCHING PATTERN "*.h" PATTERN "*.cmake"
         REGEX "${CMAKE_CURRENT_BINARY_DIR}" EXCLUDE)
823

824

Davis King's avatar
Davis King committed
825
826
827
      configure_file(${PROJECT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
      # overwrite config.h with the configured one
      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dlib)
828

Davis King's avatar
Davis King committed
829
830
      configure_file(${PROJECT_SOURCE_DIR}/revision.h.in ${CMAKE_CURRENT_BINARY_DIR}/revision.h)
      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/revision.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dlib)
831

Davis King's avatar
Davis King committed
832
      ## Config.cmake generation and installation
833

Davis King's avatar
Davis King committed
834
835
836
837
      set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/dlib")
      install(EXPORT dlib
         NAMESPACE dlib::
         DESTINATION ${ConfigPackageLocation})
838

Davis King's avatar
Davis King committed
839
      configure_file(cmake_utils/dlibConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/config/dlibConfig.cmake" @ONLY)
840

Davis King's avatar
Davis King committed
841
842
843
844
845
846
      include(CMakePackageConfigHelpers)
      write_basic_package_version_file(
         "${CMAKE_CURRENT_BINARY_DIR}/config/dlibConfigVersion.cmake"
         VERSION ${VERSION}
         COMPATIBILITY AnyNewerVersion
         )
847

Davis King's avatar
Davis King committed
848
849
850
851
      install(FILES 
         "${CMAKE_CURRENT_BINARY_DIR}/config/dlibConfig.cmake" 
         "${CMAKE_CURRENT_BINARY_DIR}/config/dlibConfigVersion.cmake" 
         DESTINATION ${ConfigPackageLocation})
852

Davis King's avatar
Davis King committed
853
      ## dlib-1.pc generation and installation
854

Davis King's avatar
Davis King committed
855
856
857
      configure_file("cmake_utils/dlib.pc.in" "dlib-1.pc" @ONLY)
      install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dlib-1.pc"
         DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
858

859
860
861
862
863
      # Add a cpack "package" target. This will create an archive containing
      # the built library file, the header files, and cmake and pkgconfig
      # configuration files.
      include(CPack)

864
865
   endif()

866
endif()
867

868
869
870
871
872
873
874
875
if (MSVC)
   # Give the output library files names that are unique functions of the
   # visual studio mode that compiled them.  We do this so that people who
   # compile dlib and then copy the .lib files around (which they shouldn't be
   # doing in the first place!) will hopefully be slightly less confused by
   # what happens since, at the very least, the filenames will indicate what
   # visual studio runtime they go with.
   math(EXPR numbits ${CMAKE_SIZEOF_VOID_P}*8)
876
877
878
879
   set_target_properties(dlib PROPERTIES DEBUG_POSTFIX "${VERSION}_debug_${numbits}bit_msvc${MSVC_VERSION}")
   set_target_properties(dlib PROPERTIES RELEASE_POSTFIX "${VERSION}_release_${numbits}bit_msvc${MSVC_VERSION}")
   set_target_properties(dlib PROPERTIES MINSIZEREL_POSTFIX "${VERSION}_minsizerel_${numbits}bit_msvc${MSVC_VERSION}")
   set_target_properties(dlib PROPERTIES RELWITHDEBINFO_POSTFIX "${VERSION}_relwithdebinfo_${numbits}bit_msvc${MSVC_VERSION}")
880
881
endif()

Davis King's avatar
Davis King committed
882
883
884
885
886
887
# Check if we are being built as part of a pybind11 module. 
if (COMMAND pybind11_add_module)
   # Don't export unnecessary symbols.
   set_target_properties(dlib PROPERTIES CXX_VISIBILITY_PRESET "hidden")
endif()

888
add_library(dlib::dlib ALIAS dlib)