diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4b0682c4fe991a5656e02d6a1845f7d73f61d6ff..e0db0d535b3fc661c6398f74e17d2cb048217677 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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)
diff --git a/cmake/coveralls.cmake b/cmake/coveralls.cmake
index 9be7643819efdde3f42e4d39b2849ecc17e0d9fb..ca1471cabb57c0795ee193493d2e60bb5bd9e1cc 100644
--- a/cmake/coveralls.cmake
+++ b/cmake/coveralls.cmake
@@ -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")
diff --git a/cmake/external/protobuf.cmake b/cmake/external/protobuf.cmake
index 446a7532c55bd3ca66662efe70db93551580b8cc..ad1426fd940c7b163668c33d41731fe75d89dd89 100644
--- a/cmake/external/protobuf.cmake
+++ b/cmake/external/protobuf.cmake
@@ -14,7 +14,8 @@
INCLUDE(ExternalProject)
-FIND_PACKAGE(Protobuf 3.1)
+set(PROTOBUF_VERSION 3.1)
+FIND_PACKAGE(Protobuf ${PROTOBUF_VERSION})
IF(PROTOBUF_FOUND)
EXEC_PROGRAM(${PROTOBUF_PROTOC_EXECUTABLE} ARGS --version OUTPUT_VARIABLE PROTOBUF_VERSION)
diff --git a/cmake/util.cmake b/cmake/util.cmake
index 3640e4651fdd8b491f63875a7ea886afcadf978a..bacb64eb9ee65fffc824e4587a22fc432c092b19 100644
--- a/cmake/util.cmake
+++ b/cmake/util.cmake
@@ -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()
diff --git a/doc/getstarted/build_and_install/build_from_source_en.md b/doc/getstarted/build_and_install/build_from_source_en.md
index d9d54bff3096cb3520409971dbd1b2e179ac8be1..69f4501f370dcc9d603ec54a63d68568d66e832e 100644
--- a/doc/getstarted/build_and_install/build_from_source_en.md
+++ b/doc/getstarted/build_and_install/build_from_source_en.md
@@ -51,7 +51,7 @@ PaddlePaddle supports some build options.
WITH_TIMER | Compile PaddlePaddle with stats timer |
WITH_PROFILER | Compile PaddlePaddle with GPU profiler |
WITH_DOC | Compile PaddlePaddle with documentation |
-ON_COVERALLS | Compile PaddlePaddle with code coverage |
+WITH_COVERAGE | Compile PaddlePaddle with code coverage |
COVERALLS_UPLOAD | Package code coverage data to coveralls |
ON_TRAVIS | Exclude special unit test on Travis CI |
diff --git a/paddle/api/CMakeLists.txt b/paddle/api/CMakeLists.txt
index 6e8fcd114df580a00858d95f0af0d1ec0bd9b4a2..3760c6727c21cfb32ca4d2efc30351352c9b182b 100644
--- a/paddle/api/CMakeLists.txt
+++ b/paddle/api/CMakeLists.txt
@@ -1,21 +1,3 @@
-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)
diff --git a/paddle/api/Paddle.swig b/paddle/api/Paddle.i
similarity index 100%
rename from paddle/api/Paddle.swig
rename to paddle/api/Paddle.i
diff --git a/paddle/api/paddle_api_config.py.in b/paddle/api/paddle_api_config.py.in
deleted file mode 100644
index 82f45ba6ccec49eb190d1814a67a575f311689e8..0000000000000000000000000000000000000000
--- a/paddle/api/paddle_api_config.py.in
+++ /dev/null
@@ -1,17 +0,0 @@
-PADDLE_BUILD_DIR="@CMAKE_CURRENT_BINARY_DIR@/../"
-WITH_GPU="@WITH_GPU@"
-PROTOBUF_LIBRARY="@PROTOBUF_LIBRARY@"
-ZLIB_LIBRARIES="@ZLIB_LIBRARIES@"
-CMAKE_THREAD_LIB="@CMAKE_THREAD_LIBS_INIT@"
-CMAKE_DL_LIBS="@CMAKE_DL_LIBS@"
-
-
-WITH_PYTHON="@WITH_PYTHON@"
-PYTHON_LIBRARIES="@PYTHON_LIBRARIES@"
-GLOG_LIBRARIES="@GLOG_LIBRARIES@"
-GFLAGS_LIBRARIES="@GFLAGS_LIBRARIES@"
-GFLAGS_LOCATION="@GFLAGS_LOCATION@"
-CBLAS_LIBRARIES="@CBLAS_LIBRARIES@"
-
-CUDA_LIBRARIES="@CUDA_CUDART_LIBRARY@"
-WITH_COVERALLS="@ON_COVERALLS@"
diff --git a/paddle/api/paddle_ld_flags.py b/paddle/api/paddle_ld_flags.py
deleted file mode 100644
index ad5dce209bf8e14120320a58c3cd85d6f6a97688..0000000000000000000000000000000000000000
--- a/paddle/api/paddle_ld_flags.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# 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
diff --git a/paddle/py_paddle/.gitignore b/paddle/py_paddle/.gitignore
index 9e8ad4bf1638a69ab7ef19badfbf867e116548d2..80d1f76fbc05627e21e334af55d63a4a534434c6 100644
--- a/paddle/py_paddle/.gitignore
+++ b/paddle/py_paddle/.gitignore
@@ -1 +1,2 @@
swig_paddle.py
+_swig_paddle.so
diff --git a/paddle/scripts/docker/build.sh b/paddle/scripts/docker/build.sh
index 405d3338af3e2c5257de2692e395a27c3917f402..8d50ced23fc7430edd23d380c9fa12b2cd200a39 100644
--- a/paddle/scripts/docker/build.sh
+++ b/paddle/scripts/docker/build.sh
@@ -33,7 +33,7 @@ cmake .. \
-DWITH_SWIG_PY=ON \
-DCUDNN_ROOT=/usr/ \
-DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \
- -DON_COVERALLS=${TEST:-OFF} \
+ -DWITH_COVERAGE=${TEST:-OFF} \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
make -j `nproc`
if [[ ${TEST:-OFF} == "ON" ]]; then
diff --git a/paddle/scripts/travis/build_and_test.sh b/paddle/scripts/travis/build_and_test.sh
index 7deb3e62e88de7e1306fcbfc5a28aa4372d678e6..f2cbc561652a3c7502de94be37d75783fc40b9c1 100755
--- a/paddle/scripts/travis/build_and_test.sh
+++ b/paddle/scripts/travis/build_and_test.sh
@@ -5,7 +5,7 @@ NPROC=1
export PYTHONPATH=/opt/python/2.7.12/lib/python2.7/site-packages
export PYTHONHOME=/opt/python/2.7.12
export PATH=/opt/python/2.7.12/bin:${PATH}
-cmake .. -DCMAKE_Fortran_COMPILER=/usr/bin/gfortran-4.8 -DON_TRAVIS=ON -DON_COVERALLS=ON -DCOVERALLS_UPLOAD=ON ${EXTRA_CMAKE_OPTS}
+cmake .. -DCMAKE_Fortran_COMPILER=/usr/bin/gfortran-4.8 -DON_TRAVIS=ON -DWITH_COVERAGE=ON -DCOVERALLS_UPLOAD=ON ${EXTRA_CMAKE_OPTS}
NRPOC=`nproc`
make -j $NPROC
make coveralls
diff --git a/paddle/setup.py.in b/paddle/setup.py.in
index 382d5be6ecfc26b4a524bb6a775bd1a805a34d96..0b62436a7f81682d5279c3b307ac1abf09eafffb 100644
--- a/paddle/setup.py.in
+++ b/paddle/setup.py.in
@@ -12,68 +12,19 @@
# 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 = [
+ 'nltk>=3.2.2',
+ 'numpy>=1.8.0', # The numpy is required.
+ 'protobuf>=${PROTOBUF_VERSION}' # The paddle protobuf version
+ ],
+ url='http://www.paddlepaddle.org/',
+ license='Apache 2.0',
)
diff --git a/paddle/utils/PythonUtil.cpp.in b/paddle/utils/PythonUtil.cpp.in
index 66b5795e29fb9fa751ed802e87ced0a71aea4c51..a51b8f765f41f6febb86002f371b14e8797e7e4d 100644
--- a/paddle/utils/PythonUtil.cpp.in
+++ b/paddle/utils/PythonUtil.cpp.in
@@ -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(pyHome.c_str()));
+#endif
+ pyHome = "@PYTHON_INSTALL_DIR@"; // NOLINT
+ if (!pyHome.empty()) {
+ Py_SetPythonHome(const_cast(pyHome.c_str()));
}
Py_SetProgramName(argv[0]);
Py_Initialize();