custom_kernel_dot_setup.py 2.6 KB
Newer Older
1
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
2
#
3 4 5
# 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
6
#
7
#     http://www.apache.org/licenses/LICENSE-2.0
8
#
9 10 11 12 13 14 15
# 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.

import os
16
import site
17 18 19
from paddle.fluid import core
from distutils.sysconfig import get_python_lib
from distutils.core import setup, Extension
20 21 22 23 24 25 26 27
from setuptools.command.build_ext import build_ext


# refer: https://note.qidong.name/2018/03/setup-warning-strict-prototypes
# Avoid a gcc warning below:
# cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid
# for C/ObjC but not for C++
class BuildExt(build_ext):
28

29 30 31 32 33
    def build_extensions(self):
        if '-Wstrict-prototypes' in self.compiler.compiler_so:
            self.compiler.compiler_so.remove('-Wstrict-prototypes')
        super(BuildExt, self).build_extensions()

34 35

# cc flags
36 37 38 39 40 41 42
paddle_extra_compile_args = [
    '-std=c++14',
    '-shared',
    '-fPIC',
    '-Wno-parentheses',
    '-DPADDLE_WITH_CUSTOM_KERNEL',
]
43 44 45 46
if core.is_compiled_with_npu():
    paddle_extra_compile_args += ['-D_GLIBCXX_USE_CXX11_ABI=0']

# include path
47 48 49 50 51
site_packages_path = site.getsitepackages()
paddle_custom_kernel_include = list(
    map(lambda path: os.path.join(path, 'paddle', 'include'),
        site_packages_path))

52
# include path third_party
53 54
compile_third_party_path = os.path.join(os.environ['PADDLE_BINARY_DIR'],
                                        'third_party')
55 56 57 58
paddle_custom_kernel_include += [
    os.path.join(compile_third_party_path, 'install/gflags/include'),  # gflags
    os.path.join(compile_third_party_path, 'install/glog/include'),  # glog
]
59 60

# libs path
61 62
paddle_custom_kernel_library_dir = list(
    map(lambda path: os.path.join(path, 'paddle', 'fluid'), site_packages_path))
63 64

# libs
65
libs = [':libpaddle.so']
66 67 68 69 70 71 72 73 74

custom_kernel_dot_module = Extension(
    'custom_kernel_dot',
    sources=['custom_kernel_dot.cc'],
    include_dirs=paddle_custom_kernel_include,
    library_dirs=paddle_custom_kernel_library_dir,
    libraries=libs,
    extra_compile_args=paddle_extra_compile_args)

75 76 77 78 79
setup(name='custom_kernel_dot',
      version='1.0',
      description='custom kernel fot compiling',
      cmdclass={'build_ext': BuildExt},
      ext_modules=[custom_kernel_dot_module])