CMakeLists.txt 24.3 KB
Newer Older
yuguo960516yuguo's avatar
yuguo960516yuguo committed
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
# Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License

if(APPLE AND WITH_ARM)
  # cmake 3.19.2 version starts to support M1
  cmake_minimum_required(VERSION 3.19.2)
  cmake_policy(VERSION 3.19.2)
else()
  cmake_minimum_required(VERSION 3.15)
  cmake_policy(VERSION 3.10)
endif()
# use to get_property location of static lib
# https://cmake.org/cmake/help/v3.0/policy/CMP0026.html?highlight=cmp0026
cmake_policy(SET CMP0026 OLD)
“yuguo”'s avatar
2.5  
“yuguo” committed
26
cmake_policy(SET CMP0079 NEW)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(PADDLE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(PADDLE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})

include(system)

# Note(zhouwei): Ninja Generator will set CMAKE_BUILD_TYPE to Debug
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE
      "Release"
      CACHE
        STRING
        "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel"
        FORCE)
endif()

project(paddle CXX C)

# enable language CUDA
# TODO(Shibo Tao): remove find_package(CUDA) completely.
find_package(CUDA QUIET)
find_package(MKL CONFIG QUIET)
option(WITH_ONEMKL "Compile PaddlePaddle with oneMKL" OFF)
option(WITH_GPU "Compile PaddlePaddle with NVIDIA GPU" ${CUDA_FOUND})
“yuguo”'s avatar
2.5  
“yuguo” committed
51
option(WITH_MPI "Compile PaddlePaddle with MPI" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
52
53
54
option(WITH_TENSORRT "Compile PaddlePaddle with NVIDIA TensorRT" OFF)
option(WITH_XPU "Compile PaddlePaddle with BAIDU KUNLUN XPU" OFF)
option(WITH_XPU_KP "Compile PaddlePaddle with BAIDU XPU compiler " OFF)
“yuguo”'s avatar
2.5  
“yuguo” committed
55
56
option(WITH_XPU_XFT "Compile PaddlePaddle with BAIDU XPU-XFT" OFF)
option(WITH_XPU_PLUGIN "Compile PaddlePaddle with BAIDU XPU plugin" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
57
58
59
60
61
option(WITH_WIN_DUMP_DBG "Compile with windows core dump debug mode" OFF)
option(WITH_ROCM "Compile PaddlePaddle with ROCM platform" OFF)
option(WITH_IPU "Compile PaddlePaddle with Graphcore IPU" OFF)
option(WITH_ONNXRUNTIME "Compile PaddlePaddle with ONNXRUNTIME" OFF)
option(WITH_CUSPARSELT "Compile PaddlePaddle with CUSPARSELT" OFF)
“yuguo”'s avatar
2.5  
“yuguo” committed
62
63
64
65
66
67
68
69
70
71
72
73
74
option(WITH_SETUP_INSTALL "Compile PaddlePaddle with setup.py" OFF)
option(WITH_SHARED_PHI "Compile PaddlePaddle with SHARED LIB of PHI" OFF)
option(CINN_ONLY "Compile CINN only in Paddle" OFF)
option(CINN_WITH_CUDNN "Compile CINN with CUDNN support" ON)

find_package(Git REQUIRED)

# config GIT_URL with github mirrors to speed up dependent repos clone
option(GIT_URL "Git URL to clone dependent repos" ${GIT_URL})
if(NOT GIT_URL)
  set(GIT_URL "https://github.com")
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
75
76
77
78
79
80
81
82
83
84
85
# Note(zhouwei): It use option above, so put here
include(init)
include(generic) # simplify cmake module
include(experimental) # experimental build options

if(WITH_GPU AND WITH_XPU)
  message(FATAL_ERROR "Error when compile GPU and XPU at the same time")
endif()
if(WITH_GPU AND WITH_XPU_KP)
  message(FATAL_ERROR "Error when compile GPU and XPU2 at the same time")
endif()
“yuguo”'s avatar
2.5  
“yuguo” committed
86
87
if(WITH_GPU AND WITH_XPU_XFT)
  message(FATAL_ERROR "Error when compile GPU and XPU-XFT at the same time")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
endif()
if(WITH_GPU AND WITH_ROCM)
  message(FATAL_ERROR "Error when compile CUDA and ROCM at the same time")
endif()

if(WITH_GPU AND NOT APPLE)
  enable_language(CUDA)
  message(STATUS "CUDA compiler: ${CMAKE_CUDA_COMPILER}, version: "
                 "${CMAKE_CUDA_COMPILER_ID} ${CMAKE_CUDA_COMPILER_VERSION}")
endif()

message(STATUS "CXX compiler: ${CMAKE_CXX_COMPILER}, version: "
               "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "C compiler: ${CMAKE_C_COMPILER}, version: "
               "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
message(STATUS "AR tools: ${CMAKE_AR}")

“yuguo”'s avatar
2.5  
“yuguo” committed
105
106
107
108
109
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND CMAKE_CXX_COMPILER_VERSION
                                              VERSION_GREATER 10.4)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=uninitialized")
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# MUSL build turn off warnings
if(WITH_MUSL)
  set(CMAKE_CXX_FLAGS
      "${CMAKE_CXX_FLAGS} -Wno-error=deprecated-declarations -Wno-deprecated-declarations -Wno-error=pessimizing-move -Wno-error=deprecated-copy"
  )
endif()

if(APPLE AND WITH_ARM)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -target arm64-apple-darwin")
  set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -target arm64-apple-darwin")
endif()

if(WIN32)
  option(MSVC_STATIC_CRT "use static C Runtime library by default" ON)
“yuguo”'s avatar
2.5  
“yuguo” committed
124
  message("Build static library of PHI")
yuguo960516yuguo's avatar
yuguo960516yuguo committed
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
157
158
159
160
161
162
  set(CMAKE_SUPPRESS_REGENERATION ON)
  set(CMAKE_STATIC_LIBRARY_PREFIX lib)

  set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj")
  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj")
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj")

  if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zc:inline")
    set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zc:inline")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zc:inline")
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zc:inline")
  endif()

  if(MSVC_STATIC_CRT)
    message(
      STATUS
        "Use static C runtime time, refer to https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features?view=vs-2019"
    )
    foreach(
      flag_var
      CMAKE_CXX_FLAGS
      CMAKE_CXX_FLAGS_DEBUG
      CMAKE_CXX_FLAGS_RELEASE
      CMAKE_CXX_FLAGS_MINSIZEREL
      CMAKE_CXX_FLAGS_RELWITHDEBINFO
      CMAKE_C_FLAGS
      CMAKE_C_FLAGS_DEBUG
      CMAKE_C_FLAGS_RELEASE
      CMAKE_C_FLAGS_MINSIZEREL
      CMAKE_C_FLAGS_RELWITHDEBINFO)
      if(${flag_var} MATCHES "/MD")
        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
      endif()
    endforeach()
  endif()

yuguo960516yuguo's avatar
2.4.2  
yuguo960516yuguo committed
163
  # msvc max/min macro conflict with std::min/max, define NOMINMAX globally
yuguo960516yuguo's avatar
yuguo960516yuguo committed
164
  add_definitions("-DNOMINMAX")
yuguo960516yuguo's avatar
2.4.2  
yuguo960516yuguo committed
165
166
167
168
169
170

  # 1. windows.h define 'small' cause CUDA11.6/11.7/11.8 's cub compile error,
  # see https://github.com/microsoft/onnxruntime/issues/11227
  # 2. WIN32_LEAN_AND_MEAN minimize the windows include files, avoid define 'small'
  add_definitions(-DWIN32_LEAN_AND_MEAN)

yuguo960516yuguo's avatar
yuguo960516yuguo committed
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
  # windows build turn off warnings, use parallel compiling.
  foreach(
    flag_var
    CMAKE_CXX_FLAGS
    CMAKE_CXX_FLAGS_DEBUG
    CMAKE_CXX_FLAGS_RELEASE
    CMAKE_CXX_FLAGS_MINSIZEREL
    CMAKE_CXX_FLAGS_RELWITHDEBINFO
    CMAKE_C_FLAGS
    CMAKE_C_FLAGS_DEBUG
    CMAKE_C_FLAGS_RELEASE
    CMAKE_C_FLAGS_MINSIZEREL
    CMAKE_C_FLAGS_RELWITHDEBINFO)
    string(REGEX REPLACE "/W[1-4]" " /W0 " ${flag_var} "${${flag_var}}")

    # NOTE(zhouwei25): GPU compile have too high memory utilization when parallel compiling,
    # For Visual Studio generators, /MP should be added.
    # For other generators like Ninja, it is not need to add /MP.
    if(CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT WITH_GPU)
      math(EXPR PROCESS_MAX "${CPU_CORES} * 2 / 3")
      set(${flag_var} "${${flag_var}} /MP${PROCESS_MAX}")
    endif()
  endforeach()
  foreach(flag_var CMAKE_CXX_FLAGS CMAKE_C_FLAGS)
    set(${flag_var} "${${flag_var}} /w")
  endforeach()

  # Windows Remove /Zi, /ZI for Release, MinSizeRel builds
  foreach(flag_var
          CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL
          CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL)
    if(${flag_var} MATCHES "/Z[iI]")
      string(REGEX REPLACE "/Z[iI]" "" ${flag_var} "${${flag_var}}")
    endif()
  endforeach()

  set(CMAKE_C_FLAGS
      "${CMAKE_C_FLAGS} /wd4068 /wd4129 /wd4244 /wd4267 /wd4297 /wd4530 /wd4577 /wd4819 /wd4838"
  )
  set(CMAKE_CXX_FLAGS
      "${CMAKE_CXX_FLAGS} /wd4068 /wd4129 /wd4244 /wd4267 /wd4297 /wd4530 /wd4577 /wd4819 /wd4838"
  )

  foreach(flag_var CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS
                   CMAKE_EXE_LINKER_FLAGS CMAKE_LINKER_FLAGS)
    set(${flag_var}
        "${${flag_var}} /ignore:4049 /ignore:4217 /ignore:4006 /ignore:4221")
    if(MSVC_STATIC_CRT)
      set(${flag_var} "${${flag_var}} /NODEFAULTLIB:MSVCRT.LIB")
    endif()
  endforeach()

  if(WITH_WIN_DUMP_DBG)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zi")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi")

    foreach(flag_var CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS
                     CMAKE_EXE_LINKER_FLAGS CMAKE_LINKER_FLAGS)
      set(${flag_var} "${${flag_var}} /DEBUG /OPT:REF /OPT:ICF")
    endforeach()

    add_definitions("-DWITH_WIN_DUMP_DBG")
  endif()

