Эх сурвалжийг харах

Update CMake for Mosek.

Former-commit-id: f73a8f22127dc4781fbca6d6f95592458c107fd1
Jérémie Dumas 7 жил өмнө
parent
commit
02a03d36bb

+ 27 - 18
shared/cmake/FindMOSEK.cmake

@@ -7,26 +7,35 @@
 # MOSEK_LIBRARIES       - Link these to use MOSEK
 #
 
-FIND_PATH(MOSEK_INCLUDE_DIR mosek.h
-  PATHS 
-  /usr/local/mosek/7/tools/platform/osx64x86/h/
-  /usr/local/mosek/8/tools/platform/osx64x86/h/
-    )
+# Hardcoded search paths
+set(SEARCH_PATHS
+  /usr/local/mosek/7/tools/platform/osx64x86/
+  /usr/local/mosek/8/tools/platform/osx64x86/
+  /opt/mosek/7/tools/platform/linux64x86/
+)
 
-SET(SEARCH_PATHS "${MOSEK_INCLUDE_DIR}" "${MOSEK_INCLUDE_DIR}/../bin" "${MOSEK_INCLUDE_DIR}/lib")
+find_path(MOSEK_INCLUDE_DIR mosek.h
+  PATHS ${SEARCH_PATHS}
+  PATH_SUFFIXES h
+)
 
 set(MOSEK_LIBRARIES)
-FIND_LIBRARY(MOSEK_LIBRARIES  NAMES mosek64 PATHS ${SEARCH_PATHS} NO_DEFAULT_PATH DPATH_SUFFIXES a lib dylib)
+find_library(MOSEK_LIBRARIES NAMES mosek64
+  HINT
+    "${MOSEK_INCLUDE_DIR}"
+    "${MOSEK_INCLUDE_DIR}/../bin"
+    "${MOSEK_INCLUDE_DIR}/lib"
+  PATHS
+    ${SEARCH_PATHS}
+  NO_DEFAULT_PATH
+  PATH_SUFFIXES a bin lib dylib)
 
-if(MOSEK_LIBRARIES AND MOSEK_INCLUDE_DIR)
-message(STATUS "Found mosek: ${MOSEK_LIBRARIES}")
-set(MOSEK_FOUND TRUE)
-endif(MOSEK_LIBRARIES AND MOSEK_INCLUDE_DIR)
+# Check that Mosek was successfully found
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+  MOSEK DEFAULT_MSG MOSEK_LIBRARIES MOSEK_INCLUDE_DIR
+)
+set(MOSEK_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR})
 
-IF (MOSEK_FOUND)
-   message(STATUS "Found MOSEK: ${MOSEK_INCLUDE_DIR}")
-   SET(MOSEK_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR} )
-ELSE (MOSEK_FOUND)
-    #add_definitions(-DIGL_NO_MOSEK)
-    #message(WARNING "could NOT find MOSEK")
-ENDIF (MOSEK_FOUND)
+# Hide variables from CMake-Gui options
+mark_as_advanced(MOSEK_LIBRARIES MOSEK_INCLUDE_DIRS MOSEK_INCLUDE_DIR)

+ 7 - 12
shared/cmake/libigl.cmake

@@ -284,18 +284,13 @@ endif()
 
 ################################################################################
 ### Compile the mosek part ###
-# if(LIBIGL_WITH_MOSEK)
-#   find_package(MOSEK REQUIRED)
-#   list(APPEND LIBIGL_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR})
-#   list(APPEND LIBIGL_MOSEK_EXTRA_LIBRARIES ${MOSEK_LIBRARIES})
-#   list(APPEND LIBIGL_EXTRA_LIBRARIES ${LIBIGL_MOSEK_EXTRA_LIBRARIES})
-#   if(LIBIGL_USE_STATIC_LIBRARY)
-#     compile_igl_module("mosek" "")
-#     target_include_directories(igl_mosek PRIVATE ${MOSEK_INCLUDE_DIR})
-#   endif()
-# else()
-#   list(APPEND LIBIGL_DEFINITIONS "-DIGL_NO_MOSEK")
-# endif()
+if(LIBIGL_WITH_MOSEK)
+  find_package(MOSEK REQUIRED)
+  compile_igl_module("mosek" "")
+  target_link_libraries(igl_mosek ${IGL_SCOPE} ${MOSEK_LIBRARIES})
+  target_include_directories(igl_mosek ${IGL_SCOPE} ${MOSEK_INCLUDE_DIRS})
+  target_compile_definitions(igl_mosek ${IGL_SCOPE} -DLIBIGL_WITH_MOSEK)
+endif()
 
 ################################################################################
 ### Compile the opengl parts ###

