diff --git a/.appveyor.yml b/.appveyor.yml index 3c56f8397e7aa243b2028fad7f4f3affe93104ac..cd807f551c3958af231079d6d2610992709c77d0 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -17,7 +17,7 @@ configuration: - Release cache: - - C:\projects\deps\conan + - C:\projects\deps\conan -> scripts/cmake/ConanSetup.cmake install: # All external dependencies are installed in C:\projects\deps @@ -25,8 +25,9 @@ install: # Install conan - if not exist "C:\projects\deps\conan\" mkdir C:\projects\deps\conan - - set PATH=%PATH%;%PYTHON%/Scripts/ - - C:\Python27-x64\Scripts\pip.exe install conan + - set PATH=%PYTHON%/Scripts/;%PATH% + - pip.exe install conan --upgrade + - conan remote add -i 0 ogs https://ogs.jfrog.io/ogs/api/conan/conan # Install Ninja - set NINJA_URL="https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip" @@ -43,10 +44,10 @@ before_build: build_script: - mkdir build & cd build - - conan install .. # -o gui=True - - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=%configuration% -DBUILD_SHARED_LIBS=OFF -DOGS_EIGEN_DYNAMIC_SHAPE_MATRICES=ON -DOGS_USE_PCH=OFF # -DOGS_BUILD_GUI=ON + - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=%configuration% -DBUILD_SHARED_LIBS=OFF -DOGS_EIGEN_DYNAMIC_SHAPE_MATRICES=ON -DOGS_USE_PCH=OFF -DOGS_USE_CONAN=ON # -DOGS_BUILD_GUI=ON - cmake --build . --config %configuration% - -test_script: - cmake --build . --config %configuration% --target tests - cmake --build . --config %configuration% --target ctest + # - cmake . -DOGS_BUILD_GUI=ON + # - cmake --build . --config %configuration% --target DataExplorer + diff --git a/.travis.yml b/.travis.yml index 99a0b555ee502e48c78084de00cbc62e219fdf6a..89e87d4ce52e900113712f8a293229f56c2b24c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,12 +20,14 @@ cache: - $HOME/cmake-3.1.1-Linux-x86_64 - $HOME/VTK-Install-7.1 - $HOME/boost_1_56_0 + - $HOME/eigen-eigen-dc6cfdf9bcec - $HOME/.conan env: global: - VTK_DIR=$HOME/VTK-Install-7.1/lib/cmake/vtk-7.1 - BOOST_ROOT=$HOME/boost_1_56_0 + - EIGEN3_ROOT=$HOME/eigen-eigen-dc6cfdf9bcec - CCACHE_SLOPPINESS=pch_defines,time_macros matrix: include: @@ -46,6 +48,7 @@ before_install: - if [ "$CASE" != "CHECK" ]; then bash scripts/travis/cmake.sh; fi - if [ "$CASE" != "CONAN" ] && [ "$CASE" != "CHECK" ]; then bash scripts/travis/boost.sh; fi - if [ "$CASE" != "CONAN" ] && [ "$CASE" != "CHECK" ]; then bash scripts/travis/vtk.sh; fi + - if [ "$CASE" != "CONAN" ] && [ "$CASE" != "CHECK" ]; then bash scripts/travis/eigen.sh; fi - if [ "$CASE" == "CONAN" ] && [ "$CASE" != "CHECK" ]; then bash scripts/travis/conan.sh; fi before_script: diff --git a/Applications/CLI/CMakeLists.txt b/Applications/CLI/CMakeLists.txt index bb2be2714538f099cdf9d337ff910a2a81094696..97cbdd8f4e843da5bf7a37427162537891167cee 100644 --- a/Applications/CLI/CMakeLists.txt +++ b/Applications/CLI/CMakeLists.txt @@ -5,8 +5,6 @@ target_link_libraries(ogs PRIVATE BaseLib ApplicationsLib NumLib ProcessLib ) -ADD_VTK_DEPENDENCY(ogs) - if(OGS_USE_PETSC) target_link_libraries(ogs PRIVATE ${PETSC_LIBRARIES}) endif() diff --git a/Applications/DataExplorer/DataExplorer.cmake b/Applications/DataExplorer/DataExplorer.cmake index 75916b3f9d6e53163eee3de33d40c4f5ed0b891d..154a3bc936b06be67c63c3517caef6a940b4c10b 100644 --- a/Applications/DataExplorer/DataExplorer.cmake +++ b/Applications/DataExplorer/DataExplorer.cmake @@ -97,8 +97,6 @@ if(VTKFBXCONVERTER_FOUND) target_link_libraries(DataExplorer ${VTKFBXCONVERTER_LIBRARIES}) endif() -ADD_VTK_DEPENDENCY(DataExplorer) - set_property(TARGET DataExplorer PROPERTY FOLDER "DataExplorer") if(OGS_USE_PCH) diff --git a/Applications/DataExplorer/DataView/CMakeLists.txt b/Applications/DataExplorer/DataView/CMakeLists.txt index 9ec327f0e54a990ebe2a043e8f1e2e3c6f256751..969680d8c4c99598622d48bc7c2ca13e094e2578 100644 --- a/Applications/DataExplorer/DataView/CMakeLists.txt +++ b/Applications/DataExplorer/DataView/CMakeLists.txt @@ -139,8 +139,6 @@ target_link_libraries(QtDataView DataHolderLib logog Qt5::Core Qt5::Gui ) -ADD_VTK_DEPENDENCY(QtDataView) - if(GEOTIFF_FOUND) target_link_libraries(QtDataView PRIVATE ${GEOTIFF_LIBRARIES}) endif () # GEOTIFF_FOUND diff --git a/Applications/DataExplorer/VtkVis/CMakeLists.txt b/Applications/DataExplorer/VtkVis/CMakeLists.txt index b5d1f087d61e6e44154fb53e23e27f15231195ae..2122a15d02bbc68d3395c9a74afa7889437b4c32 100644 --- a/Applications/DataExplorer/VtkVis/CMakeLists.txt +++ b/Applications/DataExplorer/VtkVis/CMakeLists.txt @@ -128,8 +128,6 @@ add_library(VtkVis ${UIS} ) -ADD_VTK_DEPENDENCY(VtkVis) - if(GEOTIFF_FOUND) include_directories(${GEOTIFF_INCLUDE_DIRS}) target_link_libraries(VtkVis INTERFACE ${GEOTIFF_LIBRARIES}) diff --git a/Applications/FileIO/CMakeLists.txt b/Applications/FileIO/CMakeLists.txt index 00b7fadad86ba5a7327503dc416e1891d61a30b3..f9cad965c0cc56fcd41ea51856157b1110b9388a 100644 --- a/Applications/FileIO/CMakeLists.txt +++ b/Applications/FileIO/CMakeLists.txt @@ -33,8 +33,6 @@ if(OGS_BUILD_SWMM) target_link_libraries(ApplicationsFileIO PRIVATE SwmmInterface) endif() -ADD_VTK_DEPENDENCY(ApplicationsFileIO) - if(TARGET Eigen) add_dependencies(ApplicationsFileIO Eigen) endif() diff --git a/Applications/Utils/FileConverter/CMakeLists.txt b/Applications/Utils/FileConverter/CMakeLists.txt index f466c7239a3e9c0a971084700ef8ef2cc2029ce6..52cb36768e583900ad2657dc2776bb8ffa945727 100644 --- a/Applications/Utils/FileConverter/CMakeLists.txt +++ b/Applications/Utils/FileConverter/CMakeLists.txt @@ -8,7 +8,6 @@ if (Qt5XmlPatterns_FOUND) add_executable(FEFLOW2OGS FEFLOW2OGS.cpp) set_target_properties(FEFLOW2OGS PROPERTIES FOLDER Utilities) target_link_libraries(FEFLOW2OGS ApplicationsFileIO) - ADD_VTK_DEPENDENCY(FEFLOW2OGS) endif () add_executable(convertGEO convertGEO.cpp) @@ -17,34 +16,28 @@ target_link_libraries(convertGEO GeoLib ApplicationsFileIO) add_executable(generateMatPropsFromMatID generateMatPropsFromMatID.cpp ) target_link_libraries(generateMatPropsFromMatID MeshLib) -ADD_VTK_DEPENDENCY(generateMatPropsFromMatID) set_target_properties(generateMatPropsFromMatID PROPERTIES FOLDER Utilities) add_executable(GMSH2OGS GMSH2OGS.cpp) set_target_properties(GMSH2OGS PROPERTIES FOLDER Utilities) target_link_libraries(GMSH2OGS ApplicationsFileIO) -ADD_VTK_DEPENDENCY(GMSH2OGS) add_executable(OGS2VTK OGS2VTK.cpp) set_target_properties(OGS2VTK PROPERTIES FOLDER Utilities) target_link_libraries(OGS2VTK MeshLib) -ADD_VTK_DEPENDENCY(OGS2VTK) add_executable(VTK2OGS VTK2OGS.cpp) set_target_properties(VTK2OGS PROPERTIES FOLDER Utilities) target_link_libraries(VTK2OGS MeshLib) -ADD_VTK_DEPENDENCY(VTK2OGS) add_executable(VTK2TIN VTK2TIN.cpp) set_target_properties(VTK2TIN PROPERTIES FOLDER Utilities) target_link_libraries(VTK2TIN MeshLib) -ADD_VTK_DEPENDENCY(VTK2TIN) add_executable(TIN2VTK TIN2VTK.cpp) set_target_properties(TIN2VTK PROPERTIES FOLDER Utilities) target_link_libraries(TIN2VTK MeshLib) -ADD_VTK_DEPENDENCY(TIN2VTK) #################### ### Installation ### diff --git a/Applications/Utils/MeshEdit/CMakeLists.txt b/Applications/Utils/MeshEdit/CMakeLists.txt index ebda53b715190e720bfa74a91cbfae54b9553463..815743ceae33683cebddd1a7944842f11581b2bb 100644 --- a/Applications/Utils/MeshEdit/CMakeLists.txt +++ b/Applications/Utils/MeshEdit/CMakeLists.txt @@ -1,28 +1,23 @@ add_executable(moveMeshNodes moveMeshNodes.cpp) target_link_libraries(moveMeshNodes MeshLib) -ADD_VTK_DEPENDENCY(moveMeshNodes) set_target_properties(moveMeshNodes PROPERTIES FOLDER Utilities) add_executable(MapGeometryToMeshSurface MapGeometryToMeshSurface.cpp ) target_link_libraries(MapGeometryToMeshSurface MeshGeoToolsLib MeshLib) -ADD_VTK_DEPENDENCY(MapGeometryToMeshSurface) set_target_properties(MapGeometryToMeshSurface PROPERTIES FOLDER Utilities) add_executable(removeMeshElements removeMeshElements.cpp) target_link_libraries(removeMeshElements MeshLib) -ADD_VTK_DEPENDENCY(removeMeshElements) set_target_properties(removeMeshElements PROPERTIES FOLDER Utilities) add_executable(NodeReordering NodeReordering.cpp) target_link_libraries(NodeReordering MeshLib) -ADD_VTK_DEPENDENCY(NodeReordering) set_target_properties(NodeReordering PROPERTIES FOLDER Utilities) add_executable(MoveMesh MoveMesh.cpp) target_link_libraries(MoveMesh MeshLib) -ADD_VTK_DEPENDENCY(MoveMesh) set_target_properties(MoveMesh PROPERTIES FOLDER Utilities) add_executable(appendLinesAlongPolyline appendLinesAlongPolyline.cpp) @@ -31,22 +26,18 @@ target_link_libraries(appendLinesAlongPolyline MeshLib ApplicationsFileIO ) -ADD_VTK_DEPENDENCY(appendLinesAlongPolyline) set_target_properties(appendLinesAlongPolyline PROPERTIES FOLDER Utilities) add_executable(editMaterialID editMaterialID.cpp) target_link_libraries(editMaterialID MeshLib) -ADD_VTK_DEPENDENCY(editMaterialID) set_target_properties(editMaterialID PROPERTIES FOLDER Utilities) add_executable(checkMesh checkMesh.cpp) target_link_libraries(checkMesh MeshLib) -ADD_VTK_DEPENDENCY(checkMesh) set_target_properties(checkMesh PROPERTIES FOLDER Utilities) add_executable(reviseMesh reviseMesh.cpp) target_link_libraries (reviseMesh MeshLib) -ADD_VTK_DEPENDENCY(reviseMesh) set_target_properties(reviseMesh PROPERTIES FOLDER Utilities) add_executable(ResetPropertiesInPolygonalRegion @@ -76,7 +67,6 @@ target_link_libraries(CreateBoundaryConditionsAlongPolylines MeshLib ApplicationsFileIO ) -ADD_VTK_DEPENDENCY(CreateBoundaryConditionsAlongPolylines) set_target_properties(CreateBoundaryConditionsAlongPolylines PROPERTIES FOLDER Utilities) diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/CMakeLists.txt b/Applications/Utils/ModelPreparation/PartitionMesh/CMakeLists.txt index 9ea8124236c585530c956a470d9759378623efc9..b331c0db9310b76826aa4d367fc56874c190a6c5 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/CMakeLists.txt +++ b/Applications/Utils/ModelPreparation/PartitionMesh/CMakeLists.txt @@ -1,7 +1,6 @@ add_executable(partmesh PartitionMesh.cpp NodeWiseMeshPartitioner.h NodeWiseMeshPartitioner.cpp) set_target_properties(partmesh PROPERTIES FOLDER Utilities) target_link_libraries(partmesh MeshLib) -ADD_VTK_DEPENDENCY(partmesh) #################### ### Installation ### diff --git a/Applications/Utils/OGSFileConverter/CMakeLists.txt b/Applications/Utils/OGSFileConverter/CMakeLists.txt index 3cf643d8d9e9f9a81ba1dcb3e8e3d59217913345..13c0c664e62cf035a662366a287c7f46e62d84a7 100644 --- a/Applications/Utils/OGSFileConverter/CMakeLists.txt +++ b/Applications/Utils/OGSFileConverter/CMakeLists.txt @@ -23,7 +23,6 @@ target_link_libraries(OGSFileConverterLib PUBLIC QtBase MathLib INTERFACE MeshLib ApplicationsFileIO ) -ADD_VTK_DEPENDENCY(OGSFileConverterLib) add_executable(OGSFileConverter main.cpp) @@ -31,7 +30,6 @@ target_link_libraries(OGSFileConverter OGSFileConverterLib ApplicationsFileIO ) -ADD_VTK_DEPENDENCY(OGSFileConverter) set_property(TARGET OGSFileConverter PROPERTY FOLDER "Utilities") diff --git a/Applications/Utils/PostProcessing/CMakeLists.txt b/Applications/Utils/PostProcessing/CMakeLists.txt index 14d07062440e3ae46756e867026cf02ea55af32d..f93930ff17929979648c268678cc767c1a807518 100644 --- a/Applications/Utils/PostProcessing/CMakeLists.txt +++ b/Applications/Utils/PostProcessing/CMakeLists.txt @@ -1,7 +1,6 @@ add_executable(postLIE postLIE.cpp) target_link_libraries(postLIE MeshLib ProcessLib) -ADD_VTK_DEPENDENCY(postLIE) set_target_properties(postLIE PROPERTIES FOLDER Utilities) #################### diff --git a/Applications/Utils/SWMMConverter/CMakeLists.txt b/Applications/Utils/SWMMConverter/CMakeLists.txt index 3e95aef7be8ba8327dc4af201be6798dc3efc027..2e2fbb3b303f9eace1d72c866159213ce370b761 100644 --- a/Applications/Utils/SWMMConverter/CMakeLists.txt +++ b/Applications/Utils/SWMMConverter/CMakeLists.txt @@ -11,8 +11,6 @@ target_link_libraries(SWMMConverter include_directories( ${PROJECT_SOURCE_DIR}/Applications/FileIO ) -ADD_VTK_DEPENDENCY(SWMMConverter) - set_target_properties(SWMMConverter PROPERTIES FOLDER Utilities) install(TARGETS SWMMConverter RUNTIME DESTINATION bin COMPONENT Utilities) diff --git a/Applications/Utils/SimpleMeshCreation/CMakeLists.txt b/Applications/Utils/SimpleMeshCreation/CMakeLists.txt index 9792f3b516b117488eb44b79916829e4feb7f155..52b4d62a64941b04e310218565ce92115dd00621 100644 --- a/Applications/Utils/SimpleMeshCreation/CMakeLists.txt +++ b/Applications/Utils/SimpleMeshCreation/CMakeLists.txt @@ -6,7 +6,6 @@ if(OGS_BUILD_GUI) ApplicationsFileIO MeshLib ) - ADD_VTK_DEPENDENCY(createMeshElemPropertiesFromASCRaster) endif() # OGS_BUILD_GUI (VtkVis-target is existing) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fda3147084be7a2e4ca441c2c8536fc19a8a819..77f1e81912a5106d71cfada9e80aabf7b7172731 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,18 +23,22 @@ list(APPEND CMAKE_PREFIX_PATH option(BUILD_SHARED_LIBS "Create shared libraries?" OFF) set(CMAKE_LIBRARY_SEARCH_PATH "" CACHE PATH "Additional library installation path, e.g. /opt/local or C:/libs") -set(OGS_CPU_ARCHITECTURE "native" CACHE STRING "Processor architecture, defaults to native (*nix) / blend (MSVC).") +set(OGS_CPU_ARCHITECTURE "native" CACHE STRING "Processor architecture, \ + defaults to native (*nix) / blend (MSVC).") option(OGS_ENABLE_AVX2 "Enable the use of AVX2 instructions" OFF) option(OGS_BUILD_TESTS "Should the test executables be built?" ON) option(OGS_USE_PCH "Should pre-compiled headers be used?" ON) +option(OGS_USE_CONAN "Should Conan package manager be used?" OFF) +set(OGS_CONAN_BUILD "missing" CACHE STRING "Possible values: all, missing, \ + never or list of libs to build" ) ### CMake includes ### include(scripts/cmake/PreFind.cmake) -include(scripts/cmake/ConanSetup.cmake) include(scripts/cmake/CheckTypeSizes.cmake) include(scripts/cmake/Functions.cmake) include(scripts/cmake/SubmoduleSetup.cmake) include(scripts/cmake/CMakeSetup.cmake) +include(scripts/cmake/ConanSetup.cmake) include(scripts/cmake/CompilerSetup.cmake) include(scripts/cmake/Find.cmake) include(scripts/cmake/CCacheSetup.cmake) @@ -153,16 +157,12 @@ option(OGS_SYNC_SUBMODULES "Sync git submodules on CMake run. Overwrites custom option(OGS_DOWNLOAD_ADDITIONAL_CONTENT "Should addional content such as manuals be downloaded and packaged?" OFF) include(scripts/cmake/packaging/Pack.cmake) -# Third-party libraries -# Default checks for system first, then builds locally -set(OGS_LIB_VTK "Default" CACHE STRING "Which VTK library should be used?") -set(OGS_LIB_BOOST "Default" CACHE STRING "Which Boost library should be used?") -set(OGS_LIB_EIGEN "Default" CACHE STRING "Which Eigen library should be used?") -set_property(CACHE - OGS_LIB_VTK - OGS_LIB_BOOST - OGS_LIB_EIGEN - PROPERTY STRINGS "Default" "System" "Local") +# Third-party libraries, names come from Conan package names +set(OGS_LIBS VTK Boost Eigen3 Qt Shapelib libgeotiff CACHE INTERNAL "") +foreach(LIB ${OGS_LIBS}) + set(OGS_LIB_${LIB} "Default" CACHE STRING "Which ${LIB} library should be used?") + set_property(CACHE OGS_LIB_${LIB} PROPERTY STRINGS "Default" "System") +endforeach(LIB) # Options controlling which FEM elements will be compiled set(OGS_MAX_ELEMENT_DIM 3 CACHE STRING "Maximum dimension of FEM elements to be built.") @@ -246,19 +246,11 @@ add_definitions(-DLOGOG_LEVEL=${OGS_LOG_LEVEL}) ###################### # External projects -include(scripts/cmake/ExternalProjectBoost.cmake) -include(VtkModules) if(OGS_INSITU) - include(ExternalProjectCatalyst) include("${PARAVIEW_USE_FILE}") add_definitions(-DUSE_INSITU) -else() - include(ExternalProjectVtk) endif() -include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ) -include(scripts/cmake/ExternalProjectEigen.cmake) -include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR}) # Add subdirectories with the projects add_subdirectory( ThirdParty ) diff --git a/Jenkinsfile b/Jenkinsfile index c51bbc3f72dd079d79e001017259e6d2b6e95054..d653d5d3822b8aac948c70eddcb3a9a0c0965d6f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,5 +1,5 @@ #!/usr/bin/env groovy -@Library('jenkins-pipeline@1.0.7') _ +@Library('jenkins-pipeline@1.0.8') _ def builders = [:] def helper = new ogs.helper() diff --git a/MeshLib/CMakeLists.txt b/MeshLib/CMakeLists.txt index 2440d1d7a04ad87d7eba5cba1c03736b4c1a8a49..cd2dbe180f12761cc85dbbf1bf45ddea81b71edd 100644 --- a/MeshLib/CMakeLists.txt +++ b/MeshLib/CMakeLists.txt @@ -36,8 +36,6 @@ if(OGS_USE_MPI) ) endif() -ADD_VTK_DEPENDENCY(MeshLib) - if(TARGET Eigen) add_dependencies(MeshLib Eigen) endif() diff --git a/ProcessLib/CMakeLists.txt b/ProcessLib/CMakeLists.txt index f73380f5ba850aac7e4c504efe9028c539be0aae..aa8acef9f7287e25d49f6a699b533136a99b9d1b 100644 --- a/ProcessLib/CMakeLists.txt +++ b/ProcessLib/CMakeLists.txt @@ -34,8 +34,6 @@ target_link_libraries(ProcessLib PRIVATE MeshGeoToolsLib ) -ADD_VTK_DEPENDENCY(ProcessLib) - if(TARGET Eigen) add_dependencies(ProcessLib Eigen) endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index b41299ccd02d96f4680ae2412b97876d65c5a7cb..e60187fea841dcf305e915c17638f297d5d835a7 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -46,7 +46,6 @@ target_link_libraries(testrunner ProcessLib Threads::Threads ) -ADD_VTK_DEPENDENCY(testrunner) if(OGS_USE_PETSC) target_link_libraries(testrunner ${PETSC_LIBRARIES}) @@ -74,8 +73,6 @@ if(Qt5XmlPatterns_FOUND) endif() endif() -ADD_VTK_DEPENDENCY(testrunner) - if(OGS_USE_PCH) cotire(testrunner) endif() diff --git a/ThirdParty/cmake-modules b/ThirdParty/cmake-modules index 8382e36c3a2916bb3de96fb5b91365246e2b22a7..d95fb992313a895dfb82b8e843c1b8fdc626e797 160000 --- a/ThirdParty/cmake-modules +++ b/ThirdParty/cmake-modules @@ -1 +1 @@ -Subproject commit 8382e36c3a2916bb3de96fb5b91365246e2b22a7 +Subproject commit d95fb992313a895dfb82b8e843c1b8fdc626e797 diff --git a/ThirdParty/vtkdiff b/ThirdParty/vtkdiff index b75cec4813c335bcb80f877df1019ddf12a80da1..58d9a746f8e73de256a4a2357f27960821c8fe93 160000 --- a/ThirdParty/vtkdiff +++ b/ThirdParty/vtkdiff @@ -1 +1 @@ -Subproject commit b75cec4813c335bcb80f877df1019ddf12a80da1 +Subproject commit 58d9a746f8e73de256a4a2357f27960821c8fe93 diff --git a/conanfile.py b/conanfile.py deleted file mode 100644 index 422e4499aaaebd1d999e9a72d3fa9673089ebe5b..0000000000000000000000000000000000000000 --- a/conanfile.py +++ /dev/null @@ -1,34 +0,0 @@ -from conans import ConanFile, CMake - -class OpenGeoSysConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake" - - options = {"gui": [True, False]} - default_options = \ - "gui=False", \ - "Boost:header_only=True", \ - "Qt:xmlpatterns=True" - - def requirements(self): - self.requires("Boost/[>=1.56.0]@lasote/stable") - self.requires("Eigen3/3.2.9@bilke/stable") - self.requires("VTK/[>=7.1]@bilke/stable") - - if self.options.gui: - self.requires("Shapelib/1.3.0@bilke/stable") - self.requires("libgeotiff/1.4.2@bilke/stable") - self.requires("Qt/5.6.2@bilke/testing") - - def imports(self): - self.copy(pattern="*.dll", dst="bin", src="bin") - self.copy(pattern="*.dylib*", dst="bin", src="lib") - self.copy(pattern="*.so*", dst="bin", src="lib") - self.copy(pattern="*.framework*", dst="bin", src="lib") - self.copy(pattern="*.dll", dst="bin/platforms", src="plugins/platforms") - self.copy(pattern="*.dylib*", dst="bin/platforms", src="plugins/platforms") - - def build(self): - cmake = CMake(self.settings) - self.run('cmake "%s" %s' % (self.conanfile_directory, cmake.command_line)) - self.run('cmake --build . %s' % cmake.build_config) diff --git a/scripts/cmake/AddVtkDependency.cmake b/scripts/cmake/AddVtkDependency.cmake deleted file mode 100644 index 29677ca931ca5eae6732b85a4e280a27645cac44..0000000000000000000000000000000000000000 --- a/scripts/cmake/AddVtkDependency.cmake +++ /dev/null @@ -1,14 +0,0 @@ -macro(ADD_VTK_DEPENDENCY target) - if(ParaView_FOUND) - include("${PARAVIEW_USE_FILE}") - - # see http://stackoverflow.com/questions/18642155 - set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${VTK_DEFINITIONS}) - elseif(VTK_FOUND) - include( ${VTK_USE_FILE} ) - endif() - - if(TARGET VtkRescan) - add_dependencies(${target} VtkRescan) - endif() -endmacro() diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake index 8423dec0d92d1c2ce29daf0f74b773e797216b4c..87dcfe20d493e5e4d7915fee8c3ed86ac9358800 100644 --- a/scripts/cmake/CMakeSetup.cmake +++ b/scripts/cmake/CMakeSetup.cmake @@ -7,7 +7,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} include(UseBackportedModules) include(OptionRequires) include(CppcheckTargets) -include(AddVtkDependency) include(ProcessorCount) ProcessorCount(NUM_PROCESSORS) @@ -22,7 +21,8 @@ endif() if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Debug' as none was specified.") set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() # Get the hostname diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake index 293ececc1c77319f2958f922e7b1f8cfe41ee5aa..033250f54042b30ddac57289edf682ca7164eb72 100644 --- a/scripts/cmake/CompilerSetup.cmake +++ b/scripts/cmake/CompilerSetup.cmake @@ -49,30 +49,38 @@ endif() ### GNU C/CXX compiler if(COMPILER_IS_GCC) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") - message(FATAL_ERROR "GCC minimum required version is 4.9! You are using ${CMAKE_CXX_COMPILER_VERSION}.") + message(FATAL_ERROR "GCC minimum required version is 4.9! You are \ + using ${CMAKE_CXX_COMPILER_VERSION}.") endif() if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") message(STATUS "Set GCC release flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG") else() # Enable assertions in STL in debug mode. - if (NOT STL_NO_DEBUG) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") + if(NOT STL_NO_DEBUG) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \ + -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \ + -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") endif() endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wno-deprecated -Wall -Wextra -fext-numeric-literals") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wno-deprecated -Wall \ + -Wextra -fext-numeric-literals") endif() # COMPILER_IS_GCC ### Clang if(COMPILER_IS_CLANG) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5") - message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version ${CMAKE_CXX_COMPILER_VERSION}") + message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version \ + ${CMAKE_CXX_COMPILER_VERSION}") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wall -Wno-c++98-compat-pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wall \ + -Wno-c++98-compat-pedantic") if(CMAKE_BUILD_TYPE STREQUAL "Debug") # Enable assertions in STL in debug mode. - if (NOT STL_NO_DEBUG) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") + if(NOT STL_NO_DEBUG) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \ + -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \ + -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") endif() endif() @@ -91,20 +99,22 @@ endif() # COMPILER_IS_INTEL # Profiling if(OGS_PROFILE) if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE to Release.") + message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \ + to Release.") endif() set(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG") # clang compiler does not know the following flags if(NOT COMPILER_IS_CLANG) - set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once -fno-optimize-sibling-calls") + set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once \ + -fno-optimize-sibling-calls") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}") -endif () +endif() ### Windows -if (WIN32) +if(WIN32) ## For Visual Studio compiler - if (MSVC) + if(MSVC) if(OGS_CPU_ARCHITECTURE STREQUAL "native") set(CPU_FLAGS "/favor:blend") else() @@ -118,13 +128,15 @@ if (WIN32) -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_XNONSTDC_NO_WARNINGS -D__restrict__=__restrict # this fixes #5 - -DNOMINMAX # This fixes compile errors with std::numeric_limits<T>::min() / max() + # This fixes compile errors with + # std::numeric_limits<T>::min() / max() + -DNOMINMAX ) # Sets warning level 3 and ignores some warnings - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} /W3 /wd4290 /wd4267 /wd4996") - # Allow big object files generated for template heavy code - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /ZI /Od /Ob0") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} /W3 /wd4290 \ + /wd4267 /wd4996 /bigobj") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \ + /ZI /Od /Ob0") DisableCompilerFlag(DEBUG /RTC1) # cygwin @@ -135,7 +147,7 @@ if (WIN32) message(STATUS "Might be GCC under cygwin.") endif() endif() -endif () +endif() # Missing OpenMP 3.0 implementation fix for Windows, this fixes #6 if(MSVC) diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake index 914b14e37f6f0f28eb44d7b389c3fb9f4bad9896..0f9e01048fec14b39ddae008303cbce80b9416ee 100644 --- a/scripts/cmake/ConanSetup.cmake +++ b/scripts/cmake/ConanSetup.cmake @@ -1,25 +1,96 @@ -if($ENV{CONAN_INSTALL}) - find_program(CONAN_TOOL_PATH conan) - if(CONAN_TOOL_PATH) - execute_process( - COMMAND ${CONAN_TOOL_PATH} install -u ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) +if(NOT OGS_USE_CONAN) + return() +endif() + +if(DEFINED OGS_LIB_Boost) + if(${OGS_LIB_Boost} STREQUAL "Default") + cmake_minimum_required(VERSION 3.4) # Conan Boost package requires this endif() endif() -set(USE_CONAN false CACHE INTERNAL "") -if(EXISTS ${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) - include(${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) - set(USE_CONAN true) -elseif(EXISTS ${PROJECT_SOURCE_DIR}/conanbuildinfo.cmake) - include(${PROJECT_SOURCE_DIR}/conanbuildinfo.cmake) - set(USE_CONAN true) -endif() -if(USE_CONAN) - cmake_minimum_required(VERSION 3.4) # Conan Boost package requires this - set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/scripts/cmake/conan ${CONAN_CMAKE_MODULE_PATH} ${CMAKE_MODULE_PATH}) - message(STATUS "Using conan package manager") - set(OGS_LIB_VTK System CACHE INTERNAL "") - set(OGS_LIB_BOOST System CACHE INTERNAL "") - set(OGS_LIB_EIGEN System CACHE INTERNAL "") + +include(${PROJECT_SOURCE_DIR}/scripts/cmake/conan/conan.cmake) + +set(CONAN_REQUIRES + Boost/1.64.0@conan/stable + Eigen3/3.2.9@bilke/stable + VTK/[>=7.1]@bilke/stable + CACHE INTERNAL "" +) + +set(CONAN_OPTIONS + Boost:header_only=True + Qt:xmlpatterns=True + CACHE INTERNAL "" +) + +if(LINUX AND BUILD_SHARED_LIBS) + set(CONAN_OPTIONS ${CONAN_OPTIONS} VTK:fPIC=True) +endif() + +if(OGS_BUILD_GUI) + set(CONAN_REQUIRES ${CONAN_REQUIRES} + Shapelib/1.3.0@bilke/stable + libgeotiff/1.4.2@bilke/stable + Qt/5.6.2@bilke/testing + ) +endif() + +# Find Conan and do version check +find_program(CONAN_CMD conan) +if(NOT CONAN_CMD) + message(FATAL_ERROR "Conan executable not found!") +endif() +execute_process(COMMAND ${CONAN_CMD} --version + OUTPUT_VARIABLE CONAN_VERSION_OUTPUT) +# Strip 'Conan version' & newline +string(SUBSTRING ${CONAN_VERSION_OUTPUT} 14 -1 CONAN_VERSION) +string(STRIP ${CONAN_VERSION} CONAN_VERSION) +set(CONAN_VERSION_REQUIRED 0.26.0) +if(${CONAN_VERSION} VERSION_LESS ${CONAN_VERSION_REQUIRED}) + message(FATAL_ERROR "Conan outdated. Installed: ${CONAN_VERSION}, \ + required: ${CONAN_VERSION_REQUIRED}. Consider updating via 'pip \ + install conan --upgrade'.") endif() + +execute_process(COMMAND ${CONAN_CMD} remote list OUTPUT_VARIABLE CONAN_REMOTES) + +# Add ogs remote +if("${CONAN_REMOTES}" MATCHES "ogs: https://ogs.jfrog.io/ogs/api/conan/conan") + # Make sure ogs repo is first + execute_process(COMMAND ${CONAN_CMD} remote update -i 0 ogs + https://ogs.jfrog.io/ogs/api/conan/conan) +else() + # Add ogs repo as first + message(STATUS "Conan adding ogs remote repositoy \ + (https://api.bintray.com/conan/ogs/conan)") + execute_process(COMMAND ${CONAN_CMD} remote add -i 0 ogs + https://ogs.jfrog.io/ogs/api/conan/conan) +endif() + +# Add conan-community remote +if("${CONAN_REMOTES}" MATCHES "conan-community: \ + https://api.bintray.com/conan/conan-community/conan") + execute_process(COMMAND ${CONAN_CMD} remote update -i 2 conan-community + https://api.bintray.com/conan/conan-community/conan) +else() + message(STATUS "Conan adding community remote repositoy \ + (https://api.bintray.com/conan/conan-community/conan)") + execute_process(COMMAND ${CONAN_CMD} remote add -i 2 conan-community + https://api.bintray.com/conan/conan-community/conan) +endif() + +# Remove libraries from Conan which are set to "System" +message(STATUS "Third-party libraries:") +foreach(LIB ${OGS_LIBS}) + message(" - OGS_LIB_${LIB} = ${OGS_LIB_${LIB}}") + if("${OGS_LIB_${LIB}}" STREQUAL System) + list(FILTER CONAN_REQUIRES EXCLUDE REGEX ${LIB}) + endif() +endforeach() + +conan_cmake_run(REQUIRES ${CONAN_REQUIRES} + OPTIONS ${CONAN_OPTIONS} + BASIC_SETUP + UPDATE + BUILD ${OGS_CONAN_BUILD} +) diff --git a/scripts/cmake/ExternalProjectBoost.cmake b/scripts/cmake/ExternalProjectBoost.cmake deleted file mode 100644 index ab16c24eb199f2ca238277f51a0e805c2e591163..0000000000000000000000000000000000000000 --- a/scripts/cmake/ExternalProjectBoost.cmake +++ /dev/null @@ -1,59 +0,0 @@ -if(USE_CONAN) - SET(BOOST_HEADER_ONLY TRUE) - find_package(Boost REQUIRED) - include_directories(SYSTEM ${CONAN_INCLUDE_DIRS_BOOST}) - link_directories(${Boost_LIBRARY_DIR}) - return() -endif() -include(ThirdPartyLibVersions) -include(ExternalProject) - -if(Boost_FOUND) - return() -endif() - -if(NOT DEFINED BOOST_ROOT AND DEFINED ENV{BOOST_ROOT}) - set(BOOST_ROOT $ENV{BOOST_ROOT} CACHE PATH "") -endif() - -# First check for system boost -if(NOT Boost_INCLUDE_DIRS) - if(APPLE) - set(BOOST_ROOT $ENV{HOMEBREW_ROOT}) - endif() - if(WIN32 AND COMPILER_IS_GCC) - set(BOOST_INCLUDEDIR "$ENV{CMAKE_LIBRARY_SEARCH_PATH}/include/boost*") - endif() - if(OGS_LIB_BOOST STREQUAL "System") - find_package(Boost ${OGS_BOOST_VERSION} REQUIRED) - if(NOT Boost_FOUND) - message(FATAL_ERROR "Aborting CMake because system Boost was not found!") - endif() - elseif(OGS_LIB_BOOST STREQUAL "Default") - find_package(Boost ${OGS_BOOST_VERSION}) - endif() - if(Boost_FOUND) - set(Boost_FOUND TRUE CACHE BOOL "Was Boost found?" FORCE) - set(Boost_INCLUDE_DIRS "${Boost_INCLUDE_DIRS}" CACHE STRING "Boost include dirs" FORCE) - return() - else() - set(Boost_INCLUDE_DIRS "") - endif() -endif() - -ExternalProject_Add(Boost - PREFIX ${PROJECT_BINARY_DIR}/External/boost - URL ${OGS_BOOST_URL} - URL_MD5 ${OGS_BOOST_MD5} - UPDATE_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "" -) -ExternalProject_Get_Property( Boost source_dir ) - -if(NOT Boost_INCLUDE_DIRS) - set( Boost_INCLUDE_DIRS ${source_dir} CACHE INTERNAL "Boost include directories") - message(STATUS "Downloading Boost ${OGS_BOOST_VERSION} automatically.") -endif() diff --git a/scripts/cmake/ExternalProjectCatalyst.cmake b/scripts/cmake/ExternalProjectCatalyst.cmake deleted file mode 100644 index 9d3752dec88fc39739420d37ad056ddb51045fde..0000000000000000000000000000000000000000 --- a/scripts/cmake/ExternalProjectCatalyst.cmake +++ /dev/null @@ -1,71 +0,0 @@ -include(ThirdPartyLibVersions) -include(ExternalProject) - -set(CATALYST_GIT_URL https://github.com/ufz/catalyst-io.git) - -if(NOT DEFINED ParaView_DIR AND DEFINED ENV{ParaView_DIR}) - set(ParaView_DIR $ENV{ParaView_DIR}) -endif() - -set(VTK_LIBRARIES ${VTK_MODULES} CACHE STRING "" FORCE) -if(OGS_BUILD_GUI) - # Replace vtknetcdf with vtkNetCDF vtkNetCDF_cxx - list(REMOVE_ITEM VTK_LIBRARIES vtknetcdf) - list(APPEND VTK_LIBRARIES vtkNetCDF vtkNetCDF_cxx) -endif() - -find_package(ParaView 4.2 REQUIRED COMPONENTS ${VTK_MODULES}) - -if(ParaView_FOUND) - foreach(DIR ${PARAVIEW_INCLUDE_DIRS}) - if("${DIR}" MATCHES ".*vtknetcdf.*") - include_directories(SYSTEM ${DIR}/../cxx ${DIR}/include) - endif() - endforeach() - message(STATUS "Using ParaView in ${ParaView_DIR}") - return() -elseif() - # If nothing was found build ParaView as an external project - set(ParaView_DIR ${PROJECT_BINARY_DIR}/External/catalyst/src/Catalyst-build CACHE PATH "" FORCE) - endif() -endif() - -set(CATALYST_CMAKE_GENERATOR ${CMAKE_GENERATOR}) -if(WIN32) - # Ninja temporary disabled because it builds only the Release mode. - # find_program(NINJA_TOOL_PATH ninja DOC "Ninja build tool") - if(NINJA_TOOL_PATH) - set(CATALYST_CMAKE_GENERATOR Ninja) - set(CATALYST_MAKE_COMMAND ninja ${VTK_LIBRARIES}) - else() - set(CATALYST_MAKE_COMMAND - msbuild /p:Configuration=Release /m:${NUM_PROCESSORS} ParaView.sln && - msbuild /p:Configuration=Debug /m:${NUM_PROCESSORS} /m ParaView.sln) - endif() - set(CATALYST_CONFIGURE_COMMAND cmake.bat) -else() - if($ENV{CI}) - set(CATALYST_MAKE_COMMAND make ${VTK_LIBRARIES}) - else() - set(CATALYST_MAKE_COMMAND make -j ${NUM_PROCESSORS} ${VTK_LIBRARIES}) - endif() - set(CATALYST_CONFIGURE_COMMAND cmake.sh) -endif() - -message(STATUS "Building ParaView as an external project in the build directory") - -ExternalProject_Add(Catalyst - PREFIX ${PROJECT_BINARY_DIR}/External/catalyst - GIT_REPOSITORY ${CATALYST_GIT_URL} - CONFIGURE_COMMAND ../Catalyst/${CATALYST_CONFIGURE_COMMAND} -G ${CATALYST_CMAKE_GENERATOR} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ../Catalyst - BUILD_COMMAND ${CATALYST_MAKE_COMMAND} - INSTALL_COMMAND "" -) - -if(NOT ParaView_FOUND) - # Rerun cmake in initial build - add_custom_target(VtkRescan ${CMAKE_COMMAND} ${PROJECT_SOURCE_DIR} DEPENDS Catalyst) -else() - add_custom_target(VtkRescan) # dummy target for caching -endif() diff --git a/scripts/cmake/ExternalProjectEigen.cmake b/scripts/cmake/ExternalProjectEigen.cmake deleted file mode 100644 index 036d235ff38613b890b5cc9af4c3c7544edd3dae..0000000000000000000000000000000000000000 --- a/scripts/cmake/ExternalProjectEigen.cmake +++ /dev/null @@ -1,49 +0,0 @@ -if(USE_CONAN) - find_package(Eigen3 REQUIRED) - include_directories(SYSTEM ${CONAN_INCLUDE_DIRS_EIGEN3}) - return() -endif() - -if(OGS_LIB_EIGEN STREQUAL "System") - find_package(Eigen3 3.2.9 REQUIRED) - if(NOT EIGEN3_FOUND) - message(FATAL_ERROR "Aborting CMake because system Eigen was not found!") - endif() -elseif(OGS_LIB_EIGEN STREQUAL "Default") - find_package(Eigen3 3.2.9) -endif() - -# First check for system Eigen -if(NOT EIGEN3_INCLUDE_DIR) - if(EIGEN3_FOUND) - set(EIGEN3_FOUND TRUE CACHE BOOL "Was Eigen found?" FORCE) - set(EIGEN3_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING "Eigen include dir" FORCE) - return() - else() - set(EIGEN3_INCLUDE_DIR "") - endif() -endif() - -if(EIGEN3_FOUND) - return() -endif() - -include(ThirdPartyLibVersions) -include(ExternalProject) -ExternalProject_Add(Eigen - PREFIX ${PROJECT_BINARY_DIR}/External/eigen - URL ${OGS_EIGEN_URL} - URL_MD5 ${OGS_EIGEN_MD5} - UPDATE_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "" -) - -ExternalProject_Get_Property( Eigen source_dir ) - -if(NOT EIGEN3_INCLUDE_DIR) - set( EIGEN3_INCLUDE_DIR ${source_dir} CACHE INTERNAL "Eigen include dir" FORCE) - message(STATUS "Downloading Eigen automatically.") -endif() diff --git a/scripts/cmake/ExternalProjectVtk.cmake b/scripts/cmake/ExternalProjectVtk.cmake deleted file mode 100644 index a6ed46a8e598d8dccffcd7ce28d3b8bd4194a083..0000000000000000000000000000000000000000 --- a/scripts/cmake/ExternalProjectVtk.cmake +++ /dev/null @@ -1,81 +0,0 @@ -if(USE_CONAN) - find_package(VTK REQUIRED) - include(${VTK_USE_FILE}) - include_directories(SYSTEM ${CONAN_INCLUDE_DIRS_VTK}) - return() -endif() -include(ThirdPartyLibVersions) -include(ExternalProject) - -if(NOT DEFINED VTK_DIR AND DEFINED ENV{VTK_DIR}) - set(VTK_DIR $ENV{VTK_DIR}) -endif() - -set(VTK_LIBRARIES ${VTK_MODULES} CACHE STRING "" FORCE) -if(OGS_BUILD_GUI) - # Replace vtknetcdf with vtkNetCDF vtkNetCDF_cxx - list(REMOVE_ITEM VTK_LIBRARIES vtknetcdf) - list(APPEND VTK_LIBRARIES vtkNetCDF vtkNetCDF_cxx) -endif() - -if(OGS_LIB_VTK STREQUAL "System") - find_package(VTK COMPONENTS ${VTK_MODULES} NO_MODULE REQUIRED) - if(NOT VTK_FOUND) - message(FATAL_ERROR "Aborting CMake because system VTK was not found!") - endif() -elseif(OGS_LIB_VTK STREQUAL "Default" OR DEFINED VTK_DIR) - find_package(VTK COMPONENTS ${VTK_MODULES} NO_MODULE QUIET) -endif() - -if(VTK_FOUND) - if(VTK_VERSION VERSION_LESS ${OGS_VTK_VERSION}) - message(FATAL_ERROR "Aborting CMake because VTK ${VTK_VERSION} is too old! (required: ${OGS_VTK_VERSION})") - endif() - message(STATUS "Using VTK ${VTK_VERSION} in ${VTK_DIR}") - foreach(DIR ${VTK_INCLUDE_DIRS}) - if("${DIR}" MATCHES ".*vtknetcdf.*") - include_directories(SYSTEM ${DIR}/../cxx ${DIR}/include) - elseif("${DIR}" MATCHES ".*vtk.*") - include_directories(SYSTEM ${DIR}/vtknetcdf/include) - endif() - endforeach() - include_directories(SYSTEM ${VTK_DIR}/../ThirdParty/netcdf/vtknetcdf/cxx) - return() -endif() -set(VTK_DIR ${PROJECT_BINARY_DIR}/External/vtk/src/vtk-build CACHE PATH "" FORCE) - -message(STATUS "Building VTK as an external project in the build directory") - -if(WIN32) - set(VTK_MAKE_COMMAND - msbuild /p:Configuration=Release /m:${NUM_PROCESSORS} VTK.sln && - msbuild /p:Configuration=Debug /m:${NUM_PROCESSORS} /m VTK.sln) -else() - if($ENV{CI}) - set(VTK_MAKE_COMMAND make) - else() - set(VTK_MAKE_COMMAND make -j ${NUM_PROCESSORS}) - endif() -endif() - -# Enable just the modules we selected -set(VTK_CMAKE_ARGS -DVTK_Group_StandAlone:bool=off -DVTK_Group_Rendering:bool=off) -foreach(arg ${VTK_MODULES}) - list(APPEND VTK_CMAKE_ARGS -DModule_${arg}:bool=on) -endforeach() - -ExternalProject_Add(vtk - PREFIX ${PROJECT_BINARY_DIR}/External/vtk - URL ${OGS_VTK_URL} - CMAKE_ARGS -Wno-dev - CMAKE_CACHE_ARGS ${VTK_CMAKE_ARGS} - BUILD_COMMAND ${VTK_MAKE_COMMAND} - INSTALL_COMMAND "" -) - -if(NOT VTK_FOUND) - # Rerun cmake in initial build - add_custom_target(VtkRescan ${CMAKE_COMMAND} ${PROJECT_SOURCE_DIR} DEPENDS vtk) -else() - add_custom_target(VtkRescan) # dummy target for caching -endif() diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 66e5e468ee129aa52786c2fd88384d88f7751f54..2213ff86bcd9112a65315f5a56caba4bbf3f47b9 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -4,7 +4,8 @@ # Find doxygen if(WIN32) - find_program(DOXYGEN_DOT_EXECUTABLE NAMES dot PATHS "$ENV{ProgramFiles}/Graphviz*/bin") + find_program(DOXYGEN_DOT_EXECUTABLE NAMES dot + PATHS "$ENV{ProgramFiles}/Graphviz*/bin") find_package(Doxygen QUIET) if(DOXYGEN_DOT_PATH) file(TO_NATIVE_PATH ${DOXYGEN_DOT_PATH} DOXYGEN_DOT_PATH) @@ -60,6 +61,25 @@ find_program(MODULE_CMD modulecmd ###################### ### Find libraries ### ###################### +find_package(Boost REQUIRED) +include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) + +include(VtkModules) +find_package(VTK COMPONENTS ${VTK_MODULES} REQUIRED) +include(${VTK_USE_FILE}) +if(NOT OGS_USE_CONAN) + foreach(DIR ${VTK_INCLUDE_DIRS}) + if("${DIR}" MATCHES ".*vtknetcdf.*") + include_directories(SYSTEM ${DIR}/../cxx ${DIR}/include) + elseif("${DIR}" MATCHES ".*vtk.*") + include_directories(SYSTEM ${DIR}/vtknetcdf/include) + endif() + endforeach() + include_directories(SYSTEM ${VTK_DIR}/../ThirdParty/netcdf/vtknetcdf/cxx) +endif() + +find_package(Eigen3 REQUIRED) +include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR}) ## pthread, is a requirement of logog ## if(CMAKE_CROSSCOMPILING) @@ -92,7 +112,7 @@ if(OGS_BUILD_GUI) if(USE_CONAN) set(Qt5_DIR ${CONAN_QT_ROOT}/lib/cmake/Qt5) endif() - find_package( Qt5 5.2 REQUIRED Gui Widgets Xml XmlPatterns) + find_package(Qt5 5.2 REQUIRED Gui Widgets Xml XmlPatterns) cmake_policy(SET CMP0020 NEW) set(CMAKE_AUTOMOC TRUE) set(CMAKE_AUTOUIC TRUE) @@ -129,10 +149,11 @@ endif() if(OGS_USE_PETSC) message(STATUS "Configuring for PETSc") - option(FORCE_PETSC_EXECUTABLE_RUNS "Force CMake to accept a given PETSc configuration" ON) + option(FORCE_PETSC_EXECUTABLE_RUNS + "Force CMake to accept a given PETSc configuration" ON) - ##Force CMake to accept a given PETSc configuration in case the failure of MPI tests - ##This may cause the compilation broken. + # Force CMake to accept a given PETSc configuration in case the failure of + # MPI tests. This may cause the compilation broken. if(FORCE_PETSC_EXECUTABLE_RUNS) set(PETSC_EXECUTABLE_RUNS YES) endif() diff --git a/scripts/cmake/InstallThirdPartyLibs.cmake b/scripts/cmake/InstallThirdPartyLibs.cmake deleted file mode 100644 index 69653d5f15c3fbea8b82863ee5b99eb75b81c39c..0000000000000000000000000000000000000000 --- a/scripts/cmake/InstallThirdPartyLibs.cmake +++ /dev/null @@ -1,125 +0,0 @@ -# - Install third-party libraries system-wide (intended for Windows) -# -# 2014-02-25, Lars Bilke -# -# Currently this will build: -# Eigen, VTK, GeoTiff -# -# Usage: -# Run this from wherever you want, it will create a tmp-directory, builds all -# libraries in it and installs them at the given INSTALL_PREFIX location. The -# tmp directory is deleted after finishing. Make sure to also pass your -# GENERATOR. -# -# cmake -DINSTALL_PREFIX=C:/libs -DGENERATOR="Visual Studio 12 Win64" \ -# -P path_to_ogs_source/scripts/cmake/InstallThirdPartyLibs.cmake -# -# Supported Generators: -# - Visual Studio 11 -# - Visual Studio 11 Win64 -# - Visual Studio 12 -# - Visual Studio 12 Win64 -# - Unix Makefiles -# - -# Argument checking -if(NOT INSTALL_PREFIX OR NOT GENERATOR) - message(FATAL_ERROR "You need to specify an INSTALL_PREFIX and a GENERATOR: cmake -DINSTALL_PREFIX=C:/libs -DGENERATOR=\"Visual Studio 11 Win64\" -P ${CMAKE_CURRENT_LIST_DIR}/InstallThirdPartyLibs.cmake") -endif() -file(TO_CMAKE_PATH ${INSTALL_PREFIX} INSTALL_PREFIX) -file(MAKE_DIRECTORY ${INSTALL_PREFIX}) -if(NOT IS_DIRECTORY ${INSTALL_PREFIX}) - message(FATAL_ERROR "Directory ${INSTALL_PREFIX} is not writable!") -endif() -if(NOT ${GENERATOR} STREQUAL "Visual Studio 11" AND - NOT ${GENERATOR} STREQUAL "Visual Studio 11 Win64" AND - NOT ${GENERATOR} STREQUAL "Visual Studio 12" AND - NOT ${GENERATOR} STREQUAL "Visual Studio 12 Win64" AND - NOT ${GENERATOR} STREQUAL "Unix Makefiles") - message(FATAL_ERROR "Make sure to specify a supported GENERATOR!") -endif() - -# CMake setup -set(CMAKE_PREFIX_PATH ${INSTALL_PREFIX}) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_LIST_DIR}/cmake" - "${CMAKE_CURRENT_LIST_DIR}") -include(ThirdPartyLibVersions) - -include(ProcessorCount) -ProcessorCount(NUM_PROCESSORS) -set(MAKE_PARALLEL_ARGS "") -if(NOT WIN32 AND NOT NUM_PROCESSORS EQUAL 0) - set(MAKE_PARALLEL_ARGS "--" "-j${NUM_PROCESSORS}") -endif() - -set(VISUAL_STUDIO_PARALLEL "") -if(WIN32) - set(VISUAL_STUDIO_PARALLEL "-DCMAKE_CXX_FLAGS=\"/MP\"") -endif() - -# Eigen -file(DOWNLOAD ${OGS_EIGEN_URL} tmp/eigen.tar.gz - SHOW_PROGRESS EXPECTED_MD5 ${OGS_EIGEN_MD5}) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf eigen.tar.gz - WORKING_DIRECTORY tmp) -file(GLOB EIGEN_SOURCE_DIR tmp/eigen-*) -file(MAKE_DIRECTORY tmp/build-eigen) -execute_process(COMMAND ${CMAKE_COMMAND} ${EIGEN_SOURCE_DIR} -G "${GENERATOR}" -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} - WORKING_DIRECTORY tmp/build-eigen) -execute_process(COMMAND ${CMAKE_COMMAND} --build . --config Release --target install - WORKING_DIRECTORY tmp/build-eigen) - - -# VTK -file(DOWNLOAD ${OGS_VTK_URL} tmp/vtk.tar.gz - SHOW_PROGRESS EXPECTED_MD5 ${OGS_VTK_MD5}) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf vtk.tar.gz - WORKING_DIRECTORY tmp) -file(GLOB VTK_SOURCE_DIR tmp/VTK-*) -file(MAKE_DIRECTORY tmp/build-vtk) -execute_process(COMMAND ${CMAKE_COMMAND} ${VTK_SOURCE_DIR} -G "${GENERATOR}" - -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DBUILD_TESTING=OFF -DModule_vtkGUISupportQtOpenGL=ON - -DBUILD_SHARED_LIBS=OFF -DCMAKE_DEBUG_POSTFIX=d ${VISUAL_STUDIO_PARALLEL} - WORKING_DIRECTORY tmp/build-vtk) -execute_process(COMMAND ${CMAKE_COMMAND} --build . --config Release --target install ${MAKE_PARALLEL_ARGS} - WORKING_DIRECTORY tmp/build-vtk) -if(WIN32) - execute_process(COMMAND ${CMAKE_COMMAND} --build . --config Debug --target install - WORKING_DIRECTORY tmp/build-vtk) -endif() - -# GeoTiff -file(DOWNLOAD ${OGS_TIFF_URL} tmp/tiff.zip - SHOW_PROGRESS EXPECTED_MD5 ${OGS_TIFF_MD5}) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf tiff.zip - WORKING_DIRECTORY tmp) -file(GLOB TIFF_SOURCE_DIR tmp/tiff-*) -file(MAKE_DIRECTORY tmp/build-tiff) -execute_process(COMMAND ${CMAKE_COMMAND} ${TIFF_SOURCE_DIR} -G "${GENERATOR}" - -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} ${VISUAL_STUDIO_PARALLEL} - WORKING_DIRECTORY tmp/build-tiff) -execute_process(COMMAND ${CMAKE_COMMAND} --build . --config Release --target install ${MAKE_PARALLEL_ARGS} - WORKING_DIRECTORY tmp/build-tiff) - -file(DOWNLOAD ${OGS_GEOTIFF_URL} tmp/geotiff.zip - SHOW_PROGRESS EXPECTED_MD5 ${OGS_GEOTIFF_MD5}) -execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf geotiff.zip - WORKING_DIRECTORY tmp) -file(GLOB GEOTIFF_SOURCE_DIR tmp/geotiff-*) -file(MAKE_DIRECTORY tmp/build-geotiff) -execute_process(COMMAND ${CMAKE_COMMAND} ${GEOTIFF_SOURCE_DIR} -G "${GENERATOR}" - -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DWITH_PROJ4=OFF ${VISUAL_STUDIO_PARALLEL} - WORKING_DIRECTORY tmp/build-geotiff) -execute_process(COMMAND ${CMAKE_COMMAND} --build . --config Release --target install ${MAKE_PARALLEL_ARGS} - WORKING_DIRECTORY tmp/build-geotiff) - -# Cleanup -file(REMOVE_RECURSE tmp) - -message(STATUS "Finished!") -if(WIN32) - file(TO_NATIVE_PATH ${INSTALL_PREFIX} INSTALL_PREFIX) - message(STATUS "Now make sure to create an environment variable CMAKE_LIBRARY_SEARCH_PATH which points to ${INSTALL_PREFIX}!") - message(STATUS "Make also sure to append %CMAKE_LIBRARY_SEARCH_PATH%\\bin to your PATH environment variable!") -endif() diff --git a/scripts/cmake/ThirdPartyLibVersions.cmake b/scripts/cmake/ThirdPartyLibVersions.cmake deleted file mode 100644 index 94943dbe9433d6b90f86684cf51c5f83381eff92..0000000000000000000000000000000000000000 --- a/scripts/cmake/ThirdPartyLibVersions.cmake +++ /dev/null @@ -1,18 +0,0 @@ -set(BASE_URL "http://ogsstorage.blob.core.windows.net/jenkins/ogs6-lib-sources") - -set(OGS_BOOST_VERSION 1.56.0) -string(REPLACE "." "_" OGS_BOOST_VERSION_UNDERLINE ${OGS_BOOST_VERSION}) -set(OGS_BOOST_URL "${BASE_URL}/boost_${OGS_BOOST_VERSION_UNDERLINE}.tar.bz2") -set(OGS_BOOST_MD5 "a744cf167b05d72335f27c88115f211d") - -set(OGS_EIGEN_URL "${BASE_URL}/eigen-3.2.9.tar.gz") -set(OGS_EIGEN_MD5 "6a578dba42d1c578d531ab5b6fa3f741") - -set(OGS_VTK_VERSION 7.1.0) -set(OGS_VTK_URL "${BASE_URL}/vtk-${OGS_VTK_VERSION}.tar.gz") -set(OGS_VTK_MD5 "a7e814c1db503d896af72458c2d0228f") - -set(OGS_TIFF_URL "${BASE_URL}/tiff-4.0.1.zip") -set(OGS_TIFF_MD5 "d4dc85296f790c159fc8fab443dd697c") -set(OGS_GEOTIFF_URL "${BASE_URL}/libgeotiff-1.4.0.zip") -set(OGS_GEOTIFF_MD5 "6f2583a0ec88eeb589f1cd326b2ed49c") diff --git a/scripts/cmake/conan/conan.cmake b/scripts/cmake/conan/conan.cmake new file mode 100644 index 0000000000000000000000000000000000000000..6edbbc716863889cd4dff61f429ecedfe507dcdf --- /dev/null +++ b/scripts/cmake/conan/conan.cmake @@ -0,0 +1,330 @@ +include(CMakeParseArguments) + +function(_get_msvc_ide_version result) + set(${result} "" PARENT_SCOPE) + if(${CMAKE_GENERATOR} STREQUAL "Ninja") + string(REGEX MATCHALL "[0-9]+" output "$ENV{VisualStudioVersion}") + list(GET output 0 _msvc_version) + set(${result} ${_msvc_version} PARENT_SCOPE) + else() + if(CMAKE_VS_PLATFORM_TOOLSET) + string(REGEX MATCHALL "[0-9]+" output "${CMAKE_VS_PLATFORM_TOOLSET}") + list(GET output 0 _toolset_version) + if(_toolset_version LESS 142) + if ("${_toolset_version}" EQUAL "141") + set(_msvc_version "15") + else() + string(SUBSTRING ${_toolset_version} 0 2 _msvc_version) + endif() + set(${result} ${_msvc_version} PARENT_SCOPE) + return() + else() + message(STATUS "Conan **WARNING** : Unknown MSVC toolset ${_toolset_version}") + endif() + endif() + + string(REGEX MATCHALL "[0-9]+" output "${CMAKE_GENERATOR}") + list(GET output 0 _msvc_version) + set(${result} ${_msvc_version} PARENT_SCOPE) + endif() +endfunction() + +function(conan_cmake_settings result) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) + #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) + #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) + #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) + #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) + #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) + #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) + + message(STATUS "Conan ** WARNING** : This detection of settings from cmake is experimental and incomplete. " + "Please check 'conan.cmake' and contribute") + + if(CONAN_CMAKE_MULTI) + set(_SETTINGS -g cmake_multi) + else() + set(_SETTINGS -g cmake) + endif() + if(CMAKE_BUILD_TYPE) + if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(CMAKE_BUILD_TYPE "Release") + endif() + set(_SETTINGS ${_SETTINGS} -s build_type=${CMAKE_BUILD_TYPE}) + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + #handle -s os setting + if(CMAKE_SYSTEM_NAME) + #use default conan os setting if CMAKE_SYSTEM_NAME is not defined + set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(CONAN_SYSTEM_NAME Macos) + endif() + set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD) + list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) + if (${_index} GREATER -1) + #check if the cmake system is a conan supported one + set(_SETTINGS ${_SETTINGS} -s os=${CONAN_SYSTEM_NAME}) + else() + message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") + endif() + endif() + + if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) + # using GCC + # TODO: Handle other params + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + conan_cmake_detect_gnu_libcxx(_LIBCXX) + set(_SETTINGS ${_SETTINGS} -s compiler=gcc -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=${_LIBCXX}) + elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang) + # using AppleClang + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libc++) + elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + if(APPLE) + cmake_policy(GET CMP0025 APPLE_CLANG_POLICY_ENABLED) + if(NOT APPLE_CLANG_POLICY_ENABLED) + message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") + set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libc++) + else() + set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libstdc++) + endif() + else() + set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libstdc++) + endif() + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) + set(_VISUAL "Visual Studio") + _get_msvc_ide_version(_VISUAL_VERSION) + if("${_VISUAL_VERSION}" STREQUAL "") + message(FATAL_ERROR "Visual Studio not recognized") + else() + set(_SETTINGS ${_SETTINGS} -s compiler=${_VISUAL} -s compiler.version=${_VISUAL_VERSION}) + endif() + + if(${CMAKE_GENERATOR} STREQUAL "Ninja") + if($ENV{Platform} STREQUAL "X64" OR MSVC_CXX_ARCHITECTURE_ID MATCHES "64") + set(_SETTINGS ${_SETTINGS} -s arch=x86_64) + elseif($ENV{Platform} STREQUAL "ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_SETTINGS ${_SETTINGS} -s arch=armv6) + else() + set(_SETTINGS ${_SETTINGS} -s arch=x86) + endif() + else() + if(${CMAKE_GENERATOR} MATCHES "Win64") + set(_SETTINGS ${_SETTINGS} -s arch=x86_64) + elseif (${CMAKE_GENERATOR} MATCHES "ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_SETTINGS ${_SETTINGS} -s arch=armv6) + else() + set(_SETTINGS ${_SETTINGS} -s arch=x86) + endif() + endif() + + conan_cmake_detect_vs_runtime(_vs_runtime) + message(STATUS "Detected VS runtime: ${_vs_runtime}") + set(_SETTINGS ${_SETTINGS} -s compiler.runtime=${_vs_runtime}) + else() + message(FATAL_ERROR "Conan: compiler setup not recognized") + endif() + + set(${result} ${_SETTINGS} PARENT_SCOPE) +endfunction() + + +function(conan_cmake_detect_gnu_libcxx result) + # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake + if(DEFINED _GLIBCXX_USE_CXX11_ABI) + if(_GLIBCXX_USE_CXX11_ABI) + set(${result} libstdc++11 PARENT_SCOPE) + return() + else() + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endif() + + # Check if there's any add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) + get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) + foreach(define ${defines}) + if(define STREQUAL "_GLIBCXX_USE_CXX11_ABI=0") + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endforeach() + + # Use C++11 stdlib as default if gcc is 5.1+ + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.1") + set(${result} libstdc++ PARENT_SCOPE) + else() + set(${result} libstdc++11 PARENT_SCOPE) + endif() +endfunction() + + +function(conan_cmake_detect_vs_runtime result) + string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) + set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + foreach(variable ${variables}) + string(REPLACE " " ";" flags ${${variable}}) + foreach (flag ${flags}) + if(${flag} STREQUAL "/MD" OR ${flag} STREQUAL "/MDd" OR ${flag} STREQUAL "/MT" OR ${flag} STREQUAL "/MTd") + string(SUBSTRING ${flag} 1 -1 runtime) + set(${result} ${runtime} PARENT_SCOPE) + return() + endif() + endforeach() + endforeach() + if(${build_type} STREQUAL "DEBUG") + set(${result} "MDd" PARENT_SCOPE) + else() + set(${result} "MD" PARENT_SCOPE) + endif() +endfunction() + + +macro(parse_arguments) + set(options BASIC_SETUP CMAKE_TARGETS UPDATE) + set(oneValueArgs CONANFILE) + set(multiValueArgs REQUIRES OPTIONS IMPORTS BUILD CONAN_COMMAND) + cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) +endmacro() + +function(conan_cmake_install) + # Calls "conan install" + # Argument BUILD is equivalant to --build={missing, PkgName,...} + # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source + # cmake does not identify conan as command, even if it is +x and it is in the path + parse_arguments(${ARGV}) + + set(CONAN_BUILD_POLICY "") + foreach(ARG ${ARGUMENTS_BUILD}) + if(${ARG} STREQUAL "all") + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) + break() + else() + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) + endif() + endforeach() + if(ARGUMENTS_CONAN_COMMAND) + set(conan_command ${ARGUMENTS_CONAN_COMMAND}) + else() + set(conan_command conan) + endif() + if(ARGUMENTS_CONANFILE) + set(CONANFILE -f=${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) + endif() + if(ARGUMENTS_UPDATE) + set(CONAN_INSTALL_UPDATE --update) + endif() + set(conan_args install ${CONANFILE} ${settings} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE}) + + string (REPLACE ";" " " _conan_args "${conan_args}") + message(STATUS "Conan executing: ${conan_command} ${_conan_args}") + + execute_process(COMMAND ${conan_command} ${conan_args} + RESULT_VARIABLE return_code + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + +endfunction() + + +function(conan_cmake_setup_conanfile) + parse_arguments(${ARGV}) + if(ARGUMENTS_CONANFILE) + # configure_file will make sure cmake re-runs when conanfile is updated + configure_file(${ARGUMENTS_CONANFILE} ${ARGUMENTS_CONANFILE}.junk) + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${ARGUMENTS_CONANFILE}.junk) + else() + conan_cmake_generate_conanfile(${ARGV}) + endif() +endfunction() + +function(conan_cmake_generate_conanfile) + # Generate, writing in disk a conanfile.txt with the requires, options, and imports + # specified as arguments + # This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR + parse_arguments(${ARGV}) + set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") + + file(WRITE ${_FN} "[generators]\ncmake\n\n[requires]\n") + foreach(ARG ${ARGUMENTS_REQUIRES}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() + + file(APPEND ${_FN} ${ARG} "\n[options]\n") + foreach(ARG ${ARGUMENTS_OPTIONS}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() + + file(APPEND ${_FN} ${ARG} "\n[imports]\n") + foreach(ARG ${ARGUMENTS_IMPORTS}) + file(APPEND ${_FN} ${ARG} "\n") + endforeach() +endfunction() + + +macro(conan_load_buildinfo) + if(CONAN_CMAKE_MULTI) + set(_CONANBUILDINFO conanbuildinfo_multi.cmake) + else() + set(_CONANBUILDINFO conanbuildinfo.cmake) + endif() + # Checks for the existence of conanbuildinfo.cmake, and loads it + # important that it is macro, so variables defined at parent scope + if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${_CONANBUILDINFO}") + message(STATUS "Conan: Loading ${_CONANBUILDINFO}") + include(${CMAKE_CURRENT_BINARY_DIR}/${_CONANBUILDINFO}) + else() + message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") + endif() +endmacro() + + +macro(conan_cmake_run) + parse_arguments(${ARGV}) + + if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED) + set(CONAN_CMAKE_MULTI ON) + message(STATUS "Conan: Using cmake-multi generator") + else() + set(CONAN_CMAKE_MULTI OFF) + endif() + if(NOT CONAN_EXPORTED) + conan_cmake_setup_conanfile(${ARGV}) + if(CONAN_CMAKE_MULTI) + foreach(CMAKE_BUILD_TYPE "Release" "Debug") + conan_cmake_settings(settings) + conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endforeach() + set(CMAKE_BUILD_TYPE) + else() + conan_cmake_settings(settings) + conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endif() + endif() + + conan_load_buildinfo() + + if(ARGUMENTS_BASIC_SETUP) + if(ARGUMENTS_CMAKE_TARGETS) + conan_basic_setup(TARGETS) + else() + conan_basic_setup() + endif() + endif() +endmacro() \ No newline at end of file diff --git a/scripts/jenkins/clang.groovy b/scripts/jenkins/clang.groovy index 45506d6fa088d6e5005fcefc2f44c7a60abd04e5..fbf9d9f205ff5629622d62f4e9e2ff283af94afb 100644 --- a/scripts/jenkins/clang.groovy +++ b/scripts/jenkins/clang.groovy @@ -3,8 +3,6 @@ node('docker') { def defaultDockerArgs = '-v /home/jenkins/.ccache:/usr/src/.ccache' def defaultCMakeOptions = - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_VTK=System ' + '-DOGS_ADDRESS_SANITIZER=ON ' + '-DOGS_UNDEFINED_BEHAVIOR_SANITIZER=ON ' + '-DOGS_BUILD_UTILS=ON' diff --git a/scripts/jenkins/gcc-conan.groovy b/scripts/jenkins/gcc-conan.groovy index cbc941db6634f25491573497fd7a6555b2197ef8..9f9c99ce242198b61ccbedacf00798fc4d61ca8a 100644 --- a/scripts/jenkins/gcc-conan.groovy +++ b/scripts/jenkins/gcc-conan.groovy @@ -1,10 +1,9 @@ def defaultDockerArgs = '-v /home/jenkins/.ccache:/usr/src/.ccache ' + - '-v /home/jenkins/conan-data:/root/.conan/data' + '-v /home/jenkins/conan-data:/home/jenkins/.conan/data' def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_VTK=System ' + + '-DOGS_USE_CONAN=ON ' + '-DOGS_CPU_ARCHITECTURE=generic ' def guiCMakeOptions = @@ -25,8 +24,7 @@ image.inside(defaultDockerArgs) { stage('Configure (Linux-Docker)') { configure.linux( cmakeOptions: defaultCMakeOptions, - script: this, - useConan: true + script: this ) } @@ -41,17 +39,15 @@ image.inside(defaultDockerArgs) { stage('Data Explorer (Linux-Docker)') { configure.linux( cmakeOptions: defaultCMakeOptions + guiCMakeOptions, - conanOptions: "-o gui=True", keepDir: true, - script: this, - useConan: true + script: this ) build.linux(script: this) } } stage('Archive (Linux-Docker)') { - archiveArtifacts 'build/*.tar.gz' + archiveArtifacts 'build/*.tar.gz,build/conaninfo.txt' } stage('Post (Linux-Docker)') { diff --git a/scripts/jenkins/gcc-dynamic.groovy b/scripts/jenkins/gcc-dynamic.groovy index a05d3970d6ab7ae8a747e231eb244fc7c76f59e2..56cf973f0b90e3e70008e873db7f208140a33a41 100644 --- a/scripts/jenkins/gcc-dynamic.groovy +++ b/scripts/jenkins/gcc-dynamic.groovy @@ -1,7 +1,5 @@ def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_VTK=System ' + '-DOGS_BUILD_UTILS=ON ' + '-DOGS_BUILD_METIS=ON ' diff --git a/scripts/jenkins/gcc-tests-large.groovy b/scripts/jenkins/gcc-tests-large.groovy index 568c32d53060c6fc788da1417fba8a2b282b0458..13c63abcdcffa692b09b07bb36f398de956b2e27 100644 --- a/scripts/jenkins/gcc-tests-large.groovy +++ b/scripts/jenkins/gcc-tests-large.groovy @@ -1,9 +1,6 @@ def defaultDockerArgs = '-v /home/jenkins/.ccache:/usr/src/.ccache' def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_EIGEN=System ' + - '-DOGS_LIB_VTK=System ' + '-DOGS_USE_LIS=ON' def configure = new ogs.configure() diff --git a/scripts/jenkins/gcc.groovy b/scripts/jenkins/gcc.groovy index 7c0a9cda85f9f1f8ee4d0ec77699fca7f20ccd50..3f5f8896690d41074cd1e359640c5bc1ac4ada74 100644 --- a/scripts/jenkins/gcc.groovy +++ b/scripts/jenkins/gcc.groovy @@ -1,9 +1,6 @@ def defaultDockerArgs = '-v /home/jenkins/.ccache:/usr/src/.ccache' def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_EIGEN=Local ' + - '-DOGS_LIB_VTK=System ' + '-DOGS_CPU_ARCHITECTURE=generic ' def guiCMakeOptions = diff --git a/scripts/jenkins/mac.groovy b/scripts/jenkins/mac.groovy index e2b02853427fd4997b2c5b4415d0c1aee4102c85..4ce0a23e3baf64dd8e31279ced92e665d5b632cf 100644 --- a/scripts/jenkins/mac.groovy +++ b/scripts/jenkins/mac.groovy @@ -1,8 +1,6 @@ def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + '-DOGS_CPU_ARCHITECTURE=core2 ' + - '-DOGS_LIB_BOOST=System' + - '-DOGS_LIB_VTK=System ' + '-DOGS_DOWNLOAD_ADDITIONAL_CONTENT=ON ' + '-DCMAKE_OSX_DEPLOYMENT_TARGET="10.11" ' diff --git a/scripts/jenkins/msvc.groovy b/scripts/jenkins/msvc.groovy index 9e15a398207bb03a6a2fa2c2ab1b818dfbd020f1..bce4f3d65528f5dcd8d319085913a00bfdada2a2 100644 --- a/scripts/jenkins/msvc.groovy +++ b/scripts/jenkins/msvc.groovy @@ -1,15 +1,14 @@ def defaultCMakeOptions = - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_VTK=System ' + - '-DOGS_DOWNLOAD_ADDITIONAL_CONTENT=ON' + '-DOGS_USE_CONAN=ON ' + + '-DOGS_DOWNLOAD_ADDITIONAL_CONTENT=ON ' def guiCMakeOptions = '-DOGS_BUILD_GUI=ON ' + '-DOGS_BUILD_UTILS=ON ' + '-DOGS_BUILD_TESTS=OFF ' + '-DOGS_BUILD_SWMM=ON ' + - '-DOGS_BUILD_METIS=ON' + '-DOGS_BUILD_METIS=ON ' def configure = new ogs.configure() def build = new ogs.build() @@ -32,8 +31,7 @@ withEnv(helper.getEnv(this)) { stage('Data Explorer (Win)') { configure.win( - cmakeOptions: defaultCMakeOptions + ' ' + guiCMakeOptions, keepDir: true, - conanOptions: "-o gui=True", + cmakeOptions: defaultCMakeOptions + guiCMakeOptions, keepDir: true, script: this ) build.win(script: this) diff --git a/scripts/jenkins/msvc32.groovy b/scripts/jenkins/msvc32.groovy index 17a5a48a43ad58f552fee8bc94365c60c4303892..48ecb7f7aec908eadd2604e9d99de1a3dc9830b6 100644 --- a/scripts/jenkins/msvc32.groovy +++ b/scripts/jenkins/msvc32.groovy @@ -1,13 +1,12 @@ def defaultCMakeOptions = '-DCMAKE_BUILD_TYPE=Release ' + + '-DOGS_USE_CONAN=ON ' + '-DOGS_32_BIT=ON ' + - '-DOGS_LIB_BOOST=System ' + - '-DOGS_LIB_VTK=System ' + '-DOGS_DOWNLOAD_ADDITIONAL_CONTENT=ON ' + '-DOGS_BUILD_GUI=ON ' + '-DOGS_BUILD_UTILS=OFF ' + '-DOGS_BUILD_TESTS=OFF ' + - '-DOGS_BUILD_CLI=OFF' + '-DOGS_BUILD_CLI=OFF ' def configure = new ogs.configure() def build = new ogs.build() @@ -20,7 +19,6 @@ withEnv(helper.getEnv(this, 'x32')) { configure.win( arch: 'x86', cmakeOptions: defaultCMakeOptions, - conanOptions: "-o gui=True", script: this ) build.win(script: this) @@ -28,6 +26,6 @@ withEnv(helper.getEnv(this, 'x32')) { } stage('Post 32-bit (Win)') { - archiveArtifacts 'build/*.zip' + archiveArtifacts 'build/*.zip,build/conaninfo.txt' post.cleanup('build') } diff --git a/scripts/travis/eigen.sh b/scripts/travis/eigen.sh new file mode 100644 index 0000000000000000000000000000000000000000..de97440c900ee0b07b3ebb9cf6516e48aef8710e --- /dev/null +++ b/scripts/travis/eigen.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -e +# check to see if cmake folder is empty +if [ ! -d "$HOME/eigen-eigen-dc6cfdf9bcec/Eigen" ]; then + ZIP="3.2.9.zip" + cd $HOME + curl -L -o $ZIP http://bitbucket.org/eigen/eigen/get/$ZIP; + unzip $ZIP; +else + echo 'Using cached eigen directory.'; +fi