|
|
|
@ -18,6 +18,9 @@ INCLUDE(python_module)
|
|
|
|
|
FIND_PACKAGE(PythonInterp 2.7)
|
|
|
|
|
IF(WITH_PYTHON)
|
|
|
|
|
FIND_PACKAGE(PythonLibs 2.7)
|
|
|
|
|
# Fixme: Maybe find a static library. Get SHARED/STATIC by FIND_PACKAGE.
|
|
|
|
|
ADD_LIBRARY(python SHARED IMPORTED GLOBAL)
|
|
|
|
|
SET_PROPERTY(TARGET python PROPERTY IMPORTED_LOCATION ${PYTHON_LIBRARIES})
|
|
|
|
|
ENDIF(WITH_PYTHON)
|
|
|
|
|
|
|
|
|
|
SET(py_env "")
|
|
|
|
@ -32,193 +35,6 @@ IF(PYTHONINTERP_FOUND)
|
|
|
|
|
MESSAGE(FATAL_ERROR "Found Python Protobuf ${PY_GOOGLE.PROTOBUF_VERSION} < 3.0.0, "
|
|
|
|
|
"please use pip to upgrade protobuf. pip install -U protobuf")
|
|
|
|
|
ENDIF()
|
|
|
|
|
ELSE(PYTHONINTERP_FOUND)
|
|
|
|
|
MESSAGE(FATAL_ERROR "Please install python 2.7 before building PaddlePaddle.")
|
|
|
|
|
##################################### PYTHON ########################################
|
|
|
|
|
SET(PYTHON_SOURCES_DIR ${THIRD_PARTY_PATH}/python)
|
|
|
|
|
SET(PYTHON_INSTALL_DIR ${THIRD_PARTY_PATH}/install/python)
|
|
|
|
|
SET(_python_DIR ${PYTHON_INSTALL_DIR})
|
|
|
|
|
|
|
|
|
|
IF(UNIX)
|
|
|
|
|
SET(PYTHON_FOUND ON)
|
|
|
|
|
SET(PYTHON_INCLUDE_DIR "${PYTHON_INSTALL_DIR}/include/python2.7" CACHE PATH "Python include dir" FORCE)
|
|
|
|
|
SET(PYTHON_LIBRARIES "${PYTHON_INSTALL_DIR}/lib/libpython2.7.a" CACHE FILEPATH "Python library" FORCE)
|
|
|
|
|
SET(PYTHON_EXECUTABLE ${PYTHON_INSTALL_DIR}/bin/python CACHE FILEPATH "Python executable" FORCE)
|
|
|
|
|
SET(PY_SITE_PACKAGES_PATH "${PYTHON_INSTALL_DIR}/lib/python2.7/site-packages" CACHE PATH "Python site-packages path" FORCE)
|
|
|
|
|
ELSEIF(WIN32)
|
|
|
|
|
SET(PYTHON_FOUND ON)
|
|
|
|
|
SET(PYTHON_INCLUDE_DIR "${PYTHON_INSTALL_DIR}/include" CACHE PATH "Python include dir" FORCE)
|
|
|
|
|
SET(PYTHON_LIBRARIES "${PYTHON_INSTALL_DIR}/libs/python27.lib" CACHE FILEPATH "Python library" FORCE)
|
|
|
|
|
SET(PYTHON_EXECUTABLE "${PYTHON_INSTALL_DIR}/bin/python.exe" CACHE FILEPATH "Python executable" FORCE)
|
|
|
|
|
SET(PY_SITE_PACKAGES_PATH "${PYTHON_INSTALL_DIR}/Lib/site-packages" CACHE PATH "Python site-packages path" FORCE)
|
|
|
|
|
ELSE()
|
|
|
|
|
MESSAGE(FATAL_ERROR "Unknown system !")
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
IF(APPLE)
|
|
|
|
|
LIST(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_ARGS
|
|
|
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON
|
|
|
|
|
)
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
SET(EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS)
|
|
|
|
|
|
|
|
|
|
# Force Python build to "Release".
|
|
|
|
|
IF(CMAKE_CONFIGURATION_TYPES)
|
|
|
|
|
SET(SAVED_CMAKE_CFG_INTDIR ${CMAKE_CFG_INTDIR})
|
|
|
|
|
SET(CMAKE_CFG_INTDIR "Release")
|
|
|
|
|
ELSE()
|
|
|
|
|
LIST(APPEND EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS
|
|
|
|
|
-DCMAKE_BUILD_TYPE:STRING=Release
|
|
|
|
|
)
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
ExternalProject_Add(python
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
GIT_REPOSITORY "https://github.com/python-cmake-buildsystem/python-cmake-buildsystem.git"
|
|
|
|
|
PREFIX ${PYTHON_SOURCES_DIR}
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
CMAKE_ARGS -DPYTHON_VERSION=2.7.12
|
|
|
|
|
CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
|
|
|
|
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
|
|
|
|
CMAKE_CACHE_ARGS
|
|
|
|
|
-DCMAKE_INSTALL_PREFIX:PATH=${PYTHON_INSTALL_DIR}
|
|
|
|
|
-DBUILD_LIBPYTHON_SHARED:BOOL=OFF
|
|
|
|
|
-DUSE_SYSTEM_LIBRARIES:BOOL=OFF
|
|
|
|
|
-DZLIB_ROOT:FILEPATH=${ZLIB_ROOT}
|
|
|
|
|
-DZLIB_INCLUDE_DIR:PATH=${ZLIB_INCLUDE_DIR}
|
|
|
|
|
-DZLIB_LIBRARY:FILEPATH=${ZLIB_LIBRARIES}
|
|
|
|
|
-DDOWNLOAD_SOURCES:BOOL=ON
|
|
|
|
|
-DINSTALL_WINDOWS_TRADITIONAL:BOOL=OFF
|
|
|
|
|
${EXTERNAL_PROJECT_OPTIONAL_CMAKE_CACHE_ARGS}
|
|
|
|
|
${EXTERNAL_PROJECT_OPTIONAL_CMAKE_ARGS}
|
|
|
|
|
DEPENDS zlib
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
SET(py_env
|
|
|
|
|
PATH=${PYTHON_INSTALL_DIR}/bin
|
|
|
|
|
PYTHONHOME=${PYTHON_INSTALL_DIR}
|
|
|
|
|
PYTHONPATH=${PYTHON_INSTALL_DIR}/lib:${PYTHON_INSTALL_DIR}/lib/python2.7:${PY_SITE_PACKAGES_PATH})
|
|
|
|
|
####################################################################################
|
|
|
|
|
|
|
|
|
|
##################################### SETUPTOOLS ###################################
|
|
|
|
|
SET(SETUPTOOLS_SOURCES_DIR ${PYTHON_SOURCES_DIR}/setuptools)
|
|
|
|
|
ExternalProject_Add(setuptools
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
PREFIX ${SETUPTOOLS_SOURCES_DIR}
|
|
|
|
|
URL "https://pypi.python.org/packages/source/s/setuptools/setuptools-18.3.2.tar.gz"
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
PATCH_COMMAND ""
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
|
BUILD_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
DEPENDS python zlib
|
|
|
|
|
)
|
|
|
|
|
#####################################################################################
|
|
|
|
|
|
|
|
|
|
##################################### SIX ###########################################
|
|
|
|
|
SET(SIX_SOURCES_DIR ${PYTHON_SOURCES_DIR}/six)
|
|
|
|
|
ExternalProject_Add(six
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
PREFIX ${SIX_SOURCES_DIR}
|
|
|
|
|
URL https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
PATCH_COMMAND ""
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
|
BUILD_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
DEPENDS python setuptools
|
|
|
|
|
)
|
|
|
|
|
#####################################################################################
|
|
|
|
|
|
|
|
|
|
##################################### CYTHON ########################################
|
|
|
|
|
SET(CYTHON_SOURCES_DIR ${PYTHON_SOURCES_DIR}/cython)
|
|
|
|
|
ExternalProject_Add(cython
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
PREFIX ${CYTHON_SOURCES_DIR}
|
|
|
|
|
URL https://github.com/cython/cython/archive/0.25.2.tar.gz
|
|
|
|
|
GIT_TAG 0.25.2
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
PATCH_COMMAND ""
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
INSTALL_COMMAND ""
|
|
|
|
|
BUILD_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
DEPENDS python
|
|
|
|
|
)
|
|
|
|
|
####################################################################################
|
|
|
|
|
|
|
|
|
|
##################################### NUMPY ########################################
|
|
|
|
|
SET(NUMPY_SOURCES_DIR ${PYTHON_SOURCES_DIR}/numpy)
|
|
|
|
|
SET(NUMPY_TAG_VERSION "v1.11.3")
|
|
|
|
|
SET(NUMPY_VERSION "1.11.3")
|
|
|
|
|
|
|
|
|
|
SET(EGG_NAME "")
|
|
|
|
|
SET(PYTHON_NUMPY_INCLUDE_DIR "")
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
SET(EGG_NAME "numpy-${NUMPY_VERSION}-py2.7-${HOST_SYSTEM}.egg")
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
IF(APPLE)
|
|
|
|
|
SET(EGG_NAME "numpy-${NUMPY_VERSION}-py2.7-${HOST_SYSTEM}-${MACOS_VERSION}")
|
|
|
|
|
ELSE(APPLE)
|
|
|
|
|
SET(EGG_NAME "numpy-${NUMPY_VERSION}-py2.7-linux")
|
|
|
|
|
SET(EGG_NAME "numpy-${NUMPY_VERSION}-py2.7-linux")
|
|
|
|
|
ENDIF(APPLE)
|
|
|
|
|
|
|
|
|
|
FOREACH(suffix x86_64 intel fat64 fat32 universal)
|
|
|
|
|
LIST(APPEND PYTHON_NUMPY_INCLUDE_DIR ${PY_SITE_PACKAGES_PATH}/${EGG_NAME}-${suffix}.egg/numpy/core/include)
|
|
|
|
|
ENDFOREACH()
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
ExternalProject_Add(numpy
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
GIT_REPOSITORY https://github.com/numpy/numpy.git
|
|
|
|
|
GIT_TAG ${NUMPY_TAG_VERSION}
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
PREFIX ${NUMPY_SOURCES_DIR}
|
|
|
|
|
BUILD_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py build
|
|
|
|
|
INSTALL_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
DEPENDS python setuptools cython
|
|
|
|
|
)
|
|
|
|
|
####################################################################################
|
|
|
|
|
|
|
|
|
|
##################################### WHEEL ########################################
|
|
|
|
|
SET(WHEEL_SOURCES_DIR ${PYTHON_SOURCES_DIR}/wheel)
|
|
|
|
|
ExternalProject_Add(wheel
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
URL https://pypi.python.org/packages/source/w/wheel/wheel-0.29.0.tar.gz
|
|
|
|
|
PREFIX ${WHEEL_SOURCES_DIR}
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
UPDATE_COMMAND ""
|
|
|
|
|
BUILD_COMMAND ""
|
|
|
|
|
INSTALL_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
DEPENDS python setuptools
|
|
|
|
|
)
|
|
|
|
|
####################################################################################
|
|
|
|
|
|
|
|
|
|
################################### PROTOBUF #######################################
|
|
|
|
|
SET(PY_PROTOBUF_SOURCES_DIR ${PYTHON_SOURCES_DIR}/protobuf)
|
|
|
|
|
ExternalProject_Add(python-protobuf
|
|
|
|
|
${EXTERNAL_PROJECT_LOG_ARGS}
|
|
|
|
|
URL https://pypi.python.org/packages/e0/b0/0a1b364fe8a7d177b4b7d4dca5b798500dc57a7273b93cca73931b305a6a/protobuf-3.1.0.post1.tar.gz
|
|
|
|
|
URL_MD5 38b5fb160c768d2f8444d0c6d637ff91
|
|
|
|
|
PREFIX ${PY_PROTOBUF_SOURCES_DIR}
|
|
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
|
PATCH_COMMAND ""
|
|
|
|
|
CONFIGURE_COMMAND ""
|
|
|
|
|
BUILD_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py build
|
|
|
|
|
INSTALL_COMMAND env ${py_env} ${PYTHON_EXECUTABLE} setup.py install
|
|
|
|
|
DEPENDS python setuptools six
|
|
|
|
|
)
|
|
|
|
|
####################################################################################
|
|
|
|
|
|
|
|
|
|
LIST(APPEND external_project_dependencies python setuptools six cython wheel python-protobuf numpy)
|
|
|
|
|
|
|
|
|
|
ENDIF(PYTHONINTERP_FOUND)
|
|
|
|
|
|
|
|
|
|
IF(WITH_PYTHON)
|
|
|
|
|