+ 2 - 2
tutorial/403_BoundedBiharmonicWeights/CMakeLists.txt

@@ -3,6 +3,6 @@ project(403_BoundedBiharmonicWeights)
 
 add_executable(${PROJECT_NAME}_bin main.cpp)
 target_link_libraries(${PROJECT_NAME}_bin igl::core igl::viewer tutorials)
-if(LIBIGL_WITH_MOSEK)
-  target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_MOSEK_EXTRA_LIBRARIES})
+if(TARGET igl::mosek)
+  target_link_libraries(${PROJECT_NAME}_bin igl::mosek)
 endif()

+ 7 - 10
tutorial/403_BoundedBiharmonicWeights/main.cpp

@@ -1,13 +1,10 @@
-// If you don't have mosek installed and don't want to install it. Then
-// uncomment the following six lines.  Don't use static library for this
-// example because of Mosek complications
-//
-//#define IGL_NO_MOSEK
-//#ifdef IGL_NO_MOSEK
-//#ifdef IGL_STATIC_LIBRARY
-//#undef IGL_STATIC_LIBRARY
-//#endif
-//#endif
+// Because of Mosek complications, we don't use static library if Mosek is used.
+#ifdef LIBIGL_WITH_MOSEK
+#ifdef IGL_STATIC_LIBRARY
+#undef IGL_STATIC_LIBRARY
+#endif
+#endif
+
 #include <igl/boundary_conditions.h>
 #include <igl/colon.h>
 #include <igl/column_to_quats.h>

+ 7 - 4
tutorial/CMakeLists.txt

@@ -3,19 +3,23 @@ project(libigl_tutorials)
 message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
 message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
 
+### conditionally compile certain modules depending on libraries found on the system
+list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../shared/cmake)
+find_package(CGAL QUIET COMPONENTS Core)
+find_package(MATLAB QUIET)
+find_package(MOSEK)
+
 ### libIGL options: choose between header only and compiled static library
 option(LIBIGL_USE_STATIC_LIBRARY "Use LibIGL as static library" OFF)
 option(LIBIGL_WITH_VIEWER      "Use OpenGL viewer"  ON)
 option(LIBIGL_WITH_NANOGUI     "Use Nanogui menu"   OFF)
 
 ### libIGL options: choose your dependencies (by default everything is OFF, in this example we need the viewer)
-find_package(CGAL QUIET COMPONENTS Core)
 option(LIBIGL_WITH_CGAL             "Use CGAL"           "${CGAL_FOUND}")
 option(LIBIGL_WITH_COMISO           "Use CoMiso"         ON)
 option(LIBIGL_WITH_CORK             "Use CORK"           OFF)
 option(LIBIGL_WITH_EMBREE           "Use Embree"         ON)
 option(LIBIGL_WITH_LIM              "Use LIM"            ON)
-find_package(MATLAB QUIET)
 option(LIBIGL_WITH_MATLAB           "Use Matlab"         "${MATLAB_FOUND}")
 option(LIBIGL_WITH_MOSEK            "Use MOSEK"          "${MOSEK_FOUND}")
 option(LIBIGL_WITH_OPENGL           "Use OpenGL"         ON)
@@ -26,8 +30,7 @@ option(LIBIGL_WITH_TRIANGLE         "Use Triangle"       ON)
 option(LIBIGL_WITH_XML              "Use XML"            ON)
 ### End
 
-### Adding libIGL: choose the path to your local copy libIGL ###
-list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../shared/cmake)
+### Adding libIGL: choose the path to your local copy libIGL
 include(libigl)
 
 ### Output directories