# CMakeList.txt : Top-level CMake project file, do global configuration # and include sub-projects here. # cmake_minimum_required (VERSION 3.13) set (CMAKE_CXX_STANDARD 17) project ("cenos-backend" VERSION 2.3.0) set (DETECT_MEMORY_LEAKS FALSE) add_definitions(-DUNICODE -D_UNICODE -DMSVC_EXPRESS) # Get CENOS backend version from git include(version.cmake) #Logging from threads. add_compile_definitions(ELPP_THREAD_SAFE) add_compile_definitions(ELPP_UNICODE) #add_compile_definitions(USER_DLL) add_compile_definitions(ELPP_WINSOCK2) #To make sure easylogger++ does not build exception handler, we make sure not to add any of these two macros in cmakelists or anywhere else. #ELPP_FEATURE_CRASH_LOG #ELPP_FEATURE_ALL #openmp old dirty bastard find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") endif() set(THIRD_PARTY_DIR "${PROJECT_SOURCE_DIR}/third-party") set(TEST_DIR "${PROJECT_SOURCE_DIR}/src/tests") set(bin_destination "${PROJECT_SOURCE_DIR}/bin") # Config file for use of Cmake variables in code # to use variables, include config.h configure_file (config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY) #Visual Leak Detector if (${DETECT_MEMORY_LEAKS}) set(VLD_INC_DIR "C:/Program Files (x86)/Visual Leak Detector/include") find_library(VLD_LIB vld HINTS "C:/Program Files (x86)/Visual Leak Detector/lib/Win64") set(VLD_LIBS ${VLD_LIB}) add_compile_definitions(USE_VLD) endif() #WebSocket set(WEBSOCKETPP_INCLUDE_DIR "${THIRD_PARTY_DIR}/websocketpp") #Freetype set(FREETYPE_DIR "${THIRD_PARTY_DIR}/freetype") #NetGen add_definitions(-DOCCGEOMETRY) add_definitions(-D_AFXDLL) #VTK set(VTK_INC_DIR "${THIRD_PARTY_DIR}/vtk-8.2.0/include/vtk-8.2") set(VTK_LIB_DIR "${THIRD_PARTY_DIR}/vtk-8.2.0/lib") set(VTK_DLL_DIR "${THIRD_PARTY_DIR}/vtk-8.2.0/bin") find_library(vtkIOLegacy_LIB vtkIOLegacy-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkCommonCore_LIB vtkCommonCore-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkRenderingCore_LIB vtkRenderingCore-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkRenderingFreeType_LIB vtkRenderingFreeType-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkFiltersGeneral_LIB vtkFiltersGeneral-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkInteractionStyle_LIB vtkInteractionStyle-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkRenderingOpenGL2_LIB vtkRenderingOpenGL2-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkRenderingGL2PSOpenGL2_LIB vtkRenderingGL2PSOpenGL2-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkIOImage_LIB_LIB vtkIOImage_LIB-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkImagingCore_LIB_LIB vtkImagingCore_LIB-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkInteractionStyle_LIB vtkInteractionStyle-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkCommonExecutionModel_LIB vtkCommonExecutionModel-8.2 HINTS ${VTK_LIB_DIR}) find_library(vtkIOCore_LIB vtkIOCore-8.2 HINTS ${VTK_LIB_DIR}) set(VTK_LIBS ${vtkIOLegacy_LIB} ${vtkCommonCore_LIB} ${vtkCommonExecutionModel_LIB} ${vtkIOCore_LIB} ${vtkRenderingCore_LIB} ${vtkInteractionStyle_LIB} ${vtkRenderingOpenGL2_LIB}) set(VTK_DLL_LIST "${VTK_DLL_DIR}/vtkCommonColor-8.2.dll" "${VTK_DLL_DIR}/vtkCommonComputationalGeometry-8.2.dll" "${VTK_DLL_DIR}/vtkCommonCore-8.2.dll" "${VTK_DLL_DIR}/vtkCommonDataModel-8.2.dll" "${VTK_DLL_DIR}/vtkCommonExecutionModel-8.2.dll" "${VTK_DLL_DIR}/vtkCommonMath-8.2.dll" "${VTK_DLL_DIR}/vtkCommonMisc-8.2.dll" "${VTK_DLL_DIR}/vtkCommonSystem-8.2.dll" "${VTK_DLL_DIR}/vtkCommonTransforms-8.2.dll" "${VTK_DLL_DIR}/vtkDICOMParser-8.2.dll" "${VTK_DLL_DIR}/vtkdoubleconversion-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersCore-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersExtraction-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersGeneral-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersGeometry-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersModeling-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersParallel-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersSources-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersStatistics-8.2.dll" "${VTK_DLL_DIR}/vtkfreetype-8.2.dll" "${VTK_DLL_DIR}/vtkglew-8.2.dll" "${VTK_DLL_DIR}/vtkhdf5-8.2.dll" "${VTK_DLL_DIR}/vtkhdf5_hl-8.2.dll" "${VTK_DLL_DIR}/vtkImagingCore-8.2.dll" "${VTK_DLL_DIR}/vtkImagingFourier-8.2.dll" "${VTK_DLL_DIR}/vtkInteractionStyle-8.2.dll" "${VTK_DLL_DIR}/vtkIOCore-8.2.dll" "${VTK_DLL_DIR}/vtkIOEnSight-8.2.dll" "${VTK_DLL_DIR}/vtkIOGeometry-8.2.dll" "${VTK_DLL_DIR}/vtkIOImage-8.2.dll" "${VTK_DLL_DIR}/vtkIOLegacy-8.2.dll" "${VTK_DLL_DIR}/vtkIONetCDF-8.2.dll" "${VTK_DLL_DIR}/vtkIOParallel-8.2.dll" "${VTK_DLL_DIR}/vtkjpeg-8.2.dll" "${VTK_DLL_DIR}/vtkjsoncpp-8.2.dll" "${VTK_DLL_DIR}/vtklz4-8.2.dll" "${VTK_DLL_DIR}/vtklzma-8.2.dll" "${VTK_DLL_DIR}/vtkmetaio-8.2.dll" "${VTK_DLL_DIR}/vtkNetCDF-8.2.dll" "${VTK_DLL_DIR}/vtkParallelCore-8.2.dll" "${VTK_DLL_DIR}/vtkpng-8.2.dll" "${VTK_DLL_DIR}/vtkRenderingCore-8.2.dll" "${VTK_DLL_DIR}/vtkRenderingFreeType-8.2.dll" "${VTK_DLL_DIR}/vtkRenderingOpenGL2-8.2.dll" "${VTK_DLL_DIR}/vtksys-8.2.dll" "${VTK_DLL_DIR}/vtktiff-8.2.dll" "${VTK_DLL_DIR}/vtkzlib-8.2.dll" "${VTK_DLL_DIR}/vtkFiltersPoints-8.2.dll" ) find_package(OpenCascade NAMES OpenCASCADE opencascade REQUIRED PATHS ${THIRD_PARTY_DIR}/OpenCASCADE ) message(${OpenCASCADE_INCLUDE_DIR}) find_package(Netgen NAMES Netgen REQUIRED PATHS ${THIRD_PARTY_DIR}/netgen) find_library(ngcore_LIB ngcore HINTS ${NETGEN_LIBRARY_DIR}) find_library(nglib_LIB nglib HINTS ${NETGEN_LIBRARY_DIR}) find_library(zlib_LIB zlib HINTS ${NETGEN_LIBRARY_DIR}) set(NETGEN_LIBS ${ngcore_LIB} ${nglib_LIB} ${zlib_LIB}) set(NETGEN_DLL_LIST "${NETGEN_BINARY_DIR}/ngcore.dll" "${NETGEN_BINARY_DIR}/nglib.dll" "${NETGEN_BINARY_DIR}/zlib.dll" ) #GEOMAlgo #OCCT set(GEOMALGO_INC_DIR "${THIRD_PARTY_DIR}/GEOMAlgo/inc") set(GEOMALGO_LIB_DIR "${THIRD_PARTY_DIR}/GEOMAlgo/lib") set(GEOMALGO_DLL_DIR "${THIRD_PARTY_DIR}/GEOMAlgo/bin") find_library(GEOMALGO_LIB GEOMAlgo HINTS ${GEOMALGO_LIB_DIR}) set(GEOMALGO_DLL_LIST "${GEOMALGO_DLL_DIR}/GEOMAlgo.dll" ) #for structured exception handling set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} dbghelp.lib") #rapidYAML set(RYML_INC_DIR "${THIRD_PARTY_DIR}/ryml/include") set(RYML_LIB_DIR "${THIRD_PARTY_DIR}/ryml/lib") find_library(ryml_LIB ryml HINTS ${RYML_LIB_DIR}) find_library(ryml_core_LIB c4core HINTS ${RYML_LIB_DIR}) set(RYML_LIBS ${ryml_LIB} ${ryml_core_LIB}) #removing MS warnings set(_CRT_SECURE_NO_WARNINGS 1) #adds Debug info if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi") endif() #Cenos executable add_executable (cenos-backend) # Add project directories add_subdirectory ("src") add_subdirectory ("src/base") add_subdirectory ("src/vtkForCenos") add_subdirectory ("src/setup") add_subdirectory ("src/setup/getdpsetup") add_subdirectory ("src/NetgenWrapper") add_subdirectory ("src/mesh") add_subdirectory ("src/misc") add_subdirectory ("src/module") add_subdirectory ("src/jobs") add_subdirectory ("src/outputAnalyzer") add_subdirectory ("src/topology") add_subdirectory ("src/templates") add_subdirectory ("src/SteelPhases") enable_testing () add_subdirectory ("src/tests/geometryData") add_subdirectory ("src/tests/meshGenerator") #dd_subdirectory ("src/tests/mesh") add_subdirectory ("src/tests/topology") add_subdirectory ("src/tests/netgenMeshing") #add_subdirectory ("src/tests/mesh") #add_subdirectory ("src/tests/jobSystem") #Install set (CMAKE_VERBOSE_MAKEFILE 1) install(DIRECTORY DESTINATION ${bin_destination}) set(bin_debug_destination "${PROJECT_SOURCE_DIR}/bin_debug") #set(api_destination "${PROJECT_SOURCE_DIR}/../cenos-ui/backend") set(api_destination "${PROJECT_SOURCE_DIR}/app/API") set(api_libs_destination "${api_destination}/libs") set(api_src_destination "${api_destination}/src") set(api_thirdparty_destination "${api_destination}/third-party") set(api_misc_destination "${api_destination}/misc") set(api_setup_destination "${api_destination}/setup") if (MSVC) set(CMAKE_INSTALL_UCRT_LIBRARIES 1) set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ${bin_destination}) include(InstallRequiredSystemLibraries) endif() install(TARGETS cenos-backend meshSender RUNTIME DESTINATION ${bin_destination} LIBRARY DESTINATION ${bin_destination}) # uncomment to install testing targets #install(TARGETS geometryDataTest meshGeneratorTest netgenMeshing RUNTIME DESTINATION ${bin_destination} LIBRARY DESTINATION ${bin_destination}) #MSVC set(MSVC_DLL_DIR "${THIRD_PARTY_DIR}/msvc") # From \Program Files (x86)\Windows Kits\10\Debuggers\x64 set(MSVC_DLL_LIST "${MSVC_DLL_DIR}/dbghelp.dll" "${MSVC_DLL_DIR}/dbgcore.dll" "${MSVC_DLL_DIR}/api-ms-win-downlevel-kernel32-l2-1-0.dll" ) set(OCCT_DLL_LIST "${OpenCASCADE_BINARY_DIR}/TKBRep.dll" "${OpenCASCADE_BINARY_DIR}/TKBO.dll" "${OpenCASCADE_BINARY_DIR}/TKBool.dll" "${OpenCASCADE_BINARY_DIR}/TKCAF.dll" "${OpenCASCADE_BINARY_DIR}/TKCDF.dll" "${OpenCASCADE_BINARY_DIR}/TKernel.dll" "${OpenCASCADE_BINARY_DIR}/TKG2d.dll" "${OpenCASCADE_BINARY_DIR}/TKG3d.dll" "${OpenCASCADE_BINARY_DIR}/TKGeomAlgo.dll" "${OpenCASCADE_BINARY_DIR}/TKGeomBase.dll" "${OpenCASCADE_BINARY_DIR}/TKHLR.dll" "${OpenCASCADE_BINARY_DIR}/TKIVtk.dll" "${OpenCASCADE_BINARY_DIR}/TKIGES.dll" "${OpenCASCADE_BINARY_DIR}/TKLCAF.dll" "${OpenCASCADE_BINARY_DIR}/TKMath.dll" "${OpenCASCADE_BINARY_DIR}/TKMesh.dll" "${OpenCASCADE_BINARY_DIR}/TKPrim.dll" "${OpenCASCADE_BINARY_DIR}/TKService.dll" "${OpenCASCADE_BINARY_DIR}/TKShHealing.dll" "${OpenCASCADE_BINARY_DIR}/TKSTEP.dll" "${OpenCASCADE_BINARY_DIR}/TKIGES.dll" "${OpenCASCADE_BINARY_DIR}/TKSTEP209.dll" "${OpenCASCADE_BINARY_DIR}/TKSTEPAttr.dll" "${OpenCASCADE_BINARY_DIR}/TKSTEPBase.dll" "${OpenCASCADE_BINARY_DIR}/TKSTL.dll" "${OpenCASCADE_BINARY_DIR}/TKTopAlgo.dll" "${OpenCASCADE_BINARY_DIR}/TKV3d.dll" "${OpenCASCADE_BINARY_DIR}/TKVCAF.dll" "${OpenCASCADE_BINARY_DIR}/TKXCAF.dll" "${OpenCASCADE_BINARY_DIR}/TKXDEIGES.dll" "${OpenCASCADE_BINARY_DIR}/TKXDESTEP.dll" "${OpenCASCADE_BINARY_DIR}/TKXSBase.dll" "${OpenCASCADE_BINARY_DIR}/TKMesh.dll" ) install(FILES ${VTK_DLL_LIST} ${OCCT_DLL_LIST} ${GEOMALGO_DLL_LIST} ${FREETYPE_DLL_LIST} ${NETGEN_DLL_LIST} ${MSVC_DLL_LIST} ${CMAKE_BINARY_DIR}/version.json DESTINATION ${bin_destination}) if (${DETECT_MEMORY_LEAKS}) install(FILES "C:/Program Files (x86)/Visual Leak Detector/bin/Win64/vld_x64.dll" DESTINATION ${bin_destination}) endif() install(FILES $ DESTINATION ${bin_debug_destination}) #install (TARGETS setup_lib DESTINATION ${bin_debug_destination}) #In order to do API builds : #1) Add new x64 Release configuration and name it "x64-Release-API" #2) From dropdown menu choose "x64-Release-API" #3) Rebuild all & Install cenos-backend if(${CMAKE_BINARY_DIR} MATCHES "x64-Release-API") #copy API libs install (TARGETS misc_api DESTINATION ${api_libs_destination}) install (TARGETS outputAnalyzer_api DESTINATION ${api_libs_destination}) install (TARGETS logger_api DESTINATION ${api_libs_destination}) install (TARGETS jobs_api DESTINATION ${api_libs_destination}) install (TARGETS mesh_api DESTINATION ${api_libs_destination}) install (TARGETS meshBase_api DESTINATION ${api_libs_destination}) install (TARGETS setupbase_api DESTINATION ${api_libs_destination}) install (TARGETS topology_api DESTINATION ${api_libs_destination}) install (TARGETS base DESTINATION ${api_libs_destination}) install (TARGETS vtkForCenos_api DESTINATION ${api_libs_destination}) install (TARGETS logger_api DESTINATION ${api_libs_destination}) install (FILES ${GEOMALGO_LIB} DESTINATION ${api_libs_destination}) install (FILES ${ngcore_LIB} DESTINATION ${api_libs_destination}) install (FILES ${nglib_LIB} DESTINATION ${api_libs_destination}) install (FILES ${zlib_LIB} DESTINATION ${api_libs_destination}) install (FILES ${zlibstatic_LIB} DESTINATION ${api_libs_destination}) install (FILES ${ryml_LIB} DESTINATION ${api_libs_destination}) install (FILES ${ryml_core_LIB} DESTINATION ${api_libs_destination}) #copy API headers install(DIRECTORY ${THIRD_PARTY_DIR}/easylogging++/ DESTINATION ${api_thirdparty_destination}/easylogging++ FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${OCCT_INC_DIR} DESTINATION ${api_thirdparty_destination}/OpenCASCADE FILES_MATCHING PATTERN "*.h*" PATTERN "*.lxx") install(DIRECTORY ${OCCT_LIB_DIR}/ DESTINATION ${api_libs_destination} FILES_MATCHING PATTERN "*.lib") install(DIRECTORY ${VTK_LIB_DIR}/ DESTINATION ${api_libs_destination} FILES_MATCHING PATTERN "*.lib") install(DIRECTORY ${THIRD_PARTY_DIR}/nlohmann DESTINATION ${api_thirdparty_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${THIRD_PARTY_DIR}/websocketpp DESTINATION ${api_thirdparty_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/misc DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/base DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/setup DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/jobs DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/mesh DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/topology DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/outputAnalyzer DESTINATION ${api_src_destination} FILES_MATCHING PATTERN "*.h*") #copy API sample project install(DIRECTORY "D:/source/sample-plugin" DESTINATION ${api_destination} FILES_MATCHING PATTERN "*.txt" PATTERN "*.h*" PATTERN "*.cpp" PATTERN "*.md") endif(${CMAKE_BINARY_DIR} MATCHES "x64-Release-API")