else()
  set(CMAKE_CXX_FLAGS
      "${CMAKE_CXX_FLAGS} -Wno-error=deprecated-declarations -Wno-deprecated-declarations"
  )
endif()

find_package(Threads REQUIRED)

include(simd)

################################ Exposed Configurations #######################################
option(WITH_AVX "Compile PaddlePaddle with AVX intrinsics" ${AVX_FOUND})
option(WITH_PYTHON "Compile PaddlePaddle with python interpreter" ON)
option(WITH_TESTING "Compile PaddlePaddle with unit testing" OFF)
option(WITH_MULTINODE_TESTING "Test multinode apis and ops" OFF)
option(WITH_MKL "Compile PaddlePaddle with MKL support." ${AVX_FOUND})
option(WITH_SYSTEM_BLAS "Use system blas library" OFF)
option(WITH_DISTRIBUTE "Compile with distributed support" OFF)
option(WITH_BRPC_RDMA "Use brpc rdma as the rpc protocal" OFF)
option(ON_INFER "Turn on inference optimization and inference-lib generation"
       ON)
“yuguo”'s avatar
2.5  
“yuguo” committed
256
option(WITH_CPP_DIST "Install PaddlePaddle C++ distribution" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
257
258
259
260
261
262
263
264
265
266
267
268
269
################################ Internal Configurations #######################################
option(WITH_NV_JETSON "Compile PaddlePaddle with NV JETSON" OFF)
option(WITH_PROFILER "Compile PaddlePaddle with GPU profiler and gperftools"
       OFF)
option(WITH_COVERAGE "Compile PaddlePaddle with code coverage" OFF)
option(WITH_INCREMENTAL_COVERAGE
       "Generate coverage reports only for incremental code" OFF)
option(WITH_LIBXSMM "Compile with libxsmm" OFF)
option(COVERALLS_UPLOAD "Package code coverage data to coveralls" OFF)
option(WITH_PSLIB "Compile with pslib support" OFF)
option(WITH_BOX_PS "Compile with box_ps support" OFF)
option(WITH_XBYAK "Compile with xbyak support" ON)
option(WITH_PSCORE "Compile with parameter server support" ${WITH_DISTRIBUTE})
“yuguo”'s avatar
2.5  
“yuguo” committed
270
option(WITH_HETERPS "Compile with heterps" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
271
272
option(WITH_INFERENCE_API_TEST
       "Test fluid inference C++ high-level api interface" OFF)
“yuguo”'s avatar
2.5  
“yuguo” committed
273
option(WITH_NVTX "Paddle with nvtx for profiler" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
option(PY_VERSION "Compile PaddlePaddle with python3 support" ${PY_VERSION})
option(WITH_DGC "Use DGC(Deep Gradient Compression) or not" ${WITH_DISTRIBUTE})
option(
  SANITIZER_TYPE
  "Choose the type of sanitizer, options are: Address, Leak, Memory, Thread, Undefined"
  OFF)
option(WITH_LITE "Compile Paddle Fluid with Lite Engine" OFF)
option(WITH_CINN "Compile PaddlePaddle with CINN" OFF)
option(WITH_NCCL "Compile PaddlePaddle with NCCL support" ON)
option(WITH_RCCL "Compile PaddlePaddle with RCCL support" ON)
option(WITH_XPU_BKCL "Compile PaddlePaddle with BAIDU KUNLUN XPU BKCL" OFF)
option(WITH_CRYPTO "Compile PaddlePaddle with crypto support" ON)
option(WITH_ARM "Compile PaddlePaddle with arm support" OFF)
option(WITH_SW "Compile PaddlePaddle with sw support" OFF)
option(WITH_MIPS "Compile PaddlePaddle with mips support" OFF)
“yuguo”'s avatar
2.5  
“yuguo” committed
289
option(WITH_LOONGARCH "Compile PaddlePaddle with loongarch support" OFF)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
option(WITH_MUSL "Compile with musl libc instead of gblic" OFF)
option(WITH_UNITY_BUILD "Compile with UnityBuild mode" OFF)
option(WITH_STRIP "Strip so files of Whl packages" OFF)
option(NEW_RELEASE_PYPI
       "PaddlePaddle next-level release strategy for pypi cubin package" OFF)
option(NEW_RELEASE_ALL
       "PaddlePaddle next-level release strategy for all arches cubin package"
       OFF)
option(NEW_RELEASE_JIT
       "PaddlePaddle next-level release strategy for backup jit package" OFF)
option(WITH_POCKETFFT "Compile with pocketfft support" ON)
option(WITH_RECORD_BUILDTIME
       "Compile PaddlePaddle with record all targets build time" OFF)
option(WITH_CUSTOM_DEVICE "Compile with custom device support" OFF)
option(WITH_ARM_BRPC "Supprot Brpc in Arm" OFF)
option(WITH_FLPS "FL PS mode" OFF)
“yuguo”'s avatar
2.5  
“yuguo” committed
306
307
308
309
310
311
option(WITH_RPC "Compile with rpc support" ${WITH_DISTRIBUTE})
option(WITH_CUDNN_FRONTEND
       "Compile with CUDNN Frontend API support (experimental)" OFF)
option(WITH_CUDNN_DSO "Compile PaddlePaddle with cuDNN dynamic-link libraries"
       OFF)
option(WITH_SHARED_IR "Compile PaddlePaddle with SHARED LIB of IR" ON)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333

if(WITH_RECORD_BUILDTIME)
  set_property(
    GLOBAL
    PROPERTY
      RULE_LAUNCH_COMPILE
      "${CMAKE_CURRENT_SOURCE_DIR}/tools/get_build_time.sh ${CMAKE_CURRENT_BINARY_DIR}"
  )
  set_property(
    GLOBAL
    PROPERTY
      RULE_LAUNCH_LINK
      "${CMAKE_CURRENT_SOURCE_DIR}/tools/get_build_time.sh ${CMAKE_CURRENT_BINARY_DIR}"
  )
else()
  include(ccache
  )# set ccache for compilation ; if WITH_RECORD_BUILDTIME=ON can't use ccache
endif()
unset(WITH_RECORD_BUILDTIME CACHE)

# PY_VERSION
if(NOT PY_VERSION)
“yuguo”'s avatar
2.5  
“yuguo” committed
334
  set(PY_VERSION 3.7)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
335
336
337
338
339
340
341
342
343
344
345
346
endif()
set(PYBIND11_PYTHON_VERSION ${PY_VERSION})

# the type of sanitizer, options are: Address, Leak, Memory, Thread, Undefined. Default: OFF
if(SANITIZER_TYPE AND NOT "${SANITIZER_TYPE}" MATCHES
                      "^(Address|Leak|Memory|Thread|Undefined)$")
  message("Choose the correct type of sanitizer")
  return()
endif()

if(LINUX
   AND NOT WITH_CUSTOM_DEVICE
“yuguo”'s avatar
2.5  
“yuguo” committed
347
348
349
350
351
   AND NOT WITH_GPU
   AND NOT WITH_ROCM
   AND NOT WITH_XPU
   AND NOT WITH_XPU_KP
   AND NOT WITH_XPU_XFT
yuguo960516yuguo's avatar
yuguo960516yuguo committed
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
   AND WITH_PYTHON)
  set(WITH_CUSTOM_DEVICE
      ON
      CACHE BOOL "Enable Custom Device when compiling for Linux" FORCE)
  message(
    "Enable Custom Device when compiling for Linux. Force WITH_CUSTOM_DEVICE=ON."
  )
endif()

if(WIN32)
  if(WITH_DISTRIBUTE)
    message(
      WARNING
        "Disable DISTRIBUTE when compiling for Windows. Force WITH_DISTRIBUTE=OFF."
    )
    set(WITH_DISTRIBUTE
        OFF
        CACHE STRING "Disable DISTRIBUTE when compiling for Windows" FORCE)
  endif()
  if(WITH_NCCL)
    message(
      WARNING "Disable NCCL when compiling for Windows. Force WITH_NCCL=OFF.")
    set(WITH_NCCL
        OFF
        CACHE STRING "Disable NCCL when compiling for Windows" FORCE)
  endif()
endif()

if(NOT WITH_TESTING AND WITH_MULTINODE_TESTING)
  message(
    WARNING
      "Disable WITH_MULTINODE_TESTING when compiling without TESTING. Force WITH_MULTINODE_TESTING=OFF."
  )
  set(WITH_MULTINODE_TESTING
      OFF
      CACHE STRING
            "Disable WITH_MULTINODE_TESTING when compiling without TESTING"
            FORCE)
endif()

if(NOT WITH_GPU AND WITH_NCCL)
  message(
    WARNING "Disable NCCL when compiling without GPU. Force WITH_NCCL=OFF.")
  set(WITH_NCCL
      OFF
      CACHE STRING "Disable NCCL when compiling without GPU" FORCE)
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
400
401
402
403
404
405
406
407
408
409
if(NOT WITH_GPU AND WITH_CUDNN_DSO)
  message(
    WARNING
      "Can't compile with cuDNN libraries when compiling without GPU. Force WITH_CUDNN_DSO=OFF."
  )
  set(WITH_CUDNN_DSO
      OFF
      CACHE STRING "Disable cuDNN libraries when compiling without GPU" FORCE)
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
410
411
412
413
414
415
416
417
418
419
# force WITH_XPU on when WITH_XPU_KP
if(WITH_XPU_KP AND NOT WITH_XPU)
  message(
    WARNING
      "Enable WITH_XPU when compiling with WITH_XPU_KP. Force WITH_XPU=ON.")
  set(WITH_XPU
      ON
      CACHE STRING "Enable WITH_XPU when compiling with WITH_XPU_KP" FORCE)
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
420
if(NOT WITH_XPU AND WITH_XPU_XFT)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
421
  message(
“yuguo”'s avatar
2.5  
“yuguo” committed
422
423
424
425
426
427
428
429
430
431
432
    WARNING
      "Enable WITH_XPU when compiling with WITH_XPU_XFT. Force WITH_XPU=ON.")
  set(WITH_XPU
      ON
      CACHE STRING "Enable WITH_XPU when compiling with WITH_XPU_XFT" FORCE)
endif()

if(NOT WITH_XPU AND WITH_XPTI)
  message(
    WARNING "Disable XPTI when compiling without XPU. Force WITH_XPTI=OFF.")
  set(WITH_XPTI
yuguo960516yuguo's avatar
yuguo960516yuguo committed
433
      OFF
“yuguo”'s avatar
2.5  
“yuguo” committed
434
      CACHE STRING "Disable XPTI when compiling without XPU" FORCE)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
435
436
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
437
if(NOT WITH_XPU AND WITH_XPU_BKCL)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
438
  message(
“yuguo”'s avatar
2.5  
“yuguo” committed
439
440
    WARNING "Disable BKCL when compiling without XPU. Force WITH_XPU_BKCL=OFF.")
  set(WITH_XPU_BKCL
yuguo960516yuguo's avatar
yuguo960516yuguo committed
441
      OFF
“yuguo”'s avatar
2.5  
“yuguo” committed
442
      CACHE STRING "Disable BKCL when compiling without XPU" FORCE)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
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
endif()

if(WITH_NCCL)
  add_definitions("-DPADDLE_WITH_NCCL")
  include(nccl)
else()
  if(WITH_GPU)
    message(
      WARNING
        "If the environment is multi-card, the WITH_NCCL option needs to be turned on, otherwise only a single card can be used."
    )
  endif()
endif()

if(WITH_BRPC_RDMA)
  message(STATUS "Use brpc with rdma.")
  if(NOT WITH_DISTRIBUTE)
    message(FATAL_ERROR "Can't use brpc rdma in no distribute env.")
  endif()
endif()

if(WITH_GPU)
  include(cuda)
  # lite subgraph compilation depends on CUDNN_ROOT,
  # so include(cudnn) needs to be in front of include(third_party/lite)
  include(cudnn) # set cudnn libraries, must before configure
  include(tensorrt)
  # there is no official support of nccl, cupti in windows
  if(NOT WIN32)
    include(cupti)
  endif()
endif()

if(WITH_ROCM)
  include(hip)
  include(miopen) # set miopen libraries, must before configure
  include(cupti)
endif()

if(WITH_XPU_KP)
  include(xpu_kp)
endif()

if(NOT WITH_ROCM AND WITH_RCCL)
  message(
    WARNING "Disable RCCL when compiling without ROCM. Force WITH_RCCL=OFF.")
  set(WITH_RCCL
      OFF
      CACHE STRING "Disable RCCL when compiling without ROCM" FORCE)
endif()

if(WITH_RCCL)
  add_definitions("-DPADDLE_WITH_RCCL")
  include(rccl)
else()
  if(WITH_ROCM)
    message(
      WARNING
        "If the environment is multi-card, the WITH_RCCL option needs to be turned on, otherwise only a single card can be used."
    )
  endif()
endif()

if(WITH_HETERPS AND WITH_PSLIB)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
endif()

if(WITH_DISTRIBUTE)
  if(LINUX)
    set(WITH_GLOO
        ON
        CACHE STRING "Enable GLOO when compiling WITH_DISTRIBUTE=ON." FORCE)
  endif()
  if(WITH_ROCM AND HIP_VERSION LESS_EQUAL 40020496)
    # TODO(qili93): third-party rocksdb throw Illegal instruction with HIP version 40020496
    message(
      WARNING
        "Disable WITH_PSCORE when HIP_VERSION is less than or equal 40020496. Force WITH_PSCORE=OFF."
    )
    set(WITH_PSCORE
        OFF
        CACHE
          BOOL
          "Disable WITH_PSCORE when HIP_VERSION is less than or equal 40020496"
          FORCE)
  endif()
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
if(WITH_RPC)
  if(NOT LINUX)
    message(
      WARNING "Disable WITH_RPC when not compiled on Linux. Force WITH_RPC=OFF."
    )
    set(WITH_RPC
        OFF
        CACHE BOOL "Disable WITH_RPC when not compiled on Linux" FORCE)
  endif()
  if(NOT WITH_DISTRIBUTE AND WITH_RPC)
    message(
      WARNING
        "Disable WITH_RPC when not compiled with distribute. Force WITH_RPC=OFF."
    )
    set(WITH_RPC
        OFF
        CACHE BOOL "Disable WITH_RPC when not compiled with distribute" FORCE)
  endif()
  if(WITH_ROCM AND WITH_RPC)
    message(
      WARNING "Disable WITH_RPC when compiling with ROCM. Force WITH_RPC=OFF.")
    set(WITH_RPC
        OFF
        CACHE BOOL "Disable WITH_RPC when compiling with ROCM" FORCE)
  endif()
  if(WITH_XPU AND WITH_RPC)
    message(
      WARNING "Disable WITH_RPC when compiling with XPU. Force WITH_RPC=OFF.")
    set(WITH_RPC
        OFF
        CACHE BOOL "Disable WITH_RPC when compiling with XPU" FORCE)
  endif()
  if(WITH_CINN AND WITH_RPC)
    message(
      WARNING "Disable WITH_RPC when compiling with CINN. Force WITH_RPC=OFF.")
    set(WITH_RPC
        OFF
        CACHE BOOL "Disable WITH_RPC when compiling with CINN" FORCE)
  endif()
endif()

if(WITH_MPI)
  include(mpi)
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
576
577
578
579
580
include(third_party
)# download, build, install third_party, Contains about 20+ dependencies

include(flags) # set paddle compile flags

“yuguo”'s avatar
2.5  
“yuguo” committed
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
#------------- cinn cmake config start --------------

if(WITH_CINN)
  message(STATUS "Compile Paddle with CINN.")
  message(
    WARNING
      "Enable WITH_SHARED_PHI when compiling with CINN. Force WITH_SHARED_PHI=ON."
  )
  set(WITH_SHARED_PHI
      ON
      CACHE BOOL "Enable WITH_SHARED_PHI when compiling with CINN" FORCE)
  # TODO(6clc): Use CINN_WITH_CUDNN to completely replace WITH_CUDNN in CINN.
  #             Use WITH_GPU to completely replace WITH_CUDA in CINN.
  set(WITH_MKL_CBLAS ${WITH_MKL})
  if(WITH_GPU)
    set(WITH_CUDA ${WITH_GPU})
    add_definitions(-DCINN_WITH_CUDA)
    set(WITH_CUDNN ${CINN_WITH_CUDNN})
    if(WITH_CUDNN)
      add_definitions(-DCINN_WITH_CUDNN)
    endif()
  endif()
  include(cmake/cinn.cmake)
  add_definitions(-DPADDLE_WITH_CINN)

  if(CINN_ONLY)
    if(WITH_PYTHON)
      add_subdirectory(python)
    endif()
    add_subdirectory(test)
    return()
  endif()
endif()

#------------- cinn cmake config end --------------

yuguo960516yuguo's avatar
yuguo960516yuguo committed
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
if(WITH_PROFILER)
  find_package(Gperftools REQUIRED)
  include_directories(${GPERFTOOLS_INCLUDE_DIR})
  add_definitions(-DWITH_GPERFTOOLS)
endif()

include(util) # set unittest and link libs
include(version) # set PADDLE_VERSION
include(coveralls) # set code coverage
include(configure) # add paddle env configuration

include_directories("${PADDLE_SOURCE_DIR}")

if(WITH_NV_JETSON)
  set(WITH_ARM
      ON
      CACHE STRING "Set WITH_ARM=ON when compiling WITH_NV_JETSON=ON." FORCE)
endif()

if(WITH_ARM)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
  set(WITH_XBYAK
      OFF
      CACHE STRING "Disable XBYAK when compiling WITH_ARM=ON." FORCE)
  set(WITH_MKL
      OFF
      CACHE STRING "Disable MKL when compiling WITH_ARM=ON." FORCE)
  set(WITH_AVX
      OFF
      CACHE STRING "Disable AVX when compiling WITH_AVX=OFF." FORCE)
  add_definitions(-DPADDLE_WITH_ARM)
endif()

if(WITH_SW)
  # mieee flag solves floating-point exceptions under sw and ALPHA architectures
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -mieee")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -mieee")
  set(WITH_XBYAK
      OFF
      CACHE STRING "Disable XBYAK when compiling WITH_SW=ON" FORCE)
  set(WITH_MKL
      OFF
      CACHE STRING "Disable MKL when compiling WITH_SW=ON." FORCE)
  add_definitions(-DPADDLE_WITH_SW)
endif()

if(WITH_MIPS)
  set(WITH_XBYAK
      OFF
      CACHE STRING "Disable XBYAK when compiling WITH_MIPS=ON" FORCE)
  add_definitions(-DPADDLE_WITH_MIPS)
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
671
672
673
674
675
676
677
678
679
680
681
682
683
684
if(WITH_NVTX AND NOT WIN32)
  add_definitions(-DPADDLE_WITH_NVTX)
endif()

if(WITH_LOONGARCH)
  set(WITH_XBYAK
      OFF
      CACHE STRING "Disable XBYAK when compiling WITH_LOONGARCH=ON" FORCE)
  set(WITH_MKL
      OFF
      CACHE STRING "Disable MKL when compiling WITH_LOONGARCH=ON." FORCE)
  add_definitions(-DPADDLE_WITH_LOONGARCH)
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
if(WITH_ONEMKL)
  add_definitions(-DPADDLE_WITH_ONEMKL)
endif()

if(WITH_HETERPS)
  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new")
  endif()
endif()
set(PADDLE_PYTHON_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/python/build")

set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG")

add_definitions(-DPADDLE_DLL_EXPORT)

if(ON_INFER)
  # you can trun off the paddle fluid and inference lib by set ON_INFER=OFF
  message(
    STATUS "On inference mode, will take place some specific optimization.")
  include(inference_lib)
  add_definitions(-DPADDLE_ON_INFERENCE)
“yuguo”'s avatar
2.5  
“yuguo” committed
707
708
709
  set(WITH_SHARED_IR
      OFF
      CACHE BOOL "Only paddle_inference.so is allowed in inference." FORCE)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
710
711
712
713
714
715
716
717
else()
  #TODO(luotao), combine this warning with `make inference_lib_dist` command.
  message(
    WARNING
      "On inference mode, will take place some specific optimization. Turn on the ON_INFER flag when building inference_lib only."
  )
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
718
719
720
721
if(NOT WITH_SHARED_IR)
  add_definitions(-DSTATIC_IR)
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
722
723
724
725
726
727
728
729
730
731
if(WITH_STRIP)
  find_program(STRIP_PATH strip)
  if(NOT STRIP_PATH OR NOT LINUX)
    set(WITH_STRIP
        OFF
        CACHE STRING "Command strip is only used on Linux when it exists."
              FORCE)
  endif()
endif()

“yuguo”'s avatar
2.5  
“yuguo” committed
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
if(WITH_CPP_DIST)
  # TODO(huangjiyi): Separate installing C++ distribution from python package
  # installation and support for installing C++ distribution on more platforms.
  if(NOT LINUX OR NOT WITH_PYTHON)
    set(WITH_CPP_DIST
        OFF
        CACHE
          STRING
          "Currently C++ Distribution Generation is only available on Linux and compiling WITH_PYTHON=ON."
          FORCE)
  else()
    include(paddle_lib)
  endif()
endif()

yuguo960516yuguo's avatar
yuguo960516yuguo committed
747
748
749
750
add_subdirectory(paddle)
if(WITH_PYTHON)
  add_subdirectory(python)
endif()
“yuguo”'s avatar
2.5  
“yuguo” committed
751
add_subdirectory(test)
yuguo960516yuguo's avatar
yuguo960516yuguo committed
752
753
754
755

get_directory_property(all_inc_dirs INCLUDE_DIRECTORIES)
list(JOIN all_inc_dirs "\r\n" all_inc_dirs)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/includes.txt" ${all_inc_dirs})