2
0

CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. cmake_minimum_required(VERSION 3.1)
  2. project(libigl_tests)
  3. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake)
  4. ### Adding libIGL: choose the path to your local copy libIGL
  5. if(NOT TARGET igl::core)
  6. include(libigl)
  7. else()
  8. include(LibiglDownloadExternal)
  9. endif()
  10. ### Download data
  11. igl_download_test_data()
  12. set(IGL_TEST_DATA ${LIBIGL_EXTERNAL}/../tests/data)
  13. ### Download Catch2 unit test framework
  14. igl_download_catch2()
  15. list(APPEND CMAKE_MODULE_PATH ${LIBIGL_EXTERNAL}/catch2/contrib)
  16. # Add catch2
  17. add_subdirectory(${LIBIGL_EXTERNAL}/catch2 catch2)
  18. # Create test executable
  19. add_executable(libigl_tests main.cpp test_common.h)
  20. target_link_libraries(libigl_tests PUBLIC igl::core Catch2::Catch2)
  21. target_include_directories(libigl_tests PUBLIC ${CMAKE_CURRENT_LIST_DIR})
  22. target_compile_definitions(libigl_tests PUBLIC CATCH_CONFIG_ENABLE_BENCHMARKING)
  23. # Set DATA_DIR definition
  24. set(DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/data/")
  25. target_compile_definitions(libigl_tests PUBLIC -DLIBIGL_DATA_DIR="${IGL_TEST_DATA}")
  26. # Silencing some compile warnings
  27. if(MSVC)
  28. target_compile_options(libigl_tests PRIVATE
  29. # Type conversion warnings. These can be fixed with some effort and possibly more verbose code.
  30. /wd4267 # conversion from 'size_t' to 'type', possible loss of data
  31. /wd4244 # conversion from 'type1' to 'type2', possible loss of data
  32. /wd4018 # signed/unsigned mismatch
  33. /wd4305 # truncation from 'double' to 'float'
  34. )
  35. endif(MSVC)
  36. # Process code in each subdirectories: add in decreasing order of complexity
  37. # (last added will run first and those should be the fastest tests)
  38. if(LIBIGL_WITH_MOSEK)
  39. file(GLOB TEST_SRC_FILES ./include/igl/mosek/*.cpp)
  40. file(GLOB TEST_INC_FILES ./include/igl/mosek/*.h ./include/igl/mosek/*.inl)
  41. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  42. target_link_libraries(libigl_tests PUBLIC igl::mosek)
  43. # fix mosek
  44. IF(APPLE)
  45. INCLUDE(../cmake/OSXFixDylibReferences.cmake)
  46. OSX_FIX_DYLIB_REFERENCES(libigl_tests "${MOSEK_LIBRARIES}")
  47. ENDIF()
  48. endif()
  49. if(LIBIGL_WITH_CGAL)
  50. file(GLOB TEST_SRC_FILES ./include/igl/copyleft/boolean/*.cpp ./include/igl/copyleft/cgal/*.cpp)
  51. file(GLOB TEST_INC_FILES ./include/igl/copyleft/boolean/*.h ./include/igl/copyleft/cgal/*.h ./include/igl/copyleft/boolean/*.inl ./include/igl/copyleft/cgal/*.inl)
  52. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  53. target_link_libraries(libigl_tests PUBLIC igl::cgal)
  54. igl_copy_cgal_dll(libigl_tests)
  55. endif()
  56. if(LIBIGL_WITH_TETGEN)
  57. file(GLOB TEST_SRC_FILES ./include/igl/copyleft/tetgen/*.cpp)
  58. file(GLOB TEST_INC_FILES ./include/igl/copyleft/tetgen/*.h ./include/igl/copyleft/tetgen/*.inl)
  59. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  60. target_link_libraries(libigl_tests PUBLIC igl::tetgen)
  61. endif()
  62. if(LIBIGL_WITH_COMISO)
  63. file(GLOB TEST_SRC_FILES ./include/igl/copyleft/comiso/*.cpp)
  64. file(GLOB TEST_INC_FILES ./include/igl/copyleft/comiso/*.h ./include/igl/copyleft/comiso/*.inl)
  65. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  66. target_link_libraries(libigl_tests PUBLIC igl::comiso)
  67. endif()
  68. if(LIBIGL_WITH_EMBREE)
  69. file(GLOB TEST_SRC_FILES ./include/igl/embree/*.cpp)
  70. file(GLOB TEST_INC_FILES ./include/igl/embree/*.h ./include/igl/embree/*.inl)
  71. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  72. target_link_libraries(libigl_tests PUBLIC igl::embree)
  73. endif()
  74. if(LIBIGL_WITH_PREDICATES AND LIBIGL_WITH_TRIANGLE)
  75. file(GLOB TEST_SRC_FILES ./include/igl/predicates/*.cpp)
  76. file(GLOB TEST_INC_FILES ./include/igl/predicates/*.h ./include/igl/predicates/*.inl)
  77. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  78. target_link_libraries(libigl_tests PUBLIC igl::predicates igl::triangle)
  79. endif()
  80. if(LIBIGL_WITH_TRIANGLE)
  81. file(GLOB TEST_SRC_FILES ./include/igl/triangle/*.cpp)
  82. file(GLOB TEST_INC_FILES ./include/igl/triangle/*.h ./include/igl/triangle/*.inl)
  83. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  84. target_link_libraries(libigl_tests PUBLIC igl::triangle)
  85. endif()
  86. file(GLOB TEST_SRC_FILES ./include/igl/*.cpp)
  87. file(GLOB TEST_INC_FILES ./include/igl/*.h ./include/igl/*.inl)
  88. target_sources(libigl_tests PRIVATE ${TEST_SRC_FILES} ${TEST_INC_FILES})
  89. # Register tests
  90. set(PARSE_CATCH_TESTS_ADD_TO_CONFIGURE_DEPENDS ON)
  91. include(Catch)
  92. catch_discover_tests(libigl_tests)