Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
e8965288
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e8965288
编写于
3月 22, 2017
作者:
Q
qiaolongfei
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'newnew_swig' of
https://github.com/gangliao/Paddle
into swig-compile
上级
edf95da9
c1d9300a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
94 addition
and
305 deletion
+94
-305
CMakeLists.txt
CMakeLists.txt
+9
-2
cmake/coveralls.cmake
cmake/coveralls.cmake
+1
-1
cmake/util.cmake
cmake/util.cmake
+0
-20
paddle/api/CMakeLists.txt
paddle/api/CMakeLists.txt
+65
-62
paddle/api/Paddle.i
paddle/api/Paddle.i
+0
-0
paddle/api/paddle_ld_flags.py
paddle/api/paddle_ld_flags.py
+0
-157
paddle/py_paddle/.gitignore
paddle/py_paddle/.gitignore
+1
-0
paddle/setup.py.in
paddle/setup.py.in
+10
-60
paddle/utils/PythonUtil.cpp.in
paddle/utils/PythonUtil.cpp.in
+8
-3
未找到文件。
CMakeLists.txt
浏览文件 @
e8965288
...
...
@@ -40,7 +40,7 @@ option(WITH_RDMA "Compile PaddlePaddle with RDMA support" OFF)
option
(
WITH_TIMER
"Compile PaddlePaddle with stats timer"
OFF
)
option
(
WITH_PROFILER
"Compile PaddlePaddle with GPU profiler"
OFF
)
option
(
WITH_DOC
"Compile PaddlePaddle with documentation"
OFF
)
option
(
ON_COVERALLS
"Compile PaddlePaddle with code coverage"
OFF
)
option
(
WITH_COVERAGE
"Compile PaddlePaddle with code coverage"
OFF
)
option
(
COVERALLS_UPLOAD
"Package code coverage data to coveralls"
OFF
)
option
(
ON_TRAVIS
"Exclude special unit test on Travis CI"
OFF
)
...
...
@@ -82,14 +82,21 @@ include_directories("${PROJ_ROOT}/paddle/cuda/include")
include_directories
(
"
${
CMAKE_CURRENT_BINARY_DIR
}
/proto"
)
set
(
EXTERNAL_LIBS
# have not include gtest here.
${
GFLAGS_LIBRARIES
}
${
GLOG_LIBRARIES
}
${
CBLAS_LIBRARIES
}
${
PROTOBUF_LIBRARY
}
${
ZLIB_LIBRARIES
}
${
PYTHON_LIBRARIES
}
)
if
(
WITH_GPU
)
list
(
APPEND EXTERNAL_LIB
${
CUDA_LIBRARIES
}
${
CUDA_rt_LIBRARY
}
)
if
(
NOT WITH_DSO
)
list
(
APPEND EXTERNAL_LIB
${
CUDNN_LIBRARY
}
${
CUDA_CUBLAS_LIBRARIES
}
${
CUDA_curand_LIBRARY
}
)
endif
(
NOT WITH_DSO
)
endif
(
WITH_GPU
)
add_subdirectory
(
proto
)
add_subdirectory
(
paddle
)
add_subdirectory
(
python
)
...
...
cmake/coveralls.cmake
浏览文件 @
e8965288
...
...
@@ -61,7 +61,7 @@ function(code_coverage _COVERAGE_SRCS _COVERALLS_UPLOAD _CMAKE_SCRIPT_PATH)
endif
()
endfunction
()
if
(
ON_COVERALLS
)
if
(
WITH_COVERAGE
)
set
(
CMAKE_BUILD_TYPE
"Debug"
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
...
...
cmake/util.cmake
浏览文件 @
e8965288
...
...
@@ -90,26 +90,6 @@ function(link_paddle_exe TARGET_NAME)
${
RDMA_LD_FLAGS
}
${
RDMA_LIBS
}
)
if
(
WITH_PYTHON
)
target_link_libraries
(
${
TARGET_NAME
}
${
PYTHON_LIBRARIES
}
util
)
endif
()
if
(
WITH_GPU
)
target_link_libraries
(
${
TARGET_NAME
}
${
CUDA_CUDART_LIBRARY
}
)
if
(
NOT WITH_DSO OR WITH_METRIC
)
target_link_libraries
(
${
TARGET_NAME
}
${
CUDNN_LIBRARY
}
${
CUDA_curand_LIBRARY
}
)
CUDA_ADD_CUBLAS_TO_TARGET
(
${
TARGET_NAME
}
)
endif
()
check_library_exists
(
rt clock_gettime
"time.h"
HAVE_CLOCK_GETTIME
)
if
(
HAVE_CLOCK_GETTIME
)
target_link_libraries
(
${
TARGET_NAME
}
rt
)
endif
()
endif
()
add_dependencies
(
${
TARGET_NAME
}
${
external_project_dependencies
}
)
endfunction
()
...
...
paddle/api/CMakeLists.txt
浏览文件 @
e8965288
FUNCTION
(
generate_python_api target_name
)
ADD_CUSTOM_COMMAND
(
OUTPUT
${
PROJ_ROOT
}
/paddle/py_paddle/swig_paddle.py
${
PROJ_ROOT
}
/paddle/Paddle_wrap.cxx
${
PROJ_ROOT
}
/paddle/Paddle_wrap.h
COMMAND
${
SWIG_EXECUTABLE
}
-python -c++ -outcurrentdir -I../ api/Paddle.swig
&& mv
${
PROJ_ROOT
}
/paddle/swig_paddle.py
${
PROJ_ROOT
}
/paddle/py_paddle/swig_paddle.py
DEPENDS
${
PROJ_ROOT
}
/paddle/api/Paddle.swig
${
PROJ_ROOT
}
/paddle/api/PaddleAPI.h
${
external_project_dependencies
}
WORKING_DIRECTORY
${
PROJ_ROOT
}
/paddle
COMMENT
"Generate Python API from swig"
)
ADD_CUSTOM_TARGET
(
${
target_name
}
ALL DEPENDS
${
PROJ_ROOT
}
/paddle/Paddle_wrap.cxx
${
PROJ_ROOT
}
/paddle/Paddle_wrap.h
${
PROJ_ROOT
}
/paddle/py_paddle/swig_paddle.py
${
external_project_dependencies
}
)
ENDFUNCTION
(
generate_python_api
)
set
(
API_SOURCES
Arguments.cpp
ConfigParser.cpp
...
...
@@ -33,65 +15,86 @@ set(API_HEADER
PaddleAPI.h
Internal.h
)
add_library
(
paddle_api STATIC
${
API_SOURCES
}
)
add_library
(
paddle_api STATIC
${
API_SOURCES
}
)
add_dependencies
(
paddle_api gen_proto_cpp
)
list
(
LENGTH
"
${
GFLAGS_LIBRARIES
}
"
GFLAGS_LIBRARIES_LENGTH
)
INCLUDE
(
${
SWIG_USE_FILE
}
)
INCLUDE_DIRECTORIES
(
${
PROJ_ROOT
}
/paddle
)
if
(
${
GFLAGS_LIBRARIES_LENGTH
}
EQUAL 0 AND TARGET
"
${
GFLAGS_LIBRARIES
}
"
)
# Because gflags compiled by cmake, so it is imported by cmake target,
# not a real library path. Get the real library path here.
message
(
STATUS
"GFLAGS Libraries is
${
GFLAGS_LIBRARIES
}
"
)
get_target_property
(
GFLAGS_LOCATION
${
GFLAGS_LIBRARIES
}
LOCATION
)
message
(
STATUS
"GFLAGS Target location is
${
GFLAGS_LOCATION
}
"
)
else
(
)
set
(
GFLAGS_LOCATION
${
GFLAGS_LIBRARIES
}
)
endif
(
)
FILE
(
GLOB PY_PADDLE_PYTHON_FILES
${
PROJ_ROOT
}
/paddle/py_paddle/*.py
)
SET_SOURCE_FILES_PROPERTIES
(
Paddle.i PROPERTIES CPLUSPLUS ON
)
SET
(
CMAKE_SWIG_OUTDIR
${
CMAKE_CURRENT_BINARY_DIR
}
)
SET
(
CMAKE_CXX_FLAGS
"-std=c++11 -fPIC -Wall
"
)
IF
(
WITH_COVERAGE
)
SET
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-g -O0 -fprofile-arcs -ftest-coverage"
)
ENDIF
(
WITH_COVERAGE
)
configure_file
(
paddle_api_config.py.in
${
PROJ_ROOT
}
/paddle/api/paddle_api_config.py
SET
(
SWIG_MODULE_swig_paddle_EXTRA_DEPS
paddle_parameter
paddle_function
paddle_math
paddle_utils
paddle_gserver
paddle_pserver
paddle_api
paddle_cuda
paddle_trainer_lib
paddle_network
paddle_proto
${
external_project_dependencies
}
)
generate_python_api
(
python_swig_sources
)
IF
(
APPLE
)
SET
(
MACOS_LD_FLAGS
"-undefined dynamic_lookup -Wl,-all_load"
)
ELSE
(
APPLE
)
SET
(
START_GROUP
"-Xlinker -start-group"
)
SET
(
END_GROUP
"-Xlinker -end-group"
)
SET
(
ARCHIVE_START
"-Wl,--whole-archive"
)
SET
(
ARCHIVE_END
"-Wl,--no-whole-archive"
)
ENDIF
(
APPLE
)
file
(
GLOB PY_PADDLE_PYTHON_FILES
${
PROJ_ROOT
}
/paddle/py_paddle/*.py
)
SWIG_ADD_MODULE
(
swig_paddle python Paddle.i
)
SWIG_LINK_LIBRARIES
(
swig_paddle
${
MACOS_LD_FLAGS
}
${
START_GROUP
}
${
ARCHIVE_START
}
paddle_gserver
paddle_function
${
METRIC_LIBS
}
${
ARCHIVE_END
}
paddle_pserver
paddle_trainer_lib
paddle_network
paddle_parameter
paddle_math
paddle_utils
paddle_proto
paddle_cuda
paddle_api
${
CMAKE_DL_LIBS
}
${
EXTERNAL_LIBS
}
${
CMAKE_THREAD_LIBS_INIT
}
${
RDMA_LD_FLAGS
}
${
RDMA_LIBS
}
${
START_END
}
)
# TODO(yuyang18) : make wheel name calculated by cmake
add_custom_command
(
OUTPUT
${
PROJ_ROOT
}
/paddle/dist/.timestamp
add_custom_command
(
OUTPUT
${
PROJ_ROOT
}
/paddle/py_paddle/_swig_paddle.so
COMMAND cp
${
CMAKE_CURRENT_BINARY_DIR
}
/swig_paddle.py
${
PROJ_ROOT
}
/paddle/py_paddle
COMMAND cp
${
CMAKE_CURRENT_BINARY_DIR
}
/_swig_paddle.so
${
PROJ_ROOT
}
/paddle/py_paddle
COMMAND env
${
py_env
}
${
PYTHON_EXECUTABLE
}
setup.py bdist_wheel
COMMAND
${
CMAKE_COMMAND
}
-E touch dist/.timestamp
COMMAND rm -rf py_paddle.egg-info build
WORKING_DIRECTORY
${
PROJ_ROOT
}
/paddle
DEPENDS python_swig_sources
paddle_parameter
paddle_function
paddle_math
paddle_utils
paddle_gserver
paddle_pserver
paddle_trainer
paddle_api
paddle_cuda
${
PY_PADDLE_PYTHON_FILES
}
DEPENDS _swig_paddle
)
install
(
DIRECTORY
${
PROJ_ROOT
}
/paddle/dist/
DESTINATION opt/paddle/share/wheels
)
# TODO(yuyang18) : make wheel name calculated by cmake
add_custom_target
(
python_api_wheel ALL DEPENDS
${
PROJ_ROOT
}
/paddle/py_paddle/_swig_paddle.so
)
add_custom_target
(
python_api_wheel ALL DEPENDS
${
PROJ_ROOT
}
/paddle/dist/.timestamp
)
add_dependencies
(
python_api_wheel python_swig_sources
paddle_parameter
paddle_math
paddle_utils
paddle_gserver
paddle_pserver
paddle_trainer
paddle_api
paddle_cuda
)
install
(
DIRECTORY
${
PROJ_ROOT
}
/paddle/dist/ DESTINATION opt/paddle/share/wheels
)
if
(
WITH_TESTING
)
IF
(
NOT PY_PIP_FOUND
)
...
...
paddle/api/Paddle.
swig
→
paddle/api/Paddle.
i
浏览文件 @
e8965288
文件已移动
paddle/api/paddle_ld_flags.py
已删除
100644 → 0
浏览文件 @
edf95da9
# 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.
try
:
from
paddle_api_config
import
*
import
os.path
import
platform
system
=
platform
.
system
().
lower
()
is_osx
=
(
system
==
'darwin'
)
is_win
=
(
system
==
'windows'
)
is_lin
=
(
system
==
'linux'
)
if
is_lin
:
whole_start
=
"-Wl,--whole-archive"
whole_end
=
"-Wl,--no-whole-archive"
elif
is_osx
:
whole_start
=
""
whole_end
=
""
LIB_DIRS
=
[
"math"
,
'function'
,
'utils'
,
'parameter'
,
"gserver"
,
"api"
,
"cuda"
,
"pserver"
,
"trainer"
]
PARENT_LIB_DIRS
=
[
'proto'
]
class
PaddleLDFlag
(
object
):
def
__init__
(
self
):
self
.
paddle_build_dir
=
PADDLE_BUILD_DIR
self
.
paddle_build_dir
=
os
.
path
.
abspath
(
self
.
paddle_build_dir
)
self
.
with_gpu
=
PaddleLDFlag
.
cmake_bool
(
WITH_GPU
)
self
.
protolib
=
PROTOBUF_LIBRARY
self
.
zlib
=
ZLIB_LIBRARIES
self
.
thread
=
CMAKE_THREAD_LIB
self
.
dl_libs
=
CMAKE_DL_LIBS
self
.
with_python
=
PaddleLDFlag
.
cmake_bool
(
WITH_PYTHON
)
self
.
python_libs
=
PYTHON_LIBRARIES
self
.
glog_libs
=
GLOG_LIBRARIES
self
.
with_coverage
=
PaddleLDFlag
.
cmake_bool
(
WITH_COVERALLS
)
self
.
gflags_libs
=
GFLAGS_LIBRARIES
self
.
gflags_location
=
GFLAGS_LOCATION
self
.
cblas_libs
=
CBLAS_LIBRARIES
self
.
curt
=
CUDA_LIBRARIES
def
ldflag_str
(
self
):
return
" "
.
join
(
[
self
.
libs_dir_str
(),
self
.
parent_dir_str
(),
self
.
libs_str
()])
def
libs_dir_str
(
self
):
libdirs
=
LIB_DIRS
return
" "
.
join
(
map
(
lambda
x
:
"-L"
+
os
.
path
.
join
(
self
.
paddle_build_dir
,
x
),
libdirs
))
def
parent_dir_str
(
self
):
libdirs
=
PARENT_LIB_DIRS
return
" "
.
join
(
map
(
lambda
x
:
"-L"
+
os
.
path
.
join
(
self
.
paddle_build_dir
,
'..'
,
x
),
libdirs
))
def
libs_str
(
self
):
libs
=
[
whole_start
,
"-lpaddle_gserver"
,
"-lpaddle_function"
,
whole_end
,
"-lpaddle_pserver"
,
"-lpaddle_trainer_lib"
,
"-lpaddle_network"
,
'-lpaddle_parameter'
,
"-lpaddle_math"
,
'-lpaddle_utils'
,
"-lpaddle_proto"
,
"-lpaddle_cuda"
,
"-lpaddle_api"
,
self
.
normalize_flag
(
self
.
protolib
),
self
.
normalize_flag
(
self
.
glog_libs
),
self
.
normalize_flag
(
self
.
gflags_libs
),
self
.
normalize_flag
(
self
.
zlib
),
self
.
normalize_flag
(
self
.
thread
),
self
.
normalize_flag
(
self
.
dl_libs
),
self
.
normalize_flag
(
self
.
cblas_libs
),
]
if
self
.
with_python
:
libs
.
append
(
self
.
normalize_flag
(
self
.
python_libs
))
if
self
.
with_gpu
:
libs
.
append
(
self
.
normalize_flag
(
self
.
curt
))
if
self
.
with_coverage
:
libs
.
append
(
"-fprofile-arcs"
)
return
" "
.
join
(
filter
(
lambda
l
:
len
(
l
)
!=
0
,
libs
))
def
normalize_flag
(
self
,
cmake_flag
):
"""
CMake flag string to ld flag
:type cmake_flag: str
"""
if
";"
in
cmake_flag
:
return
" "
.
join
(
map
(
self
.
normalize_flag
,
cmake_flag
.
split
(
";"
)))
if
cmake_flag
.
startswith
(
"/"
):
# is a path
return
cmake_flag
elif
cmake_flag
.
startswith
(
"-l"
):
# normal link command
return
cmake_flag
elif
cmake_flag
in
[
"gflags-shared"
,
"gflags-static"
,
"gflags_nothreads-shared"
,
"gflags_nothreads-static"
]:
# special for gflags
assert
PaddleLDFlag
.
cmake_bool
(
self
.
gflags_location
)
return
self
.
gflags_location
elif
len
(
cmake_flag
)
!=
0
:
return
""
.
join
([
"-l"
,
cmake_flag
])
else
:
return
""
@
staticmethod
def
cmake_bool
(
cmake_str
):
"""
CMake bool string to bool
:param cmake_str: cmake boolean string
:type cmake_str: str
:rtype: bool
"""
if
cmake_str
in
[
"FALSE"
,
"OFF"
,
"NO"
]
or
cmake_str
.
endswith
(
"-NOTFOUND"
):
return
False
else
:
return
True
def
c_flag
(
self
):
if
self
.
with_coverage
:
return
[
"-fprofile-arcs"
,
"-ftest-coverage"
,
"-O0"
,
"-g"
,
"-std=c++11"
]
else
:
return
[
"-std=c++11"
]
except
ImportError
:
class
PaddleLDFlag
(
object
):
def
ldflag_str
(
self
):
pass
def
c_flag
(
self
):
pass
paddle/py_paddle/.gitignore
浏览文件 @
e8965288
swig_paddle.py
_swig_paddle.so
paddle/setup.py.in
浏览文件 @
e8965288
...
...
@@ -12,68 +12,18 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# This file is used to build paddle python binding package.
# It will be invoked by Makefile that generated by COMAKE
from setuptools import setup, Extension
import numpy as np
import api.paddle_ld_flags
import platform
import os
system = platform.system().lower()
is_osx = (system == 'darwin')
is_win = (system == 'windows')
is_lin = (system == 'linux')
# The extra links will passed from COMAKE
# because generate paddle LDFLAGS is too complicated to do in setup.py
# it just read COMAKE generated LDFLAGS.
extra_comps = []
extra_links = []
obj = api.paddle_ld_flags.PaddleLDFlag()
extra_comps = obj.c_flag()
ldflags = obj.ldflag_str()
if ldflags is not None:
extra_links.extend(ldflags.split(" "))
try:
with open('.py_paddle_extra_link_flags', 'r') as f:
for line in f:
extra_links += line.split()
except:
pass
if is_lin == True:
extra_links = ["-Xlinker", '-start-group'] + extra_links + ["-Xlinker", "-end-group"]
elif is_osx == True:
os.environ["ARCHFLAGS"] = "-arch x86_64"
extra_links = ["-Wl,-all_load"] + extra_links
include_dirs = [np.get_include(), "../"] # include numpy and paddle.
os.environ["CC"] = "@CMAKE_C_COMPILER@"
os.environ["CXX"] = "@CMAKE_CXX_COMPILER@"
setup(name="py_paddle",
version="@PADDLE_VERSION@",
ext_modules=[
Extension('py_paddle._swig_paddle', # Build SWIG Extension.
['Paddle_wrap.cxx'],
language = "c++",
include_dirs = include_dirs,
extra_link_args = extra_links,
extra_compile_args = extra_comps
)
],
packages=['py_paddle'],
include_dirs = include_dirs,
install_requires = [
'nltk>=3.2.2',
'numpy>=1.8.0', # The numpy is required.
'protobuf>=3.0.0' # The paddle protobuf version
],
version="@PADDLE_VERSION@",
packages=['py_paddle'],
include_package_data=True,
package_data={'py_paddle':['*.py','_swig_paddle.so']},
install_requires = [
'numpy>=1.8.0', # The numpy is required.
'protobuf>=@PROTOBUF_VERSION@' # The paddle protobuf version
],
url='http://www.paddlepaddle.org/',
license='Apache 2.0',
)
paddle/utils/PythonUtil.cpp.in
浏览文件 @
e8965288
...
...
@@ -195,9 +195,14 @@ extern const char enable_virtualenv_py[];
}
void initPython(int argc, char** argv) {
#ifndef PADDLE_NO_PYTHON
char pyHome[] = "@PYTHON_INSTALL_DIR@"; // NOLINT
if (strlen(pyHome)) {
Py_SetPythonHome(pyHome);
std::string pyHome;
#if defined(__APPLE__) || defined(__OSX__)
pyHome = "/usr/local/Frameworks/Python.framework/Versions/2.7";
Py_SetPythonHome(const_cast<char*>(pyHome.c_str()));
#endif
pyHome = "@PYTHON_INSTALL_DIR@"; // NOLINT
if (!pyHome.empty()) {
Py_SetPythonHome(const_cast<char*>(pyHome.c_str()));
}
Py_SetProgramName(argv[0]);
Py_Initialize();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录