cmake_minimum_required (VERSION 2.8) project (ApplicationCode) # NB: The generated file is written to Cmake binary folder to avoid source tree pollution # This folder is added to include_directories CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/ApplicationCode/Adm/RIVersionInfo.h.cmake ${CMAKE_BINARY_DIR}/Generated/RIVersionInfo.h ) if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set ( ERT_ROOT "Ert" ) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows") set ( ERT_ROOT "Ert-windows" ) endif() include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Adm ${CMAKE_CURRENT_SOURCE_DIR}/Application ${CMAKE_CURRENT_SOURCE_DIR}/FileInterface ${CMAKE_CURRENT_SOURCE_DIR}/SocketInterface ${CMAKE_CURRENT_SOURCE_DIR}/ModelVisualization ${CMAKE_CURRENT_SOURCE_DIR}/UserInterface ${CMAKE_CURRENT_SOURCE_DIR}/ProjectDataModel ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/${ERT_ROOT}/ecl/include ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/${ERT_ROOT}/util/include ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/${ERT_ROOT}/geometry/include ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/${ERT_ROOT}/well/include ${CMAKE_BINARY_DIR}/Generated ) # Use all cpp and h files in the subdirectories file( GLOB_RECURSE HEADER_FILES *.h ) list( APPEND CPP_SOURCES RIMain.cpp RIStdInclude.cpp ) list( APPEND CPP_SOURCES Application/RIApplication.cpp Application/RIPreferences.cpp ) list( APPEND CPP_SOURCES ModelVisualization/RivCellEdgeEffectGenerator.cpp ModelVisualization/RivGridPartMgr.cpp ModelVisualization/RivReservoirPartMgr.cpp ModelVisualization/RivReservoirViewPartMgr.cpp ModelVisualization/RivPipeGeometryGenerator.cpp ModelVisualization/RivReservoirPipesPartMgr.cpp ModelVisualization/RivWellPipesPartMgr.cpp ModelVisualization/RivWellHeadPartMgr.cpp ) list( APPEND CPP_SOURCES FileInterface/RifEclipseInputFileTools.cpp FileInterface/RifEclipseOutputFileTools.cpp FileInterface/RifEclipseRestartFilesetAccess.cpp FileInterface/RifEclipseRestartDataAccess.cpp FileInterface/RifEclipseUnifiedRestartFileAccess.cpp FileInterface/RifReaderEclipseInput.cpp FileInterface/RifReaderEclipseOutput.cpp FileInterface/RifReaderMockModel.cpp ) list( APPEND CPP_SOURCES SocketInterface/RiaSocketServer.cpp ) list( APPEND CPP_SOURCES ProjectDataModel/RimCellFilter.cpp ProjectDataModel/RimCellPropertyFilter.cpp ProjectDataModel/RimCellPropertyFilterCollection.cpp ProjectDataModel/RimCellRangeFilter.cpp ProjectDataModel/RimCellRangeFilterCollection.cpp ProjectDataModel/RimDefines.cpp ProjectDataModel/RimLegendConfig.cpp ProjectDataModel/RimProject.cpp ProjectDataModel/RimReservoir.cpp ProjectDataModel/RimInputProperty.cpp ProjectDataModel/RimInputPropertyCollection.cpp ProjectDataModel/RimInputReservoir.cpp ProjectDataModel/RimResultReservoir.cpp ProjectDataModel/RimReservoirView.cpp ProjectDataModel/RimResultDefinition.cpp ProjectDataModel/RimResultSlot.cpp ProjectDataModel/RimCellEdgeResultSlot.cpp ProjectDataModel/RimWell.cpp ProjectDataModel/RimWellCollection.cpp ProjectDataModel/RimScriptCollection.cpp ProjectDataModel/RimCalcScript.cpp ProjectDataModel/RimExportInputPropertySettings.cpp ProjectDataModel/RimBinaryExportSettings.cpp ProjectDataModel/RimUiTreeModelPdm.cpp ProjectDataModel/RimUiTreeView.cpp ) list( APPEND CPP_SOURCES ReservoirDataModel/RigCell.cpp ReservoirDataModel/RigGridBase.cpp ReservoirDataModel/RigReservoirCellResults.cpp ReservoirDataModel/RigLocalGrid.cpp ReservoirDataModel/RigMainGrid.cpp ReservoirDataModel/RigReservoir.cpp ReservoirDataModel/RigReservoirBuilderMock.cpp ReservoirDataModel/RigWellResults.cpp ) list( APPEND CPP_SOURCES UserInterface/RICursors.cpp UserInterface/RIMainWindow.cpp UserInterface/RIPreferencesDialog.cpp UserInterface/RIResultInfoPanel.cpp UserInterface/RIViewer.cpp UserInterface/RIProcessMonitor.cpp ) # Define files for MOC-ing set ( QT_MOC_HEADERS Application/RIApplication.h ProjectDataModel/RimUiTreeModelPdm.h ProjectDataModel/RimUiTreeView.h UserInterface/RIMainWindow.h UserInterface/RIPreferencesDialog.h UserInterface/RIResultInfoPanel.h UserInterface/RIViewer.h UserInterface/RIProcessMonitor.h SocketInterface/RiaSocketServer.h ) qt4_wrap_cpp( MOC_FILES_CPP ${QT_MOC_HEADERS} ) # NOTE! Resources in subfolders must append to QRC_FILES using the following statement # set( QRC_FILES # ${QRC_FILES} # ${CMAKE_CURRENT_SOURCE_DIR}/Resources/myLibrary.qrc # PARENT_SCOPE # ) set( QRC_FILES ${QRC_FILES} Resources/ResInsight.qrc ) # Runs RCC on specified files qt4_add_resources( QRC_FILES_CPP ${QRC_FILES} ) ############################################################################# # creating PCH's for MSVC and GCC on Linux ############################################################################# set( RAW_SOURCES ${CPP_SOURCES} ) list( REMOVE_ITEM RAW_SOURCES RIStdInclude.cpp) list( REMOVE_ITEM RAW_SOURCES ReservoirDataModel/RigReaderInterfaceECL.cpp) list( REMOVE_ITEM RAW_SOURCES ModelVisualization/RivCellEdgeEffectGenerator.cpp) list( REMOVE_ITEM RAW_SOURCES ModelVisualization/RivPipeGeometryGenerator.cpp) list( REMOVE_ITEM RAW_SOURCES ModelVisualization/RivWellPipesPartMgr.cpp) list( REMOVE_ITEM RAW_SOURCES ModelVisualization/RivWellHeadPartMgr.cpp) list( REMOVE_ITEM RAW_SOURCES FileInterface/RifEclipseInputFileTools.cpp FileInterface/RifEclipseOutputFileTools.cpp FileInterface/RifEclipseRestartFilesetAccess.cpp FileInterface/RifEclipseRestartDataAccess.cpp FileInterface/RifEclipseUnifiedRestartFileAccess.cpp FileInterface/RifReaderEclipseInput.cpp FileInterface/RifReaderEclipseOutput.cpp ) include( CustomPCH.cmake ) set( ALL_INCLUDES ${LibCore_SOURCE_DIR} ${LibGeometry_SOURCE_DIR} ${LibGuiQt_SOURCE_DIR} ${LibRender_SOURCE_DIR} ${LibViewing_SOURCE_DIR} ${QT_INCLUDES} ) set( PCH_NAME RIStdInclude ) set( GCC_PCH_TARGET gccPCH ) set( PCH_COMPILER_DEFINE EMPTY ) IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set( PCH_COMPILER_DEFINE CVF_LINUX) ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") precompiled_header( RAW_SOURCES ALL_INCLUDES ${GCC_PCH_TARGET} ${PCH_NAME} ${PCH_COMPILER_DEFINE} ) ################################################################################ add_executable(ResInsight ${CPP_SOURCES} ${MOC_FILES_CPP} ${QRC_FILES_CPP} ${HEADER_FILES} ) set( LINK_LIBRARIES cafPdmCvf cafUserInterface cafProjectDataModel cafViewer cafAnimControl CommonCode LibGuiQt LibViewing LibRender LibGeometry LibCore ${OPENGL_LIBRARIES} ${QT_LIBRARIES} ) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set ( EXTERNAL_LINK_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert/ecl/lib/libecl.a ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert/util/lib/libutil.a ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert/geometry/lib/libgeometry.a ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert/well/lib/libwell.a lapack z # In case libz is not included in libQtCore ) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") set ( EXTERNAL_LINK_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert-windows/ecl/lib/libecl.lib ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert-windows/util/lib/libutil.lib ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert-windows/geometry/lib/libgeometry.lib ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert-windows/well/lib/libwell.lib ) endif() target_link_libraries( ResInsight ${LINK_LIBRARIES} ${EXTERNAL_LINK_LIBRARIES}) # Copy Dlls if (MSVC) # Qt DLLs set (QTLIBLIST QtCore QtCored QtGui QtGuid QtOpenGl QtOpenGld QtNetwork QtNetworkd) foreach (qtlib ${QTLIBLIST}) add_custom_command(TARGET ResInsight POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_BINARY_DIR}/${qtlib}4.dll" ${CMAKE_CURRENT_BINARY_DIR}/$) endforeach( qtlib ) # DLLs ERT depends on add_custom_command(TARGET ResInsight POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/../ThirdParty/Ert-windows/bin/" ${CMAKE_CURRENT_BINARY_DIR}/$) # ERT DLLs set (ERT_MODULES ecl geometry util well) foreach (ert_module ${ERT_MODULES}) add_custom_command(TARGET ResInsight POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/Ert-windows/${ert_module}/lib/lib${ert_module}.dll" ${CMAKE_CURRENT_BINARY_DIR}/$) endforeach() endif(MSVC) ############################################################################# # Install ############################################################################# if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set_target_properties(ResInsight PROPERTIES INSTALL_RPATH "${RESINSIGHT_FINAL_INSTALL_PATH};.") # Find Qt libraries and sym links file (GLOB RESINSIGHT_FILES ${QT_LIBRARY_DIR}/libQtCore.so* ${QT_LIBRARY_DIR}/libQtGui.so* ${QT_LIBRARY_DIR}/libQtOpenGL.so* ${QT_LIBRARY_DIR}/libQtNetwork.so* ) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") set (RESINSIGHT_FILES ${QT_LIBRARY_DIR}/QtCore4.dll ${QT_LIBRARY_DIR}/QtGui4.dll ${QT_LIBRARY_DIR}/QtOpenGL4.dll ${QT_LIBRARY_DIR}/QtNetwork4.dll ) endif() set (RESINSIGHT_FILES ${RESINSIGHT_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/Adm/LicenseInformation.txt ${CMAKE_CURRENT_SOURCE_DIR}/Adm/gplLicense.txt ) install(TARGETS ResInsight DESTINATION ${RESINSIGHT_FINAL_NAME}) install(FILES ${RESINSIGHT_FILES} DESTINATION ${RESINSIGHT_FINAL_NAME} ) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resinsight DESTINATION ${RESINSIGHT_FINAL_NAME} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) IF(${CMAKE_SYSTEM_NAME} MATCHES "No_Linux") install(CODE " set (INSTALLFILE_LIST ${CMAKE_CURRENT_BINARY_DIR}/ResInsight ${CMAKE_CURRENT_SOURCE_DIR}/Adm/LicenseInformation.txt ${CMAKE_CURRENT_SOURCE_DIR}/Adm/gplLicense.txt ${QT_LIBRARY_DIR}/libQtCore.so.4 ${QT_LIBRARY_DIR}/libQtGui.so.4 ${QT_LIBRARY_DIR}/libQtOpenGL.so.4 /usr/lib64/libgfortran.so.1 /usr/lib64/liblapack.so.3 /usr/lib64/libblas.so.3 ) execute_process(COMMAND rm -r ${CMAKE_BINARY_DIR}/Install/ResInsight ) execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/Install/ResInsight ) foreach (installFile \${INSTALLFILE_LIST}) execute_process(COMMAND cp -v \${installFile} ${CMAKE_BINARY_DIR}/Install/ResInsight) endforeach (installFile) execute_process(COMMAND bash -c \"cd ${CMAKE_BINARY_DIR}/Install/ ; tar cvzf ResInsight_${STRPRODUCTVER}-bin.tar.gz ResInsight/*\" ) ") endif()