Skip to content

Commit

Permalink
Merge pull request #9 from fredboudon/upcoming
Browse files Browse the repository at this point in the history
Upcoming
  • Loading branch information
fredboudon authored Jan 29, 2020
2 parents 012a481 + 0a8df0e commit 17bbd5c
Show file tree
Hide file tree
Showing 18 changed files with 303 additions and 161 deletions.
52 changes: 42 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,39 +1,69 @@
# --- L-Py Project
# --- CMake Modules

cmake_minimum_required(VERSION 3.12)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include("Anaconda")
include("pywrapper")

# --- L-Py Project

project(lpy_project CXX)

# --- CMake Modules
# --- Build setup

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

include("Anaconda")
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)

if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif("${isSystemDir}" STREQUAL "-1")



# --- CXX11 Compilation

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")

# --- (Win32) Multithreaded Compilation

if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
endif()


## ###################################################################
## Dependencies
## ###################################################################

# --- Python

find_package (Python3 COMPONENTS Interpreter Development)
include_directories(${Python3_INCLUDE_DIRS})

# --- Libraries

find_package(Threads REQUIRED)
find_package(Python REQUIRED)
find_package(Qt5Core CONFIG REQUIRED)
find_package(Qt5Concurrent CONFIG REQUIRED)
find_package(PlantGL REQUIRED)

# Boost
if (DEFINED CONDA_ENV)
if (USE_CONDA)
set(BOOST_ROOT ${CONDA_ENV})
set(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib")
endif()

set(Boost_NO_SYSTEM_PATHS ON)
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS OFF)
set(BUILD_SHARED_LIBS ON)

find_package(Boost COMPONENTS system ${BOOST_PYTHON_LIB} REQUIRED)
find_package(Boost COMPONENTS system python REQUIRED)

# --- Include Directories

Expand All @@ -43,7 +73,9 @@ include_directories(${Boost_INCLUDE_DIR})

# --- Library Directory

link_directories("${CONDA_ENV}/lib")
if (DEFINED CONDA_ENV)
link_directories("${CONDA_ENV}/lib")
endif()

# --- Source Directories

Expand Down
2 changes: 2 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ install:
- git clone https://github.com/OpenAlea/appveyor-ci.git appveyor-ci
- cd appveyor-ci
- call install.bat
- conda config --prepend channels conda-forge
- conda config --prepend channels fredboudon

before_build:
- call before_build.bat
Expand Down
1 change: 1 addition & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
conda build . -c conda-forge -c fredboudon -c defaults --python=3.7
57 changes: 55 additions & 2 deletions cmake/Anaconda.cmake
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
# Anaconda Check
if (DEFINED ENV{CONDA_PREFIX})
# Anaconda Environment
message(STATUS "Anaconda environment detected.")
message(STATUS "Anaconda environment detected: " $ENV{CONDA_PREFIX})

file(TO_CMAKE_PATH $ENV{CONDA_PREFIX} TMP_CONDA_ENV)

if (DEFINED ENV{BUILD_PREFIX})
file(TO_CMAKE_PATH $ENV{BUILD_PREFIX} TMP_CONDA_ENV)
else()
file(TO_CMAKE_PATH $ENV{CONDA_PREFIX} TMP_CONDA_ENV)
endif()

if (WIN32)
set(CONDA_ENV "${TMP_CONDA_ENV}/Library/")
Expand All @@ -12,4 +17,52 @@ if (DEFINED ENV{CONDA_PREFIX})
endif()

set(CONDA_PYTHON_ENV "${TMP_CONDA_ENV}/")

set(USE_CONDA ON)

else()
message(STATUS "Compilation outside an anaconda environment.")
set(USE_CONDA OFF)
endif()


if (DEFINED ENV{CONDA_BUILD})
message(STATUS "Conda build detected. " $ENV{CONDA_BUILD})

# specify the cross compiler
set(CMAKE_C_COMPILER $ENV{CC})
set(CMAKE_LINKER $ENV{LD})
set(CMAKE_AR $ENV{AR})
set(CMAKE_NM $ENV{NM})
set(CMAKE_RANLIB $ENV{RANLIB})
set(CMAKE_STRIP $ENV{STRIP})
set(CMAKE_INSTALL_NAME_TOOL $ENV{INSTALL_NAME_TOOL})
#CMAKE_MAKE_PROGRAM
#CMAKE_OBJCOPY
#CMAKE_OBJDUMP

if (APPLE)
set(CMAKE_OSX_ARCHITECTURES $ENV{OSX_ARCH})
endif()

