diff --git a/cython/CMakeLists.txt b/cython/CMakeLists.txt index 442f8c7..1f5aebe 100644 --- a/cython/CMakeLists.txt +++ b/cython/CMakeLists.txt @@ -1,179 +1,193 @@ # ======================= # # # # Python specmicp lib # # # # ======================= # # Build the cython interface # ========================== find_package(PythonLibs REQUIRED) include_directories(${PYTHON_INCLUDE_PATH}) +option(PYTHON_VERSION_3 "Version of python for cython compilation" ON) + # main variables # =============== # directories # ----------- set(PY_SPECMICP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/specmicp) set(PY_SPECMICP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/specmicp) set(PY_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/includes) # cython flags # ------------ -set(CYTHON_FLAGS -3 --cplus -Wextra -I ${PY_INCLUDES_DIR}) + +set(CYTHON_FLAGS --cplus) + +if(${PYTHON_VERSION_3}) + set(CYTHON_FLAGS ${CYTHON_FLAGS} -3) +else() + set(CYTHON_FLAGS ${CYTHON_FLAGS} -2) +endif() + +if (CMAKE_BUILD_TYPE MATCHES DEBUG) + set(CYTHON_FLAGS ${CYTHON_FLAGS} -Wextra) +endif() + # cython compilation macro # ------------------------ # USAGE : cython_compilation(dir base_name dependancies) macro(cython_compilation dir base_name) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${base_name}.cpp - COMMAND cython ${CYTHON_FLAGS} -I ${dir} -o ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${base_name}.cpp ${dir}/${base_name}.pyx + COMMAND cython ${CYTHON_FLAGS} -I ${dir} -I ${PY_INCLUDES_DIR} -o ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${base_name}.cpp ${dir}/${base_name}.pyx DEPENDS ${ARGN}) # ${ARGN} is the list of arguments passed after the last expected argument # i.e. ${ARGN} = dependancies endmacro(cython_compilation) # common includes # =============== add_custom_target(cython_includes SOURCES ${PY_INCLUDES_DIR}/memory.pxd ${PY_INCLUDES_DIR}/eigen.pxd ) # specmicp module # =============== file(COPY ${PY_SPECMICP_SOURCE_DIR}/__init__.py DESTINATION ${PY_SPECMICP_BINARY_DIR} ) # specmicp.database # ================= # Sources add_custom_target(cython_specmicp_database_files SOURCES ${PY_SPECMICP_SOURCE_DIR}/database.pxd ${PY_SPECMICP_SOURCE_DIR}/database.pyx ) set(cython_database_dependancies ${PY_SPECMICP_SOURCE_DIR}/database.pxd ${PY_SPECMICP_SOURCE_DIR}/database.pyx ${PY_INCLUDES_DIR}/memory.pxd ${PY_INCLUDES_DIR}/eigen.pxd ) # Cython compilation cython_compilation(${PY_SPECMICP_SOURCE_DIR} database ${cython_database_dependancies}) # build the specmicp.database library add_library(database SHARED ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/database.cpp ${DATABASE_LIBFILE}) set_target_properties(database PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY "${PY_SPECMICP_BINARY_DIR}" ) #target_link_libraries(database specmicp_database) # specmicp.equilibrium_state # ========================== # Sources add_custom_target(cython_specmicp_equilibrium_state_files SOURCES ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pxd ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pyx ) set(cython_equilibrium_state_dependancies ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pxd ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pyx ${PY_INCLUDES_DIR}/eigen.pxd ) # Cython compilation cython_compilation(${PY_SPECMICP_SOURCE_DIR} equilibrium_state ${cython_equilibrium_state_dependancies}) add_library(equilibrium_state SHARED ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/equilibrium_state.cpp ${SPECMICP_LIBFILE} ${DATABASE_LIBFILE}) set_target_properties(equilibrium_state PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY "${PY_SPECMICP_BINARY_DIR}" ) target_link_libraries(equilibrium_state jsoncpp) # specmic.reaction_path # ===================== # Sources add_custom_target(cython_specmicp_reaction_path_files SOURCES ${PY_SPECMICP_SOURCE_DIR}/solver_options.pxd ${PY_SPECMICP_SOURCE_DIR}/reaction_path.pxd ${PY_SPECMICP_SOURCE_DIR}/reaction_path.pyx ) set(cython_reaction_path_dependancies ${PY_SPECMICP_SOURCE_DIR}/solver_options.pxd ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pxd ${PY_SPECMICP_SOURCE_DIR}/equilibrium_state.pyx ${PY_SPECMICP_SOURCE_DIR}/reaction_path.pxd ${PY_SPECMICP_SOURCE_DIR}/reaction_path.pyx ${PY_INCLUDES_DIR}/eigen.pxd ) # Cython compilation cython_compilation(${PY_SPECMICP_SOURCE_DIR} reaction_path ${cython_reaction_path_dependancies}) # build the specmicp.reaction_path library add_library(reaction_path SHARED ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/reaction_path.cpp ${SPECMICP_LIBFILE} ${DATABASE_LIBFILE}) set_target_properties(reaction_path PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY "${PY_SPECMICP_BINARY_DIR}" ) target_link_libraries(reaction_path jsoncpp) # ========== # # # # TEST # # # # ========== # # Prelude # ======= # directories # ----------- set(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tests/cython) set(BINARY_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests) # variables to configure the scripts # ---------------------------------- set(python_module_path ${CMAKE_CURRENT_BINARY_DIR}) set(database_path ${CMAKE_CURRENT_BINARY_DIR}/../data/cemdata_specmicp.js) # macro to configure the scripts # ------------------------------- macro(configure_python_test test_name) configure_file(${TEST_DIR}/${test_name} ${BINARY_TEST_DIR}${CMAKE_FILES_DIRECTORY}/${test_name} @ONLY) file(COPY ${BINARY_TEST_DIR}${CMAKE_FILES_DIRECTORY}/${test_name} DESTINATION ${BINARY_TEST_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endmacro(configure_python_test) # Scripts # ======= # database unittest configure_python_test(database.py) # thermocarbo configure_python_test(thermocarbo.py)