INCLUDE( module_recipe.cmake )
SET( CMAKE_VERBOSE_MAKEFILE OFF )
SET( SRCDIR "src" )
SET( CPPUNITDIR "cppunittests" )
SET( BUILDDIR "build" )
PROJECT( ${PCSIM_MODULE_NAME} )
SET( USER_PCSIM_SOURCE_DIR "${${PCSIM_MODULE_NAME}_SOURCE_DIR}" )
GET_FILENAME_COMPONENT( SRCDIR "${SRCDIR}" ABSOLUTE )
GET_FILENAME_COMPONENT( CPPUNITDIR "${CPPUNITDIR}" ABSOLUTE )
INCLUDE_DIRECTORIES( "." ${SRCDIR} ${CPPUNITDIR} ${BUILDDIR} )
INCLUDE( "${PCSIM_SOURCE_DIR}/config.cmake" )
SET( SIM_OBJ_HEADER )
FOREACH( cpp ${MODULE_SOURCES} )
STRING( REPLACE ".cpp" ".h" tmp ${cpp} )
SET( SIM_OBJ_HEADER ${SIM_OBJ_HEADER} ${tmp} )
ENDFOREACH( cpp )
#
# Figure out the module names of all modules that the module depends on
#
SET( DEP_MODULE_NAMES )
FOREACH( EXTENSION_HOME ${MODULE_DEPENDENCIES} )
FILE( ${EXTENSION_HOME}/build/module_name.txt read DEP_MODULE_NAME )
SET( DEP_MODULE_NAMES "${DEP_MODULE_NAMES} ${DEP_MODULE_NAME}" )
INCLUDE_DIRECTORIES( "${EXTENSION_HOME}/src"
"${EXTENSION_HOME}/cppunittests"
"${EXTENSION_HOME}/build" )
ENDFOREACH( EXTENSION_HOME )
#
# Write down the file containing the name of the module
#
FILE(WRITE build/module_name.txt "${PCSIM_MODULE_NAME}")
LINK_LIBRARIES( ${MODULE_DEPENDENCIES_LIBRARYPATH} )
#**************************************************************************************
# Generating C++ files for registering SimObjects
#**************************************************************************************
SET( SIM_OBJ_REG_CPP "${USER_PCSIM_SOURCE_DIR}/build/RegisterSimObjects.cpp" )
SET( SIM_OBJ_REG_INC_I "${USER_PCSIM_SOURCE_DIR}/build/register_fields_includes.h" )
SET( SIM_OBJ_REG_FIELD_I "${USER_PCSIM_SOURCE_DIR}/build/register_fields_calls.h" )
SET( SIM_OBJ_REGISTRATOR "${USER_PCSIM_SOURCE_DIR}/build/${PCSIM_MODULE_NAME}SimObjectRegistrator.h" )
SET( DOXYFILE "${PCSIM_SOURCE_DIR}/pcsim/doxyfile_for_registry_code" )
SET( GENSCRIPT "${PCSIM_SOURCE_DIR}/scripts/generate_simobject_registry_code.py" )
ADD_CUSTOM_COMMAND(
OUTPUT ${SIM_OBJ_REG_CPP} ${SIM_OBJ_REG_INC_I} ${SIM_OBJ_REG_FIELD_I} ${SIM_OBJ_REGISTRATOR}
COMMAND "${PYTHON_EXECUTABLE}" "${GENSCRIPT}"
"--module=${PCSIM_MODULE_NAME}"
"--doxyfile=${DOXYFILE}"
"--doxygen=${DOXYGEN_EXECUTABLE}"
"--input=src"
"--include=${PCSIM_SOURCE_DIR}/pcsim/simcore ${PCSIM_SOURCE_DIR}/pcsim/construction ${PCSIM_SOURCE_DIR}/pcsim/simutils ${PCSIM_SOURCE_DIR}/pcsim/simobjects"
"--pcsim_home=${PCSIM_SOURCE_DIR}"
--doxygenoutdir="${USER_PCSIM_SOURCE_DIR}/build"
--outdir="${USER_PCSIM_SOURCE_DIR}/build"
"--outfile=RegisterSimObjects.cpp"
DEPENDS ${SIM_OBJ_HEADER}
WORKING_DIRECTORY "${USER_PCSIM_SOURCE_DIR}"
)
INCLUDE_DIRECTORIES( "${PCSIM_SOURCE_DIR}/pcsim/simutils"
"${PCSIM_SOURCE_DIR}/pcsim/simcore"
"${PCSIM_SOURCE_DIR}/pcsim/construction"
"${PCSIM_SOURCE_DIR}/pcsim/simobjects"
"${PCSIM_SOURCE_DIR}/cppunittests" )
INCLUDE_DIRECTORIES( build )
#****************************************************************************************************
# generating Py++ wrapper code
#****************************************************************************************************
SET( MYPYPCSIM py${PCSIM_MODULE_NAME} )
FILE(GLOB SIMOBJECT_HEADERS "src/*.h" )
SET( PYPP_HEADER_FILE "${USER_PCSIM_SOURCE_DIR}/build/${MYPYPCSIM}.h" )
ADD_CUSTOM_COMMAND(
OUTPUT "${PYPP_HEADER_FILE}"
COMMAND ${PYTHON_EXECUTABLE} "${PCSIM_SOURCE_DIR}/scripts/merge_includes.py"
--out="${PYPP_HEADER_FILE}" ${SIMOBJECT_HEADERS}
DEPENDS ${SIMOBJECT_HEADERS}
WORKING_DIRECTORY ${USER_PCSIM_SOURCE_DIR}
)
SET( GEN_BP_WRAPPER_PY "${PCSIM_SOURCE_DIR}/scripts/generate_boost_python_wrapper_code.py" )
SET( MODPYPPMAIN "${USER_PCSIM_SOURCE_DIR}/build/${MYPYPCSIM}/${MYPYPCSIM}.main.cpp" )
SET( MODPYPPINCT "${USER_PCSIM_SOURCE_DIR}/build/${MYPYPCSIM}/${MYPYPCSIM}.indicator.cpp" )
ADD_CUSTOM_COMMAND(
OUTPUT ${MODPYPPMAIN} ${MODPYPPINCT}
COMMAND ${PYTHON_EXECUTABLE} ${GEN_BP_WRAPPER_PY}
--module=python_interface_specification
--name="${MYPYPCSIM}"
--temp="${MYPYPCSIM}_temp"
--outdir=build
--pcsim_home=${PCSIM_SOURCE_DIR}
-H"${PYPP_HEADER_FILE}"
-I"src"
-I"${PCSIM_SOURCE_DIR}/pcsim/simutils"
-I"${PCSIM_SOURCE_DIR}/pcsim/simcore"
-I"${PCSIM_SOURCE_DIR}/pcsim/construction"
-I"${PCSIM_SOURCE_DIR}/pcsim/simobjects"
-I"${BOOST_INCLUDE_PATH}"
-I"${MPI_INCLUDE_PATH}"
-I"${GSL_INCLUDE_PATH}"
-I"${PCSIM_SOURCE_DIR}/python"
DEPENDS "${PYPP_HEADER_FILE}"
WORKING_DIRECTORY ${USER_PCSIM_SOURCE_DIR}
)
ADD_LIBRARY( generate_wrapper_code "${MODPYPPINCT}" )
ADD_CUSTOM_TARGET( generate_code )
ADD_DEPENDENCIES( generate_code generate_wrapper_code )
# ****************************************************************************************************
# Building the C++ shared library
# ****************************************************************************************************
LINK_DIRECTORIES( "${PCSIM_SOURCE_DIR}/lib" )
ADD_LIBRARY( ${PCSIM_MODULE_NAME} SHARED
${MODULE_SOURCES}
${SIM_OBJ_REG_CPP} )
TARGET_LINK_LIBRARIES(
${PCSIM_MODULE_NAME}
${DEP_MODULE_NAMES}
pcsim
${XERCES_LIBS}
${MPI_LIBS}
${GSL_LIBS}
${BOOST_THREAD}
${BOOST_DATETIME}
${STLP_LIBS}
)
#**********************************************************************************************
# Building the Python extension module
#**********************************************************************************************
#
# make py<module>.so (p<module>.pyd)
#
FILE(GLOB BP_SOURCES "build/${MYPYPCSIM}/*pypp.cpp" )
ADD_LIBRARY( ${MYPYPCSIM} SHARED
${BP_SOURCES}
${MODPYPPMAIN}
${PCSIM_SOURCE_DIR}/python/pypcsim/warning_preventer.cpp )
ADD_DEPENDENCIES( ${MYPYPCSIM} ${PCSIM_MODULE_NAME} generate_code )
TARGET_LINK_LIBRARIES(
${MYPYPCSIM}
${PCSIM_MODULE_NAME}
pcsim
${XERCES_LIBS}
${MPI_LIBS}
${GSL_LIBS}
${BOOST_LIBS}
${STLP_LIBS}
)
# ****************************************************************************************************
# building CPPUNIT tests
# ****************************************************************************************************
FILE(GLOB TEST_SOURCES "cppunittests/*Test.cpp" )
REMOVE_DEFINITIONS( -Wall -Wnon-virtual-dtor )
ADD_EXECUTABLE( "${PCSIM_MODULE_NAME}_test"
"${PCSIM_SOURCE_DIR}/cppunittests/CppUnitMain.cpp"
${TEST_SOURCES}
"${PCSIM_SOURCE_DIR}/cppunittests/commonUtils.cpp" )
ADD_DEPENDENCIES( "${PCSIM_MODULE_NAME}_test" ${PCSIM_MODULE_NAME} )
TARGET_LINK_LIBRARIES( "${PCSIM_MODULE_NAME}_test"
${PCSIM_MODULE_NAME}
pcsim
${XERCES_LIBS}
${MPI_LIBS}
${GSL_LIBS}
${CPPUNIT_LIBS}
${BOOST_THREAD}
${BOOST_DATETIME}
${STLP_LIBS}
)
ENABLE_TESTING()
ADD_TEST( LOCAL_CppUnitTests "${EXECUTABLE_OUTPUT_PATH}/${PCSIM_MODULE_NAME}_test" AutoBuild )
IF( PLATFORM STREQUAL "windows-x86" )
SET_TARGET_PROPERTIES( ${MYPYPCSIM} PROPERTIES PREFIX "" SUFFIX ".pyd" )
ELSE( PLATFORM STREQUAL "windows-x86" )
SET_TARGET_PROPERTIES( ${MYPYPCSIM} PROPERTIES PREFIX "" )
ENDIF( PLATFORM STREQUAL "windows-x86" )
SUBDIRS( pyunit )