Skip to content

Commit 937765c

Browse files
committed
renorm op
2 parents bb06a4c + 8da9eff commit 937765c

File tree

1,515 files changed

+80695
-21283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,515 files changed

+80695
-21283
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ paddle/fluid/API_DEV.spec
44
paddle/fluid/API_PR.spec
55
paddle/fluid/op_use_default_grad_maker_DEV.spec
66
paddle/fluid/op_use_default_grad_maker_PR.spec
7+
paddle/pten/api/*/api*
78

89
*.DS_Store
910
*.vs

CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ option(WITH_ONEMKL "Compile PaddlePaddle with oneMKL" OFF)
4343
option(WITH_GPU "Compile PaddlePaddle with NVIDIA GPU" ${CUDA_FOUND})
4444
option(WITH_TENSORRT "Compile PaddlePaddle with NVIDIA TensorRT" OFF)
4545
option(WITH_XPU "Compile PaddlePaddle with BAIDU KUNLUN XPU" OFF)
46+
option(WITH_MLU "Compile PaddlePaddle with CAMBRICON MLU" OFF)
4647
option(WITH_WIN_DUMP_DBG "Compile with windows core dump debug mode" OFF)
4748
option(WITH_ASCEND "Compile PaddlePaddle with ASCEND" OFF)
4849
option(WITH_ROCM "Compile PaddlePaddle with ROCM platform" OFF)
50+
option(WITH_IPU "Compile PaddlePaddle with Graphcore IPU" OFF)
4951
# NOTE(zhiqiu): WITH_ASCEND_CL can be compile on x86_64, so we can set WITH_ASCEND=OFF and WITH_ASCEND_CL=ON
5052
# to develop some acl related functionality on x86
5153
option(WITH_ASCEND_CL "Compile PaddlePaddle with ASCEND CL" ${WITH_ASCEND})
@@ -63,6 +65,9 @@ endif()
6365
if (WITH_GPU AND WITH_ROCM)
6466
message(FATAL_ERROR "Error when compile CUDA and ROCM at the same time")
6567
endif()
68+
if (WITH_GPU AND WITH_MLU)
69+
message(FATAL_ERROR "Error when compile GPU and MLU at the same time")
70+
endif()
6671

6772
if(WITH_GPU AND NOT APPLE)
6873
enable_language(CUDA)
@@ -121,6 +126,8 @@ if(WIN32)
121126
endforeach(flag_var)
122127
endif()
123128

129+
# NOTE(zhouwei): msvc max/min macro conflict with std::min/max, define NOMINMAX globally
130+
add_definitions("-DNOMINMAX")
124131
# windows build turn off warnings, use parallel compiling.
125132
foreach(flag_var
126133
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
@@ -215,6 +222,7 @@ option(WITH_DGC "Use DGC(Deep Gradient Compression) or not" ${WITH_DISTRIBUTE}
215222
option(SANITIZER_TYPE "Choose the type of sanitizer, options are: Address, Leak, Memory, Thread, Undefined" OFF)
216223
option(WITH_LITE "Compile Paddle Fluid with Lite Engine" OFF)
217224
option(WITH_CINN "Compile PaddlePaddle with CINN" OFF)
225+
option(WITH_INFRT "Compile PaddlePaddle with INFRT" OFF)
218226
option(WITH_NCCL "Compile PaddlePaddle with NCCL support" ON)
219227
option(WITH_RCCL "Compile PaddlePaddle with RCCL support" ON)
220228
option(WITH_XPU_BKCL "Compile PaddlePaddle with BAIDU KUNLUN XPU BKCL" OFF)
@@ -300,6 +308,10 @@ if(WITH_GPU)
300308
endif()
301309
endif()
302310

311+
if(WITH_MLU)
312+
include(neuware)
313+
endif()
314+
303315
if(WITH_ROCM)
304316
include(hip)
305317
include(miopen) # set miopen libraries, must before configure
@@ -414,3 +426,7 @@ add_subdirectory(paddle)
414426
if(WITH_PYTHON)
415427
add_subdirectory(python)
416428
endif()
429+
430+
get_directory_property(all_inc_dirs INCLUDE_DIRECTORIES)
431+
list(JOIN all_inc_dirs "\r\n" all_inc_dirs)
432+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/includes.txt" ${all_inc_dirs})

cmake/configure.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ if(WITH_XPU)
9797
add_definitions(-DPADDLE_WITH_XPU)
9898
endif()
9999

100+
if(WITH_IPU)
101+
message(STATUS "Compile with IPU!")
102+
add_definitions(-DPADDLE_WITH_IPU)
103+
endif()
104+
105+
if(WITH_MLU)
106+
message(STATUS "Compile with MLU!")
107+
add_definitions(-DPADDLE_WITH_MLU)
108+
endif()
109+
100110
if(WITH_GPU)
101111
add_definitions(-DPADDLE_WITH_CUDA)
102112
add_definitions(-DEIGEN_USE_GPU)

cmake/external/cinn.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ add_definitions(-w)
2626
######################################
2727
include(ExternalProject)
2828
set(CINN_PREFIX_DIR ${THIRD_PARTY_PATH}/CINN)
29-
# TODO(zhhsplendid): Modify git tag after we have release tag
30-
set(CINN_GIT_TAG develop)
29+
set(CINN_GIT_TAG release/v0.1)
3130
set(CINN_OPTIONAL_ARGS -DPY_VERSION=${PY_VERSION}
3231
-DWITH_CUDA=${WITH_GPU}
3332
-DWITH_CUDNN=${WITH_GPU}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
include(ExternalProject)
16+
17+
set(CONCURRENTQUEUE_PROJECT "extern_concurrentqueue")
18+
set(CONCURRENTQUEUE_VER "v1.0.3")
19+
SET(CONCURRENTQUEUE_URL_MD5 118e5bb661b567634647312991e10222)
20+
set(CONCURRENTQUEUE_PREFIX_URL "https://github.com/cameron314/concurrentqueue/archive/refs/tags")
21+
set(CONCURRENTQUEUE_URL "${CONCURRENTQUEUE_PREFIX_URL}/${CONCURRENTQUEUE_VER}.tar.gz")
22+
23+
MESSAGE(STATUS "CONCURRENTQUEUE_VERSION: ${CONCURRENTQUEUE_VER}, CONCURRENTQUEUE_URL: ${CONCURRENTQUEUE_URL}")
24+
25+
set(CONCURRENTQUEUE_PREFIX_DIR ${THIRD_PARTY_PATH}/concurrentqueue)
26+
set(CONCURRENTQUEUE_SOURCE_DIR ${THIRD_PARTY_PATH}/concurrentqueue/src/)
27+
set(CONCURRENTQUEUE_INCLUDE_DIR "${CONCURRENTQUEUE_SOURCE_DIR}/extern_concurrentqueue")
28+
29+
ExternalProject_Add(
30+
${CONCURRENTQUEUE_PROJECT}
31+
${EXTERNAL_PROJECT_LOG_ARGS}
32+
URL ${CONCURRENTQUEUE_URL}
33+
URL_MD5 ${CONCURRENTQUEUE_URL_MD5}
34+
PREFIX ${CONCURRENTQUEUE_PREFIX_DIR}
35+
DOWNLOAD_NO_PROGRESS 1
36+
CONFIGURE_COMMAND ""
37+
BUILD_COMMAND ""
38+
INSTALL_COMMAND ""
39+
UPDATE_COMMAND ""
40+
)
41+
42+
include_directories(${CONCURRENTQUEUE_INCLUDE_DIR})

cmake/external/cryptopp.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ SET(CRYPTOPP_TAG CRYPTOPP_8_2_0)
2222

2323
IF(WIN32)
2424
SET(CRYPTOPP_LIBRARIES "${CRYPTOPP_INSTALL_DIR}/lib/cryptopp-static.lib" CACHE FILEPATH "cryptopp library." FORCE)
25-
# There is a compilation parameter 'FI\"winapifamily.h\"' can't be used correctly
25+
# There is a compilation parameter "/FI\"winapifamily.h\"" or "/FIwinapifamily.h" can't be used correctly
2626
# with Ninja on Windows. The only difference between the patch file and original
27-
# file is that the compilation parameters are changed to 'FIwinapifamily.h'. This
27+
# file is that the compilation parameters are changed to '/nologo'. This
2828
# patch command can be removed when upgrading to a higher version.
2929
if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
3030
set(CRYPTOPP_PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different "${PADDLE_SOURCE_DIR}/patches/cryptopp/CMakeLists.txt" "<SOURCE_DIR>/")

cmake/external/gtest.cmake

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,17 @@ IF(WIN32)
3434
"${GTEST_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/gtest.lib" CACHE FILEPATH "gtest libraries." FORCE)
3535
set(GTEST_MAIN_LIBRARIES
3636
"${GTEST_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/gtest_main.lib" CACHE FILEPATH "gtest main libraries." FORCE)
37+
string(REPLACE "/w " "" GTEST_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
38+
string(REPLACE "/w " "" GTEST_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
39+
string(REPLACE "/W0 " "" GTEST_CMAKE_C_FLAGS "${GTEST_CMAKE_C_FLAGS}")
40+
string(REPLACE "/W0 " "" GTEST_CMAKE_CXX_FLAGS "${GTEST_CMAKE_CXX_FLAGS}")
3741
ELSE(WIN32)
3842
set(GTEST_LIBRARIES
3943
"${GTEST_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libgtest.a" CACHE FILEPATH "gtest libraries." FORCE)
4044
set(GTEST_MAIN_LIBRARIES
4145
"${GTEST_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libgtest_main.a" CACHE FILEPATH "gtest main libraries." FORCE)
46+
set(GTEST_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
47+
set(GTEST_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
4248
ENDIF(WIN32)
4349

4450
IF(WITH_MKLML)
@@ -57,10 +63,10 @@ ExternalProject_Add(
5763
UPDATE_COMMAND ""
5864
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
5965
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
60-
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
66+
-DCMAKE_CXX_FLAGS=${GTEST_CMAKE_CXX_FLAGS}
6167
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
6268
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
63-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
69+
-DCMAKE_C_FLAGS=${GTEST_CMAKE_C_FLAGS}
6470
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
6571
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
6672
-DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR}

cmake/external/llvm.cmake

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
include(FetchContent)
2+
3+
set(LLVM_DOWNLOAD_URL https://paddle-inference-dist.bj.bcebos.com/CINN/llvm11.tar.gz)
4+
set(LLVM_MD5 39d32b6be466781dddf5869318dcba53)
5+
6+
set(FETCHCONTENT_BASE_DIR ${THIRD_PARTY_PATH}/llvm)
7+
set(FETCHCONTENT_QUIET OFF)
8+
FetchContent_Declare(external_llvm
9+
URL ${LLVM_DOWNLOAD_URL}
10+
URL_MD5 ${LLVM_MD5}
11+
PREFIX ${THIRD_PARTY_PATH}/llvm
12+
SOURCE_DIR ${THIRD_PARTY_PATH}/install/llvm
13+
)
14+
if (NOT LLVM_PATH)
15+
FetchContent_GetProperties(external_llvm)
16+
if (NOT external_llvm_POPULATED)
17+
FetchContent_Populate(external_llvm)
18+
endif()
19+
set(LLVM_PATH ${THIRD_PARTY_PATH}/install/llvm)
20+
set(LLVM_DIR ${THIRD_PARTY_PATH}/install/llvm/lib/cmake/llvm)
21+
set(MLIR_DIR ${THIRD_PARTY_PATH}/install/llvm/lib/cmake/mlir)
22+
else ()
23+
set(LLVM_DIR ${LLVM_PATH}/lib/cmake/llvm)
24+
set(MLIR_DIR ${LLVM_PATH}/lib/cmake/mlir)
25+
endif()
26+
27+
if (${CMAKE_CXX_COMPILER} STREQUAL "clang++")
28+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi")
29+
endif()
30+
31+
message(STATUS "set LLVM_DIR: ${LLVM_DIR}")
32+
message(STATUS "set MLIR_DIR: ${MLIR_DIR}")
33+
find_package(LLVM REQUIRED CONFIG HINTS ${LLVM_DIR})
34+
find_package(MLIR REQUIRED CONFIG HINTS ${MLIR_DIR})
35+
find_package(ZLIB REQUIRED)
36+
37+
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
38+
include(AddLLVM)
39+
40+
include_directories(${LLVM_INCLUDE_DIRS})
41+
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
42+
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
43+
include(AddLLVM)
44+
include(TableGen)
45+
include(AddMLIR)
46+
47+
message(STATUS "Found MLIR: ${MLIR_DIR}")
48+
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
49+
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
50+
51+
# To build with MLIR, the LLVM is build from source code using the following flags:
52+
53+
#[==[
54+
cmake -G Ninja ../llvm \
55+
-DLLVM_ENABLE_PROJECTS="mlir;clang" \
56+
-DLLVM_BUILD_EXAMPLES=OFF \
57+
-DLLVM_TARGETS_TO_BUILD="X86" \
58+
-DCMAKE_BUILD_TYPE=Release \
59+
-DLLVM_ENABLE_ASSERTIONS=ON \
60+
-DLLVM_ENABLE_ZLIB=OFF \
61+
-DLLVM_ENABLE_RTTI=ON \
62+
#]==]
63+
# The matched llvm-project version is f9dc2b7079350d0fed3bb3775f496b90483c9e42 (currently a temporary commit)
64+
65+
add_definitions(${LLVM_DEFINITIONS})
66+
67+
llvm_map_components_to_libnames(llvm_libs Support Core irreader
68+
X86 executionengine orcjit mcjit all codegen)
69+
70+
message(STATUS "LLVM libs: ${llvm_libs}")
71+
72+
get_property(mlir_libs GLOBAL PROPERTY MLIR_ALL_LIBS)
73+
message(STATUS "MLIR libs: ${mlir_libs}")
74+
add_definitions(${LLVM_DEFINITIONS})
75+
76+
77+
# The minimum needed libraries for MLIR IR parse and transform.
78+
set(MLIR_IR_LIBS MLIRAnalysis MLIRStandardOps MLIRPass MLIRParser MLIRDialect MLIRIR MLIROptLib)
79+
80+
81+
# tb_base is the name of a xxx.td file (without the .td suffix)
82+
function(mlir_tablegen_on td_base)
83+
set(options)
84+
set(oneValueArgs DIALECT)
85+
cmake_parse_arguments(mlir_tablegen_on "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
86+
87+
set(LLVM_TARGET_DEFINITIONS ${td_base}.td)
88+
mlir_tablegen(${td_base}.hpp.inc -gen-op-decls)
89+
mlir_tablegen(${td_base}.cpp.inc -gen-op-defs)
90+
if (mlir_tablegen_on_DIALECT)
91+
mlir_tablegen(${td_base}_dialect.hpp.inc --gen-dialect-decls -dialect=${mlir_tablegen_on_DIALECT})
92+
endif()
93+
add_public_tablegen_target(${td_base}_IncGen)
94+
add_custom_target(${td_base}_inc DEPENDS ${td_base}_IncGen)
95+
endfunction()
96+
97+
function(mlir_add_rewriter td_base)
98+
set(LLVM_TARGET_DEFINITIONS ${td_base}.td)
99+
mlir_tablegen(${td_base}.hpp.inc -gen-rewriters "-I${CMAKE_SOURCE_DIR}/infrt/dialect/pass")
100+
add_public_tablegen_target(${td_base}_IncGen)
101+
add_custom_target(${td_base}_inc DEPENDS ${td_base}_IncGen)
102+
endfunction()
103+
104+
# Execute the mlir script with infrt-exec program.
105+
# @name: name of the test
106+
# @script: path to the mlir script file
107+
function (infrt_exec_check name script)
108+
add_test(NAME ${name}
109+
COMMAND sh -c "${CMAKE_BINARY_DIR}/paddle/infrt/host_context/infrt-exec -i ${CMAKE_CURRENT_SOURCE_DIR}/${script}| ${LLVM_PATH}/bin/FileCheck ${CMAKE_CURRENT_SOURCE_DIR}/${script}")
110+
endfunction()

cmake/external/mkldnn.cmake

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,14 @@ IF(NOT WIN32)
4242
SET(MKLDNN_FLAG "${MKLDNN_FLAG} -Wno-unused-result -Wno-unused-value")
4343
SET(MKLDNN_CFLAG "${CMAKE_C_FLAGS} ${MKLDNN_FLAG}")
4444
SET(MKLDNN_CXXFLAG "${CMAKE_CXX_FLAGS} ${MKLDNN_FLAG}")
45+
SET(MKLDNN_CXXFLAG_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
46+
SET(MKLDNN_CFLAG_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
4547
SET(MKLDNN_LIB "${MKLDNN_INSTALL_DIR}/${LIBDIR}/libdnnl.so" CACHE FILEPATH "mkldnn library." FORCE)
4648
ELSE()
4749
SET(MKLDNN_CXXFLAG "${CMAKE_CXX_FLAGS} /EHsc")
50+
SET(MKLDNN_CFLAG "${CMAKE_C_FLAGS}")
51+
string(REPLACE "/O2 " "" MKLDNN_CFLAG_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
52+
string(REPLACE "/O2 " "" MKLDNN_CXXFLAG_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
4853
SET(MKLDNN_LIB "${MKLDNN_INSTALL_DIR}/bin/mkldnn.lib" CACHE FILEPATH "mkldnn library." FORCE)
4954
ENDIF(NOT WIN32)
5055

@@ -60,17 +65,15 @@ ExternalProject_Add(
6065
#BUILD_ALWAYS 1
6166
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
6267
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
63-
-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}
68+
-DCMAKE_CXX_FLAGS=${MKLDNN_CXXFLAG}
69+
-DCMAKE_CXX_FLAGS_RELEASE=${MKLDNN_CXXFLAG_RELEASE}
6470
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
65-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
71+
-DCMAKE_C_FLAGS=${MKLDNN_CFLAG}
6672
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
67-
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
73+
-DCMAKE_C_FLAGS_RELEASE=${MKLDNN_CFLAG_RELEASE}
6874
-DCMAKE_INSTALL_PREFIX=${MKLDNN_INSTALL_DIR}
6975
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
7076
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
71-
-DMKLROOT=${MKLML_ROOT}
72-
-DCMAKE_C_FLAGS=${MKLDNN_CFLAG}
73-
-DCMAKE_CXX_FLAGS=${MKLDNN_CXXFLAG}
7477
-DDNNL_BUILD_TESTS=OFF -DDNNL_BUILD_EXAMPLES=OFF
7578
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${MKLDNN_INSTALL_DIR}
7679
)

cmake/external/poplar.cmake

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
if(WITH_IPU)
15+
set(POPLAR_DIR CACHE PATH "Path to a Poplar install")
16+
set(POPART_DIR CACHE PATH "Path to a Popart install")
17+
set(POPLAR_SDK_DIR CACHE PATH "Path to an extracted SDK archive or to a Poplar & Popart install directory (Will populate POPLAR_DIR and POPART_DIR)")
18+
19+
if(DEFINED ENV{POPLAR_SDK_DIR})
20+
set(POPLAR_SDK_DIR $ENV{POPLAR_SDK_DIR})
21+
execute_process(COMMAND find ${POPLAR_SDK_DIR}/ -maxdepth 1 -type d -name "popart*"
22+
OUTPUT_VARIABLE POPART_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
23+
execute_process(COMMAND find ${POPLAR_SDK_DIR}/ -maxdepth 1 -type d -name "poplar-*" -o -name "poplar"
24+
OUTPUT_VARIABLE POPLAR_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
25+
if(NOT IS_DIRECTORY "${POPLAR_DIR}")
26+
message(FATAL_ERROR "Couldn't find a \"poplar\" or \"poplar-*\" folder in '${POPLAR_SDK_DIR}'")
27+
endif()
28+
if(NOT IS_DIRECTORY "${POPART_DIR}")
29+
message(FATAL_ERROR "Couldn't find a \"popart*\" folder in '${POPLAR_SDK_DIR}'")
30+
endif()
31+
else()
32+
message(FATAL_ERROR "You must provide a path to a Poplar install using export POPLAR_SDK_DIR=/path/to/poplar_sdk")
33+
endif()
34+
35+
message("POPLAR_DIR is ${POPLAR_DIR}")
36+
message("POPART_DIR is ${POPART_DIR}")
37+
38+
if(EXISTS ${POPLAR_DIR})
39+
list(APPEND CMAKE_PREFIX_PATH ${POPLAR_DIR})
40+
set(ENABLE_POPLAR_CMD "source ${POPLAR_DIR}/enable.sh")
41+
find_package(poplar REQUIRED)
42+
include_directories("${POPLAR_DIR}/include")
43+
link_directories("${POPLAR_DIR}/lib")
44+
endif()
45+
if(NOT poplar_FOUND)
46+
message(FATAL_ERROR "You must provide a path to a Poplar install using -DPOPLAR_DIR=/path/to/popart/build/install")
47+
endif()
48+
49+
if(EXISTS ${POPART_DIR})
50+
list(APPEND CMAKE_PREFIX_PATH ${POPART_DIR})
51+
set(ENABLE_POPART_CMD "source ${POPART_DIR}/enable.sh")
52+
find_package(popart REQUIRED COMPONENTS popart-only)
53+
include_directories("${POPART_DIR}/include")
54+
link_directories("${POPART_DIR}/lib")
55+
endif()
56+
if(NOT popart_FOUND)
57+
message(FATAL_ERROR "You must provide a path to a Popart build using -DPOPART_DIR=/path/to/popart/build")
58+
endif()
59+
add_definitions(-DONNX_NAMESPACE=onnx)
60+
add_custom_target(extern_poplar DEPENDS poplar popart-only)
61+
endif()

0 commit comments

Comments
 (0)