custom.cmake 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # Option to define LV_LVGL_H_INCLUDE_SIMPLE, default: ON
  2. option(LV_LVGL_H_INCLUDE_SIMPLE
  3. "Use #include \"lvgl.h\" instead of #include \"../../lvgl.h\"" ON)
  4. # Option to define LV_CONF_INCLUDE_SIMPLE, default: ON
  5. option(LV_CONF_INCLUDE_SIMPLE
  6. "Simple include of \"lv_conf.h\" and \"lv_drv_conf.h\"" ON)
  7. # Option to set LV_CONF_PATH, if set parent path LV_CONF_DIR is added to
  8. # includes
  9. option(LV_CONF_PATH "Path defined for lv_conf.h")
  10. get_filename_component(LV_CONF_DIR ${LV_CONF_PATH} DIRECTORY)
  11. # Option to build shared libraries (as opposed to static), default: OFF
  12. option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
  13. file(GLOB_RECURSE SOURCES ${LVGL_ROOT_DIR}/src/*.c)
  14. file(GLOB_RECURSE EXAMPLE_SOURCES ${LVGL_ROOT_DIR}/examples/*.c)
  15. file(GLOB_RECURSE DEMO_SOURCES ${LVGL_ROOT_DIR}/demos/*.c)
  16. if (BUILD_SHARED_LIBS)
  17. add_library(lvgl SHARED ${SOURCES})
  18. else()
  19. add_library(lvgl STATIC ${SOURCES})
  20. endif()
  21. add_library(lvgl::lvgl ALIAS lvgl)
  22. add_library(lvgl_examples STATIC ${EXAMPLE_SOURCES})
  23. add_library(lvgl::examples ALIAS lvgl_examples)
  24. add_library(lvgl_demos STATIC ${DEMO_SOURCES})
  25. add_library(lvgl::demos ALIAS lvgl_demos)
  26. target_compile_definitions(
  27. lvgl PUBLIC $<$<BOOL:${LV_LVGL_H_INCLUDE_SIMPLE}>:LV_LVGL_H_INCLUDE_SIMPLE>
  28. $<$<BOOL:${LV_CONF_INCLUDE_SIMPLE}>:LV_CONF_INCLUDE_SIMPLE>)
  29. # Include root and optional parent path of LV_CONF_PATH
  30. target_include_directories(lvgl SYSTEM PUBLIC ${LVGL_ROOT_DIR} ${LV_CONF_DIR})
  31. # Include /examples folder
  32. target_include_directories(lvgl_examples SYSTEM
  33. PUBLIC ${LVGL_ROOT_DIR}/examples)
  34. target_include_directories(lvgl_demos SYSTEM
  35. PUBLIC ${LVGL_ROOT_DIR}/demos)
  36. target_link_libraries(lvgl_examples PUBLIC lvgl)
  37. target_link_libraries(lvgl_demos PUBLIC lvgl)
  38. # Lbrary and headers can be installed to system using make install
  39. file(GLOB LVGL_PUBLIC_HEADERS "${CMAKE_SOURCE_DIR}/lv_conf.h"
  40. "${CMAKE_SOURCE_DIR}/lvgl.h")
  41. if("${LIB_INSTALL_DIR}" STREQUAL "")
  42. set(LIB_INSTALL_DIR "lib")
  43. endif()
  44. if("${INC_INSTALL_DIR}" STREQUAL "")
  45. set(INC_INSTALL_DIR "include/lvgl")
  46. endif()
  47. install(
  48. DIRECTORY "${CMAKE_SOURCE_DIR}/src"
  49. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  50. FILES_MATCHING
  51. PATTERN "*.h")
  52. install(
  53. FILES "${LV_CONF_PATH}"
  54. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/../"
  55. RENAME "lv_conf.h"
  56. OPTIONAL)
  57. set_target_properties(
  58. lvgl
  59. PROPERTIES OUTPUT_NAME lvgl
  60. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  61. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  62. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  63. PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}")
  64. install(
  65. TARGETS lvgl
  66. ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  67. LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  68. RUNTIME DESTINATION "${LIB_INSTALL_DIR}"
  69. PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")