setup.py.in 4.6 KB
Newer Older
T
typhoonzero 已提交
1
from setuptools import setup, Distribution, Extension
Y
Yancey 已提交
2
import subprocess
3
import re
4 5 6
class BinaryDistribution(Distribution):
    def has_ext_modules(foo):
        return True
Z
zhangjinchao01 已提交
7

Y
Yancey 已提交
8
MAJOR   = 0
T
typhoonzero 已提交
9
MINOR   = 11
Y
Yancey 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23
PATCH   = 0
RC      = 0
ISTAGED = False



def git_commit():
    try:
        cmd = ['git', 'rev-parse', 'HEAD']
        git_commit = subprocess.Popen(cmd, stdout = subprocess.PIPE).communicate()[0].strip()
    except:
        git_commit = 'Unknown'
    return git_commit

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
def _get_version_detail(idx):
    assert idx < 3

    version_details = '${PADDLE_VERSION}'.split('.')
    if len(version_details) == 3:
        if re.match('[0-9]+', version_details[idx]):
            return int(version_details[idx])

    return None

def get_minor():
    minor = _get_version_detail(0)
    if minor is not None:
        return minor

    return MINOR

def get_major():
    major = _get_version_detail(1)
    if major is not None:
        return major

    return MAJOR

def get_patch():
    patch = _get_version_detail(2)
    if patch is not None:
        return patch

    return PATCH

def is_taged():
    return ISTAGED

Y
Yancey 已提交
58 59 60 61 62 63 64 65 66 67 68
def write_version_py(filename='paddle/version.py'):
    cnt = '''
# THIS FILE IS GENERATED FROM PADDLEPADDLE SETUP.PY
#
full_version    = '%(major)d.%(minor)d.%(patch)d'
major           = '%(major)d'
minor           = '%(minor)d'
patch           = '%(patch)d'
rc              = '%(rc)d'
istaged         = %(istaged)s
commit          = '%(commit)s'
L
Luo Tao 已提交
69
with_mkl        = '%(with_mkl)s'
Y
Yancey 已提交
70 71 72 73 74 75 76 77 78 79

def show():
    if istaged:
        print 'full_version:', full_version
        print 'major:', major
        print 'minor:', minor
        print 'patch:', patch
        print 'rc:', rc
    else:
        print 'commit:', commit
L
Luo Tao 已提交
80 81 82

def mkl():
    return with_mkl
Y
Yancey 已提交
83 84 85 86
'''
    commit = git_commit()
    with open(filename, 'w') as f:
        f.write(cnt % {
87 88 89
            'major': get_major(),
            'minor': get_minor(),
            'patch': get_patch(),
Y
Yancey 已提交
90 91 92
            'rc': RC,
            'version': '${PADDLE_VERSION}',
            'commit': commit,
93
            'istaged': is_taged(),
L
Luo Tao 已提交
94
            'with_mkl': '@WITH_MKL@'})
Y
Yancey 已提交
95

96
write_version_py(filename='@PADDLE_BINARY_DIR@/python/paddle/version.py')
Y
Yancey 已提交
97 98


Z
zhangjinchao01 已提交
99
packages=['paddle',
Q
qiaolongfei 已提交
100
          'paddle.utils',
101 102
          'paddle.dataset',
          'paddle.reader',
103 104
          'paddle.fluid',
          'paddle.fluid.proto',
X
Xin Pan 已提交
105
          'paddle.fluid.proto.profiler',
Y
Yancey 已提交
106
          'paddle.fluid.layers',
Q
qiaolongfei 已提交
107 108
          'paddle.fluid.transpiler',
          'paddle.fluid.transpiler.details']
L
Luo Tao 已提交
109

110
if '${WITH_FLUID_ONLY}'== 'OFF':
L
Luo Tao 已提交
111 112 113 114 115 116
    packages+=['paddle.proto',
               'paddle.trainer',
               'paddle.trainer_config_helpers',
               'paddle.v2',
               'paddle.v2.master',
               'paddle.v2.plot',
117 118
               'paddle.v2.reader',
               'paddle.v2.dataset',
L
Luo Tao 已提交
119
               'py_paddle']
Z
zhangjinchao01 已提交
120

121 122
with open('@PADDLE_SOURCE_DIR@/python/requirements.txt') as f:
    setup_requires = f.read().splitlines()
123 124

if '${CMAKE_SYSTEM_PROCESSOR}' not in ['arm', 'armv7-a', 'aarch64']:
Y
Yancey 已提交
125
    setup_requires+=['opencv-python']
126

127
# the prefix is sys.prefix which should always be usr
L
Luo Tao 已提交
128
paddle_bins = ''
129
if '${WITH_FLUID_ONLY}'== 'OFF':
L
Luo Tao 已提交
130 131 132 133 134 135 136
    paddle_bin_dir = 'opt/paddle/bin'
    paddle_bins = ['${PADDLE_BINARY_DIR}/paddle/trainer/paddle_trainer',
                   '${PADDLE_BINARY_DIR}/paddle/trainer/paddle_merge_model',
                   '${PADDLE_BINARY_DIR}/paddle/pserver/paddle_pserver_main',
                   '${PADDLE_BINARY_DIR}/paddle/scripts/paddle']

package_data={'paddle.fluid': ['core.so']}
137
if '${WITH_FLUID_ONLY}'== 'OFF':
L
Luo Tao 已提交
138 139 140 141
    package_data['paddle.v2.master']=['libpaddle_master.so']
    package_data['py_paddle']=['*.py','_swig_paddle.so']

package_dir={
142
    '': '${PADDLE_BINARY_DIR}/python',
L
Luo Tao 已提交
143 144 145 146
    # The paddle.fluid.proto will be generated while compiling.
    # So that package points to other directory.
    'paddle.fluid.proto.profiler': '${PADDLE_BINARY_DIR}/paddle/fluid/platform',
    'paddle.fluid.proto': '${PADDLE_BINARY_DIR}/paddle/fluid/framework',
Q
qiaolongfei 已提交
147
    'paddle.fluid': '${PADDLE_BINARY_DIR}/python/paddle/fluid',
L
Luo Tao 已提交
148
}
149
if '${WITH_FLUID_ONLY}'== 'OFF':
150
    package_dir['py_paddle']='${PADDLE_BINARY_DIR}/python/py_paddle'
151

152

153
paddle_rt_lib_dir = 'lib'
L
Luo Tao 已提交
154 155 156
paddle_rt_libs = ['${WARPCTC_LIBRARIES}']
if '${MKL_SHARED_LIBS}'!= '':
  paddle_rt_libs += '${MKL_SHARED_LIBS}'.split(';')
T
tensor-tang 已提交
157

T
typhoonzero 已提交
158
setup(name='${PACKAGE_NAME}',
Z
zhangjinchao01 已提交
159 160
      version='${PADDLE_VERSION}',
      description='Parallel Distributed Deep Learning',
161
      install_requires=setup_requires,
L
Luo Tao 已提交
162
      packages=packages,
T
typhoonzero 已提交
163
      ext_modules=[Extension('_foo', ['stub.cc'])],
L
Luo Tao 已提交
164 165
      package_data=package_data,
      package_dir=package_dir,
166 167
      scripts=paddle_bins,
      data_files=[(paddle_rt_lib_dir, paddle_rt_libs)]
Z
zhangjinchao01 已提交
168
)