# Copyright 2011-2024 The Ready Bunch
#
# This file is part of Ready.
#
# Ready is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ready is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ready. If not, see .
#
#--------------------------------------------------------------------------
cmake_minimum_required( VERSION 3.15...4.0 )
# - The min version is enforced (older versions of CMake will give an error). It should be set to the oldest
# version that we know works with our build on every platform.
# - The max version tells CMake not to use any CMake features newer than this, in case they break something.
# Keep it updated to the newest version that we know works with our build on all platforms.
project( Ready )
set( READY_VERSION 0.11.0 ) # check matches Help/about.html
add_definitions( -D READY_VERSION=${READY_VERSION} )
if( APPLE OR WIN32 )
# app names are usually capitalized on macOS and Windows
set( APP_NAME Ready )
else()
# Linux binaries are usually all lowercase
set( APP_NAME ready )
endif()
set( CMD_NAME rdy ) # command-line version
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")
#-------------------------------------------source files----------------------------------------------
set( BASE_SOURCES # core code used in all executables
src/readybase/AbstractRD.hpp src/readybase/AbstractRD.cpp
src/readybase/ImageRD.hpp src/readybase/ImageRD.cpp
src/readybase/GrayScottImageRD.hpp src/readybase/GrayScottImageRD.cpp
src/readybase/OpenCLImageRD.hpp src/readybase/OpenCLImageRD.cpp
src/readybase/FormulaOpenCLImageRD.hpp src/readybase/FormulaOpenCLImageRD.cpp
src/readybase/FullKernelOpenCLImageRD.hpp src/readybase/FullKernelOpenCLImageRD.cpp
src/readybase/MeshRD.hpp src/readybase/MeshRD.cpp
src/readybase/GrayScottMeshRD.hpp src/readybase/GrayScottMeshRD.cpp
src/readybase/OpenCLMeshRD.hpp src/readybase/OpenCLMeshRD.cpp
src/readybase/FormulaOpenCLMeshRD.hpp src/readybase/FormulaOpenCLMeshRD.cpp
src/readybase/FullKernelOpenCLMeshRD.hpp src/readybase/FullKernelOpenCLMeshRD.cpp
src/readybase/OpenCL_MixIn.hpp src/readybase/OpenCL_MixIn.cpp
src/readybase/OpenCL_utils.hpp src/readybase/OpenCL_utils.cpp
src/readybase/IO_XML.hpp src/readybase/IO_XML.cpp
src/readybase/overlays.hpp src/readybase/overlays.cpp
src/readybase/Properties.hpp src/readybase/Properties.cpp
src/readybase/utils.hpp src/readybase/utils.cpp
src/readybase/stencils.hpp src/readybase/stencils.cpp
src/readybase/OpenCL_Dyn_Load.h src/readybase/OpenCL_Dyn_Load.c
src/readybase/MeshGenerators.hpp src/readybase/MeshGenerators.cpp
src/readybase/SystemFactory.hpp src/readybase/SystemFactory.cpp
src/readybase/scene_items.hpp src/readybase/scene_items.cpp
src/readybase/InitialPatternGenerator.hpp src/readybase/InitialPatternGenerator.cpp
src/readybase/colormaps.hpp
src/extern/PerlinNoise.hpp
)
set( GUI_SOURCES # GUI code used only in Ready
src/gui/IDs.hpp
src/gui/wxutils.hpp src/gui/wxutils.cpp
src/gui/dialogs.hpp src/gui/dialogs.cpp
src/gui/prefs.hpp src/gui/prefs.cpp
src/gui/app.hpp src/gui/app.cpp
src/gui/frame.hpp src/gui/frame.cpp
src/gui/HelpPanel.hpp src/gui/HelpPanel.cpp
src/gui/InfoPanel.hpp src/gui/InfoPanel.cpp
src/gui/HtmlInfo.hpp src/gui/HtmlInfo.cpp
src/gui/PatternsPanel.hpp src/gui/PatternsPanel.cpp
src/gui/vtk_pipeline.hpp src/gui/vtk_pipeline.cpp
src/gui/InteractorStylePainter.hpp src/gui/InteractorStylePainter.cpp
src/gui/wxVTKRenderWindowInteractor.h src/gui/wxVTKRenderWindowInteractor.cxx
src/gui/RecordingDialog.hpp src/gui/RecordingDialog.cpp
src/gui/ImportImageDialog.hpp src/gui/ImportImageDialog.cpp
src/gui/MakeNewSystem.hpp src/gui/MakeNewSystem.cpp
)
set( CMD_SOURCES # code used only in the command-line version
src/cmd/main.cpp
src/extern/cxxopts-2.2.1/cxxopts.hpp # https://github.com/jarro2783/cxxopts
)
set( RESOURCES
resources/ready.rc
resources/appicon.ico
resources/appicon16.ico
resources/appicon32.ico
resources/appicon48.ico
resources/appicon.xpm
resources/Info.plist.in
resources/app.icns
resources/file.icns
)
set( PATTERN_FILES
Patterns/Meinhardt1982/stripes.vti Patterns/Meinhardt1982/zebra.vtu
Patterns/advection.vti
Patterns/bilaplacian_interpolation.vti
Patterns/Schlogl.vti
Patterns/heat_equation.vti
Patterns/Turing1952/spots.vti Patterns/Turing1952/spots_noisy.vti
Patterns/Turing1952/turing_parameter_map.vti
Patterns/kernel_test.vti
Patterns/parameter_modulation_demo.vti
Patterns/parameter_modulation_demo2.vti Patterns/parameter_modulation_demo2_3D.vti
Patterns/heat_equation_interpolation.vti
Patterns/Ginzburg-Landau/complex_Ginzburg-Landau.vti Patterns/Ginzburg-Landau/complex_Ginzburg-Landau_1D.vti
Patterns/Ginzburg-Landau/complex_Ginzburg-Landau_magnitude.vti
Patterns/wave_equation.vti Patterns/wave_soliton.vti
Patterns/oregonator.vti
Patterns/Brusselator.vti
Patterns/SmoothLife2011/smoothglider.vti Patterns/SmoothLife2011/smoothlifeL.vti Patterns/SmoothLife2011/glider_3D.vti
Patterns/SmoothLife2011/gaussian-smoothlife.vti Patterns/SmoothLife2011/smoothlifeL_parameter_map.vti
Patterns/Purwins1999/glider.vti Patterns/Purwins1999/glider_3D.vti Patterns/Purwins1999/multiGlider.vti
Patterns/CPU-only/grayscott_1D.vti
Patterns/CPU-only/grayscott_2D.vti
Patterns/CPU-only/grayscott_3D.vti
Patterns/FitzHugh-Nagumo/tip-splitting.vti
Patterns/FitzHugh-Nagumo/tip-splitting_3D.vti
Patterns/FitzHugh-Nagumo/spiral_turbulence.vti
Patterns/FitzHugh-Nagumo/pulsate.vti
Patterns/FitzHugh-Nagumo/squid_axon.vti
Patterns/FitzHugh-Nagumo/Ising_regime.vti
Patterns/FitzHugh-Nagumo/FHN_parameter_map.vti
Patterns/GrayScott1984/bunny.vtu
Patterns/GrayScott1984/lion.vtu
Patterns/GrayScott1984/Lesmes_noisy.vti
Patterns/GrayScott1984/noisy_solitons_mitosis.vti
Patterns/GrayScott1984/parameter-map.vti
Patterns/GrayScott1984/parameter-map_3D.vti
Patterns/GrayScott1984/Pearson1993.vti
Patterns/GrayScott1984/self-replicating_spots.vti
Patterns/GrayScott1984/U-Skate/Hutton-and-helix-gliders.vti
Patterns/GrayScott1984/U-Skate/Munafo_glider.vti
Patterns/GrayScott1984/U-Skate/o-ring_2D.vti
Patterns/CellularAutomata/Bays_3D.vti
Patterns/CellularAutomata/Conway_life.vti
Patterns/CellularAutomata/life_torus.vtu
Patterns/CellularAutomata/larger-than-life.vti
Patterns/CellularAutomata/Buss_hex.vtu
Patterns/CellularAutomata/tri_life.vtu
Patterns/CellularAutomata/hex_B2oS2m34_gliders.vtu
Patterns/CellularAutomata/PenroseTilings/life.vtu
Patterns/CellularAutomata/PenroseTilings/life_oscillators.vtu
Patterns/CellularAutomata/PenroseTilings/Goucher_glider.vtu
Patterns/CellularAutomata/PenroseTilings/Imai_glider_B2SC4.vtu
Patterns/CellularAutomata/PenroseTilings/Goucher_loops.vtu
Patterns/CellularAutomata/Salt/salt2D_demo.vti
Patterns/CellularAutomata/Salt/salt3D_circular330.vti
Patterns/CellularAutomata/FCC3333/random.vtu
Patterns/CellularAutomata/FCC3333/glider.vtu
Patterns/Yang2002/Yang_1.vti Patterns/Yang2002/Yang_2b.vti Patterns/Yang2002/Yang_2c.vti
Patterns/Yang2002/Yang_2d.vti Patterns/Yang2002/Yang_3a.vti Patterns/Yang2002/Yang_3b.vti
Patterns/Yang2002/Yang_3c.vti Patterns/Yang2002/Yang_3d.vti Patterns/Yang2002/Yang_4.vti
Patterns/Yang2003/Fig2.vti
Patterns/Yang2003/Fig3a.vti Patterns/Yang2003/Fig3b.vti Patterns/Yang2003/Fig3c.vti
Patterns/McCabe2010/McCabe.vti Patterns/McCabe2010/McCabe_simple.vti
Patterns/McCabe2010/McCabe_additive2b.vti Patterns/McCabe2010/McCabe_additive2a.vti
Patterns/McCabe2010/fast-mccabe.vti
Patterns/Kytta2007/Fig5.7a.vti Patterns/Kytta2007/Fig5.7c.vti
Patterns/Kytta2007/Fig5.8c.vti Patterns/Kytta2007/Fig5.8d.vti Patterns/Kytta2007/Fig5.8e.vti
Patterns/Kytta2007/Fig5.8f.vti Patterns/Kytta2007/Fig5.8g.vti
Patterns/Yang2006/jumping.vti Patterns/Yang2006/jumping_cGL.vti
Patterns/Schrodinger1926/packet.vti Patterns/Schrodinger1926/packet_reflect.vti
Patterns/Schrodinger1926/packet_pass.vti Patterns/Schrodinger1926/quantum_tunnelling.vti
Patterns/Schrodinger1926/packet_reflect2D.vti Patterns/Schrodinger1926/two_slit.vti
Patterns/Froese2014/Froese2014_Fig3.vti
Patterns/Pennybacker2013/phyllotaxis_fibonacci.vti Patterns/Pennybacker2013/phyllotaxis_hexagons.vti
Patterns/Pennybacker2013/spots.vti Patterns/Pennybacker2013/stripes.vti
Patterns/Pennybacker2013/parameter_map.vti
Patterns/Experiments/TimHutton/LifeBlur.vti
Patterns/Experiments/TimHutton/mutually-catalytic_spots.vti
Patterns/Experiments/TimHutton/mutually-catalytic_spots_2.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_forwardEuler.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_2stepAdamsBashforth.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_3stepAdamsBashforth.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_modifiedEuler.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_midpointMethod.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_HeunsMethod.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_LaxFriedrichs.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_LaxWendroff.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_RungeKutta4.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_staggeredLeapfrog.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_forwardEuler_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_2stepAdamsBashforth_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_3stepAdamsBashforth_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_modifiedEuler_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_midpointMethod_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_HeunsMethod_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_LaxFriedrichs_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_LaxWendroff_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_RungeKutta4_double.vti
Patterns/Experiments/TimHutton/NumericalMethods/advection_staggeredLeapfrog_double.vti
Patterns/Experiments/DanWills/cglrd_ramps_example.vti
Patterns/Experiments/DanWills/grayscott-historyWave_fuseWorms.vti
Patterns/Experiments/DanWills/grayscott-historyWave_moreLifelike.vti
Patterns/Experiments/DanWills/grayscott-historyWaveDC_solitonsAndWorms_init.vti
Patterns/Experiments/DanWills/orbits_explodey_init.vti
Patterns/Experiments/DanWills/orbits_sharpWaves-init.vti
Patterns/Experiments/DanWills/grayscott-historyWave_coralGrow.vti
Patterns/Experiments/DanWills/grayscott-historyWaveDC_movingWormsAndSolitons.vti
Patterns/Experiments/DanWills/orbitsNova_buildAndDestroyBlobs.vti
Patterns/Experiments/DanWills/orbits_epochs.vti
Patterns/Experiments/DanWills/grayscott-historyWaveDC_dualPhaseSolitonWormFlow.vti
Patterns/Experiments/DanWills/heat-equation-boiling-history-wave_glidersUnstable.vti
Patterns/Experiments/DanWills/grayscott-historyWaveDC_fibrousHistoryFill_wavePartition_init2.vti
Patterns/Experiments/DanWills/grayscott-historyWave_ddd_bubbleDynasties_init.vti
Patterns/Experiments/DanWills/grayscott-historyWave_temporalWeb_mgsz_init.vti
Patterns/Experiments/DanWills/grayscott-withWaveCoupling_ddd_cauli_init.vti
Patterns/Experiments/DanWills/grayscott-evolvingMask_ddd_frothierEchoes_init.vti
Patterns/Experiments/DanWills/grayscott-historyWave_fuseWorms-wiggletrains_init.vti
Patterns/Experiments/DanWills/orbits_nova_ddd_chicken_init.vti
Patterns/Experiments/DanWills/orbits_ddd_questionSpaceships-answer_init_djw.vti
Patterns/Experiments/DanWills/orbits_ddd_epochs_init.djw.vti
Patterns/Experiments/DanWills/grayscott-sharpenTweak_cellTrailDetail_512px_init.vti
Patterns/Experiments/SimonGladman/vermiformSolitons.vti
Patterns/Experiments/CornusAmmonis/MandelbrotWorms.vti
Patterns/Experiments/CornusAmmonis/mutually-catalytic-pinwheels.vti
Patterns/Experiments/CornusAmmonis/mutually-catalytic-spots-second-order-sobel.vti
Patterns/Experiments/CornusAmmonis/pearson-chained-edge-detectors.vti
Patterns/Experiments/CornusAmmonis/surfing-solitons.vti
Patterns/Experiments/CornusAmmonis/tip-splitting-web.vti
Patterns/Experiments/CornusAmmonis/worms2.vti
Patterns/Experiments/CornusAmmonis/bz-warpsharp.vti
Patterns/Experiments/CornusAmmonis/smoke.vti
Patterns/Experiments/CornusAmmonis/smoke-ising.vti
Patterns/Experiments/CornusAmmonis/splats.vti
Patterns/Experiments/DaveMann/smiley_faces.vti
Patterns/Experiments/TihaVonGhyczy/RockScissorPaper.vti
Patterns/Experiments/TihaVonGhyczy/sobel_waves.vti
Patterns/Agmon2014/cells.vti Patterns/Agmon2014/cells_double.vti
Patterns/Agmon2014/oil-water.vti
Patterns/Guo2014/guo.vti
Patterns/Maginu1975/maginu_parameter_map.vti
Patterns/Kryuchkov2020/Drosophila_corneal_nanocoatings.vti
Patterns/RosenzweigMacArthur1963/hk_parameter_map.vti
Patterns/RosenzweigMacArthur1963/hm_parameter_map.vti
Patterns/RosenzweigMacArthur1963/predator-prey.vti
Patterns/RosenzweigMacArthur1963/predator-prey_1D.vti
Patterns/LotkaVolterra1926/Lotka-Volterra.vti Patterns/LotkaVolterra1926/Lotka-Volterra_1D.vti
Patterns/Kobayashi1993/crystal.vti Patterns/Kobayashi1993/crystals.vti
Patterns/Kobayashi1993/laplacian_growth.vti
Patterns/Kobayashi1993/laplacian_growth_3D.vti Patterns/Kobayashi1993/laplacian_growth_3D_corner.vti
Patterns/Morozov2008/Fig2.vti Patterns/Morozov2008/Fig4.vti Patterns/Morozov2008/Fig5678_delta_map.vti
Patterns/KuramotoSivashinsky1978/Kuramoto-Sivashinsky.vti
Patterns/KuramotoSivashinsky1978/Kuramoto-Sivashinsky_multistable.vti
Patterns/KuramotoSivashinsky1978/Kuramoto-Sivashinsky_travelling_waves.vti
Patterns/KuramotoSivashinsky1978/Kuramoto-Sivashinsky_travelling_waves2.vti
Patterns/KortewegDeVries1895/kdv.vti
Patterns/KardarParisiZhang1986/erosion.vti
Patterns/KardarParisiZhang1986/uniform_snowfall.vti
Patterns/KardarParisiZhang1986/drainage_erosion.vti
Patterns/shallow_water_equations.vti
)
set( HELP_FILES
Help/about.gif Help/about.html
Help/action.html Help/credits.html
Help/file.html Help/help.html
Help/mouse.html Help/quickstart.html
Help/tips.html Help/changes.html
Help/edit.html Help/formats.html
Help/index.html Help/problems.html
Help/view.html Help/introduction.html
Help/writing_new_rules.html
)
set( OTHER_FILES
./README.txt
./COPYING.txt
./TODO.txt
./BUILD.txt
./CMakeLists.txt
src/FindOpenCL.cmake
src/Doxyfile.in
resources/logo.png
resources/Icons/22px/icon-pointer.png
resources/Icons/22px/draw-freehand.png
resources/Icons/22px/draw-brush.png
resources/Icons/22px/color-picker.png
resources/Icons/22px/document-new.png
resources/Icons/22px/document-open.png
resources/Icons/22px/document-save.png
resources/Icons/22px/document-revert.png
resources/Icons/22px/media-playback-start_green.png
resources/Icons/22px/media-playback-pause_red.png
resources/Icons/22px/media-seek-forward.png
resources/Icons/22px/media-seek-backward.png
resources/Icons/22px/media-skip-backward_modified.png
resources/Icons/22px/media-record.png
resources/Icons/22px/system-run.png
resources/Icons/22px/list-add_gray.png
resources/Icons/22px/camera-photo.png
resources/Icons/32px/icon-pointer.png
resources/Icons/32px/draw-freehand.png
resources/Icons/32px/draw-brush.png
resources/Icons/32px/color-picker.png
resources/Icons/32px/document-new.png
resources/Icons/32px/document-open.png
resources/Icons/32px/document-save.png
resources/Icons/32px/document-revert.png
resources/Icons/32px/media-playback-start_green.png
resources/Icons/32px/media-playback-pause_red.png
resources/Icons/32px/media-seek-forward.png
resources/Icons/32px/media-seek-backward.png
resources/Icons/32px/media-skip-backward_modified.png
resources/Icons/32px/media-record.png
resources/Icons/32px/system-run.png
resources/Icons/32px/list-add_gray.png
resources/Icons/32px/camera-photo.png
resources/Cursors/pencil-cursor.png
resources/Cursors/brush-cursor.png
resources/Cursors/picker-cursor.png
Scripts/Houdini/Dop_rd_object.hdanc
Scripts/Houdini/Dop_rd_solver.hdanc
Scripts/Houdini/Object_rd_template_object.hdanc
Scripts/Houdini/README.md
Scripts/Houdini/Sop_rd_object_post_process.hdanc
)
#-------------------------------------------VTK----------------------------------------------
find_package( VTK NO_MODULE REQUIRED )
if( VTK_VERSION VERSION_LESS "7.0.0" )
set( VTK_COMPONENTS
vtkCommonColor
vtkCommonCore
vtkFiltersCore
vtkFiltersExtraction
vtkFiltersGeometry
vtkFiltersModeling
vtkFiltersSources
vtkFiltersTexture
vtkImagingColor
vtkImagingStencil
vtkInteractionStyle
vtkIOImage
vtkIOGeometry
vtkIOPLY
vtkIOXML
vtkRenderingCore
vtkRenderingAnnotation
vtkRenderingFreeType
vtkRenderingOpenGL
)
elseif( VTK_VERSION VERSION_LESS "8.90.0" )
set( VTK_COMPONENTS
vtkCommonColor
vtkCommonCore
vtkFiltersCore
vtkFiltersExtraction
vtkFiltersGeometry
vtkFiltersModeling
vtkFiltersSources
vtkFiltersTexture
vtkImagingColor
vtkImagingStencil
vtkInteractionStyle
vtkIOImage
vtkIOGeometry
vtkIOPLY
vtkIOXML
vtkRenderingCore
vtkRenderingAnnotation
vtkRenderingFreeType
vtkRenderingOpenGL2
)
else()
set( VTK_COMPONENTS
CommonColor
CommonCore
FiltersCore
FiltersExtraction
FiltersGeometry
FiltersModeling
FiltersSources
FiltersTexture
ImagingColor
ImagingStencil
InteractionStyle
IOImage
IOGeometry
IOPLY
IOXML
RenderingCore
RenderingAnnotation
RenderingFreeType
RenderingOpenGL2
)
endif()
find_package( VTK COMPONENTS ${VTK_COMPONENTS} REQUIRED )
if( VTK_VERSION VERSION_LESS "8.90.0" )
include( ${VTK_USE_FILE} )
endif()
#-------------------------------------------wxWidgets----------------------------------------------
if( APPLE )
# on macOS you might want to to use locally installed wxWidgets headers and libs:
# set( wxWidgets_CONFIG_EXECUTABLE /usr/local/bin/wx-config )
# set( wxWidgets_wxrc_EXECUTABLE /usr/local/bin/wxrc ) # not used, but no harm leaving it in
elseif(UNIX)
# remove -rdynamic from link options on Linux to reduce size by about 1.2MB
set( CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "" )
endif()
# wxWidgets is required to build the project
if(UNIX AND NOT APPLE)
SET(WXGLCANVASLIBS "gl")
endif()
FIND_PACKAGE( wxWidgets COMPONENTS html aui ${WXGLCANVASLIBS} core adv base REQUIRED)
INCLUDE( ${wxWidgets_USE_FILE} )
if( MSVC )
# To avoid link errors in Release build in Visual Studio: unresolved external symbol onAssert
# Possibly because we build wxWidgets with static linking?
# This flag still allows debugging into wxWidgets code.
add_definitions( -DwxDEBUG_LEVEL=0 )
endif()
#-------------------------------------------wxVTK----------------------------------------------
# The following allows you to access wxGLCanvas for GTK
if(WIN32)
set(GUI_EXECUTABLE WIN32)
else()
if(APPLE)
SET(GUI_EXECUTABLE MACOSX_BUNDLE)
IF(VTK_USE_COCOA)
SET_SOURCE_FILES_PROPERTIES(
src/gui/wxVTKRenderWindowInteractor.cxx
PROPERTIES COMPILE_FLAGS "-ObjC++")
ENDIF(VTK_USE_COCOA)
else()
find_package(PkgConfig)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_libraries(${GTK3_LIBRARIES})
endif()
endif()
#-------------------------------------------OpenCL----------------------------------------------
set( CMAKE_MODULE_PATH ${Ready_SOURCE_DIR}/src )
# (we include our own FindOpenCL.cmake until the time that CMake comes with its own)
# we need to build against OpenCL
find_package( OpenCL REQUIRED )
include_directories( ${OPENCL_INCLUDE_DIRS} )
if( APPLE )
link_libraries( ${OPENCL_LIBRARIES} ) # on MacOSX we assume that OpenCL is available
endif()
#---------------copy installation files to build folder (helps with testing)--------------------
foreach( file ${PATTERN_FILES} ${HELP_FILES} ${RESOURCES} ${OTHER_FILES} )
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${file}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${file}" "${CMAKE_CURRENT_BINARY_DIR}/${file}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${file}"
)
list( APPEND files_dest "${CMAKE_CURRENT_BINARY_DIR}/${file}" )
endforeach()
add_custom_target( CopyFiles ALL DEPENDS ${files_dest} )
#-------------------------------- build ------------------------------------------------------
set( USE_SSE "YES" CACHE BOOL "Set to false if your CPU doesn't have SSE support.")
if( USE_SSE )
# enable SSE to allow us to set flags to avoid denormals, and relax the floating-point accuracy for speed
if( MSVC )
if( CMAKE_CL_64 )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fp:fast" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast" )
else() # avoid warning on x64, which always comes with SSE2
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE2 /fp:fast" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2 /fp:fast" )
endif()
else()
add_definitions( -msse2 -ffast-math )
endif()
add_definitions( -DUSE_SSE )
endif()
if( APPLE )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
if( APPLE OR UNIX )
# use same settings as in makefiles
add_definitions( -D_LARGE_FILES )
endif()
# workaround to suppress multiple clang warnings
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND VTK_VERSION VERSION_LESS "8.90.0")
add_compile_options(-Wno-inconsistent-missing-override)
endif()
# create base library used by all executables
add_library( readybase STATIC ${BASE_SOURCES} )
target_include_directories( readybase PUBLIC src/readybase src/extern )
target_link_libraries( readybase ${VTK_LIBRARIES} )
if( VTK_VERSION VERSION_GREATER_EQUAL "8.90.0" )
vtk_module_autoinit(
TARGETS readybase
MODULES ${VTK_LIBRARIES}
)
endif()
# create command-line utility
add_executable( ${CMD_NAME} ${CMD_SOURCES} )
target_include_directories( ${CMD_NAME} PRIVATE src/extern/cxxopts-2.2.1 )
target_link_libraries( ${CMD_NAME} readybase ${CMAKE_DL_LIBS})
# create GUI application
add_executable( ${APP_NAME} ${GUI_EXECUTABLE} ${GUI_SOURCES} ${RESOURCES} )
target_include_directories( ${APP_NAME} PRIVATE src/gui resources )
target_link_libraries( ${APP_NAME} readybase ${wxWidgets_LIBRARIES} )
if( APPLE )
# create Info.plist (using Info.plist.in) and PkgInfo files inside .app bundle
add_custom_target( app_bundle
COMMAND sed -e "s/VERSION/${READY_VERSION}/" ${CMAKE_SOURCE_DIR}/resources/Info.plist.in >Ready.app/Contents/Info.plist
COMMAND echo -n "APPLReDy" >Ready.app/Contents/PkgInfo
)
add_dependencies( ${APP_NAME} app_bundle )
# copy *.icns files into Resources directory inside .app bundle
set_source_files_properties( ${CMAKE_SOURCE_DIR}/resources/app.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
set_source_files_properties( ${CMAKE_SOURCE_DIR}/resources/file.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
# remove unreachable functions and data, and don't add debug info (reduces app size by about 12MB)
target_link_libraries( ${APP_NAME} -Wl,-dead_strip -Wl,-S )
# horrible hack to avoid Undefined symbol "___isPlatformVersionAtLeast" using wxMac 3.1.3 on Mojave
# set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a" )
endif()
# avoid security warnings
if( MSVC )
add_definitions( /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS )
endif()
if( CMAKE_COMPILER_IS_GNUCXX )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s" ) # strip release binary, for smaller file size
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl" ) # allow dynamic linking (found needed on Gentoo)
endif()
#----------------------------------------doxygen------------------------------------------------
find_package( Doxygen )
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
endif()
# (if doxygen is found then 'make doc' should produce html documentation of the source code)
#------------------------------------------test-------------------------------------------------
enable_testing()
# Test that we can run rdy and print out the help information
add_test(
NAME rdy_help
COMMAND ${CMD_NAME} -h
)
# Test that we can load each pattern and compile its kernel
foreach(pattern_file ${PATTERN_FILES})
add_test(
NAME load_${pattern_file}
COMMAND ${CMD_NAME} -i "${pattern_file}" -v
)
endforeach()
# Test that we can run one pattern for 100 steps and save it out
add_test(
NAME rdy_run
COMMAND ${CMD_NAME} -i Patterns/CPU-only/grayscott_1D.vti -n 100 -o gs_100.vti -v
)
# And then read it in again
add_test(
NAME rdy_run2
COMMAND ${CMD_NAME} -i gs_100.vti -v
)
#----------------------------------------install------------------------------------------------
# put Ready in the root of the installation folder instead of in "bin"
install( TARGETS ${APP_NAME} ${CMD_NAME} DESTINATION "." )
# install our source files, resource files, pattern files, help files and text files
foreach( source_file ${BASE_SOURCES} ${GUI_SOURCES} ${CMD_SOURCES} ${RESOURCES} ${PATTERN_FILES} ${HELP_FILES} ${OTHER_FILES} )
get_filename_component( path_name "${source_file}" PATH )
install( FILES "${source_file}" DESTINATION ${path_name} )
endforeach()
#----------------------------------------package----------------------------------------------
if( APPLE )
set( CPACK_SYSTEM_NAME "Mac" ) # nicer than "Darwin"
elseif( UNIX )
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( CPACK_SYSTEM_NAME "Linux-64bit" )
else()
set( CPACK_SYSTEM_NAME "Linux-32bit" )
endif()
elseif( WIN32)
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( CPACK_SYSTEM_NAME "Windows-64bit" )
else()
set( CPACK_SYSTEM_NAME "Windows-32bit" )
endif()
endif()
if( NOT USE_SSE )
set( CPACK_SYSTEM_NAME "${CPACK_SYSTEM_NAME}-noSSE" )
endif()
set( CPACK_GENERATOR "ZIP" )
set( CPACK_PACKAGE_VERSION "${READY_VERSION}" )
set( CPACK_SOURCE_GENERATOR "ZIP" )
include( CPack )