set(CMAKE_CXX_COMPILER $ENV{CXX})
set(CMAKE_CXX_COMPILER_RANLIB $ENV{RANLIB})
set(CMAKE_CXX_COMPILER_AR $ENV{AR})

# where is the target environment
set(CMAKE_FIND_ROOT_PATH $ENV{PREFIX} $ENV{BUILD_PREFIX} $ENV{BUILD_PREFIX}/$ENV{HOST}/sysroot $ENV{CONDA_BUILD_SYSROOT})

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)


set(USE_CONDA_BUILD ON)
else()
set(USE_CONDA_BUILD OFF)
endif()



6 changes: 3 additions & 3 deletions cmake/CXX14.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ else()
endif()

# C++14 Standard
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
#set(CMAKE_CXX_STANDARD 14)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_EXTENSIONS OFF)
35 changes: 35 additions & 0 deletions cmake/pywrapper.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@


function(pgllib_link_python libwrapname)
if(NOT APPLE OR NOT USE_CONDA)
if (Python3_FOUND)
target_link_libraries(${libwrapname} Python3::Python)
elseif (Python2_FOUND)
target_link_libraries(${libwrapname} Python2::Python)
endif()
else()
message(STATUS "Do not link with Python directly : " ${libwrapname})
endif()

# Disable Boost Auto-Link
#target_compile_definitions(${libwrapname} PRIVATE BOOST_ALL_NO_LIB)

#target_link_libraries(${libwrapname} Boost::system Boost::thread Boost::python )

endfunction()



function(pglwrapper_install libwrapname)
set_target_properties(${libwrapname} PROPERTIES PREFIX "")

if (WIN32)
set_target_properties(${libwrapname} PROPERTIES SUFFIX ".pyd")
endif()

if (APPLE)
set_target_properties(${libwrapname} PROPERTIES SUFFIX ".so")
endif()

install(TARGETS ${libwrapname} DESTINATION "${CMAKE_SOURCE_DIR}/src/openalea/lpy")
endfunction()
71 changes: 65 additions & 6 deletions conda/build.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,73 @@
#!/bin/bash

# Working Dir
if [[ -d build ]]; then
rm -rf build
fi
mkdir build
cd build

# Build
cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_PREFIX_PATH=${PREFIX} -DCMAKE_BUILD_TYPE=Release ..
make -j${CPU_COUNT}
if [ `uname` = "Darwin" ]; then
SYSTEM_DEPENDENT_ARGS=(
"-DCMAKE_OSX_SYSROOT=${CONDA_BUILD_SYSROOT}"
)
export LDFLAGS="-undefined dynamic_lookup ${LDFLAGS}"
else
SYSTEM_DEPENDENT_ARGS=(
"-DOPENGL_opengl_LIBRARY=${BUILD_PREFIX}/${HOST}/sysroot/usr/lib64/libGL.so"
"-DOPENGL_glx_LIBRARY=${BUILD_PREFIX}/${HOST}/sysroot/usr/lib64/libGL.so"
)
fi

export SYSTEM_DEPENDENT_ARGS

echo
echo "****** CMAKE"
which cmake
echo 'CONDA_BUILD_SYSROOT:' $CONDA_BUILD_SYSROOT
echo
echo "****** ENV"
env

echo
echo "****** CMAKE CONFIG"

cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} \
-DCMAKE_PREFIX_PATH=${PREFIX} \
-DCMAKE_BUILD_TYPE=Release \
${SYSTEM_DEPENDENT_ARGS[@]} \
-LAH ..

echo
echo "****** LPY CONFIG"
cat $SRC_DIR/src/openalea/lpy/__version__.py

echo
echo "****** COMPILE"
export VERBOSE=1
make -j${CPU_COUNT}
echo "****** INSTALL CXX LIB"
make install

# Install Python Files
echo
echo "****** INSTALL PYTHON LIB"
cd ..
$PYTHON setup.py install --prefix=${PREFIX}
echo "PYTHON:" ${PYTHON}

#echo "** PYTHON CALL"
#export PYTHONPATH=${PREFIX}/lib/python${PY_VER}/site-packages/
${PYTHON} setup.py install --prefix=${PREFIX}

echo
echo "****** CHECK PYTHON LIB"

# To check if Python lib is not in the dependencies with conda-forge distribution.
# See https://github.com/conda-forge/boost-feedstock/issues/81
if [ `uname` = "Darwin" ]; then
export LDD='otool -L'
else
export LDD='ldd'
fi

${LDD} `${PYTHON} -c "import openalea.lpy.__lpy_kernel__ as lpy ; print(lpy.__file__)"`

echo "****** END OF BUILD PROCESS"
Loading

0 comments on commit 17bbd5c

Please sign in to comment.