custom.cmake 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. include("${CMAKE_CURRENT_LIST_DIR}/version.cmake")
  2. # Option to define LV_LVGL_H_INCLUDE_SIMPLE, default: ON
  3. option(LV_LVGL_H_INCLUDE_SIMPLE
  4. "Use #include \"lvgl.h\" instead of #include \"../../lvgl.h\"" ON)
  5. # Option to define LV_CONF_INCLUDE_SIMPLE, default: ON
  6. option(LV_CONF_INCLUDE_SIMPLE
  7. "Use #include \"lv_conf.h\" instead of #include \"../../lv_conf.h\"" ON)
  8. # Option LV_CONF_PATH, which should be the path for lv_conf.h
  9. # If set parent path LV_CONF_DIR is added to includes
  10. if( LV_CONF_PATH )
  11. get_filename_component(LV_CONF_DIR ${LV_CONF_PATH} DIRECTORY)
  12. endif( LV_CONF_PATH )
  13. # Option to build shared libraries (as opposed to static), default: OFF
  14. option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
  15. # Set sources used for LVGL components
  16. file(GLOB_RECURSE SOURCES ${LVGL_ROOT_DIR}/src/*.c ${LVGL_ROOT_DIR}/src/*.S)
  17. file(GLOB_RECURSE EXAMPLE_SOURCES ${LVGL_ROOT_DIR}/examples/*.c)
  18. file(GLOB_RECURSE DEMO_SOURCES ${LVGL_ROOT_DIR}/demos/*.c)
  19. file(GLOB_RECURSE THORVG_SOURCES ${LVGL_ROOT_DIR}/src/libs/thorvg/*.cpp ${LVGL_ROOT_DIR}/src/others/vg_lite_tvg/*.cpp)
  20. # Build LVGL library
  21. add_library(lvgl ${SOURCES})
  22. add_library(lvgl::lvgl ALIAS lvgl)
  23. target_compile_definitions(
  24. lvgl PUBLIC $<$<BOOL:${LV_LVGL_H_INCLUDE_SIMPLE}>:LV_LVGL_H_INCLUDE_SIMPLE>
  25. $<$<BOOL:${LV_CONF_INCLUDE_SIMPLE}>:LV_CONF_INCLUDE_SIMPLE>)
  26. # Add definition of LV_CONF_PATH only if needed
  27. if(LV_CONF_PATH)
  28. target_compile_definitions(lvgl PUBLIC LV_CONF_PATH=${LV_CONF_PATH})
  29. endif()
  30. # Add definition of LV_CONF_SKIP only if needed
  31. if(LV_CONF_SKIP)
  32. target_compile_definitions(lvgl PUBLIC LV_CONF_SKIP=1)
  33. endif()
  34. # Include root and optional parent path of LV_CONF_PATH
  35. target_include_directories(lvgl SYSTEM PUBLIC ${LVGL_ROOT_DIR} ${LV_CONF_DIR} ${CMAKE_CURRENT_BINARY_DIR})
  36. if(NOT LV_CONF_BUILD_DISABLE_THORVG_INTERNAL)
  37. add_library(lvgl_thorvg ${THORVG_SOURCES})
  38. add_library(lvgl::thorvg ALIAS lvgl_thorvg)
  39. target_include_directories(lvgl_thorvg SYSTEM PUBLIC ${LVGL_ROOT_DIR}/src/libs/thorvg)
  40. target_link_libraries(lvgl_thorvg PUBLIC lvgl)
  41. endif()
  42. if(NOT (CMAKE_C_COMPILER_ID STREQUAL "MSVC"))
  43. set_source_files_properties(${LVGL_ROOT_DIR}/src/others/vg_lite_tvg/vg_lite_tvg.cpp PROPERTIES COMPILE_FLAGS -Wunused-parameter)
  44. endif()
  45. # Build LVGL example library
  46. if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES)
  47. add_library(lvgl_examples ${EXAMPLE_SOURCES})
  48. add_library(lvgl::examples ALIAS lvgl_examples)
  49. target_include_directories(lvgl_examples SYSTEM PUBLIC ${LVGL_ROOT_DIR}/examples)
  50. target_link_libraries(lvgl_examples PUBLIC lvgl)
  51. endif()
  52. # Build LVGL demos library
  53. if(NOT LV_CONF_BUILD_DISABLE_DEMOS)
  54. add_library(lvgl_demos ${DEMO_SOURCES})
  55. add_library(lvgl::demos ALIAS lvgl_demos)
  56. target_include_directories(lvgl_demos SYSTEM PUBLIC ${LVGL_ROOT_DIR}/demos)
  57. target_link_libraries(lvgl_demos PUBLIC lvgl)
  58. endif()
  59. # Library and headers can be installed to system using make install
  60. file(GLOB LVGL_PUBLIC_HEADERS
  61. "${LVGL_ROOT_DIR}/lvgl.h"
  62. "${LVGL_ROOT_DIR}/lv_version.h")
  63. if(NOT LV_CONF_SKIP)
  64. if (LV_CONF_PATH)
  65. list(APPEND LVGL_PUBLIC_HEADERS
  66. ${LV_CONF_PATH})
  67. else()
  68. list(APPEND LVGL_PUBLIC_HEADERS
  69. "${CMAKE_SOURCE_DIR}/lv_conf.h")
  70. endif()
  71. endif()
  72. if("${LIB_INSTALL_DIR}" STREQUAL "")
  73. set(LIB_INSTALL_DIR "lib")
  74. endif()
  75. if("${RUNTIME_INSTALL_DIR}" STREQUAL "")
  76. set(RUNTIME_INSTALL_DIR "bin")
  77. endif()
  78. if("${INC_INSTALL_DIR}" STREQUAL "")
  79. set(INC_INSTALL_DIR "include/lvgl")
  80. endif()
  81. #Install headers
  82. install(
  83. DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src"
  84. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  85. FILES_MATCHING
  86. PATTERN "*.h")
  87. # Install headers from the LVGL_PUBLIC_HEADERS variable
  88. install(
  89. FILES ${LVGL_PUBLIC_HEADERS}
  90. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  91. )
  92. # install example headers
  93. if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES)
  94. install(
  95. DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/examples"
  96. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  97. FILES_MATCHING
  98. PATTERN "*.h")
  99. endif()
  100. # install demo headers
  101. if(NOT LV_CONF_BUILD_DISABLE_DEMOS)
  102. install(
  103. DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/demos"
  104. DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  105. FILES_MATCHING
  106. PATTERN "*.h")
  107. endif()
  108. configure_file("${LVGL_ROOT_DIR}/lvgl.pc.in" lvgl.pc @ONLY)
  109. configure_file("${LVGL_ROOT_DIR}/lv_version.h.in" lv_version.h @ONLY)
  110. install(
  111. FILES "${CMAKE_CURRENT_BINARY_DIR}/lvgl.pc"
  112. DESTINATION "${LIB_INSTALL_DIR}/pkgconfig/")
  113. # Install library
  114. set_target_properties(
  115. lvgl
  116. PROPERTIES OUTPUT_NAME lvgl
  117. VERSION ${LVGL_VERSION}
  118. SOVERSION ${LVGL_SOVERSION}
  119. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  120. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  121. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  122. PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}")
  123. install(
  124. TARGETS lvgl
  125. ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  126. LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  127. RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}"
  128. PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")
  129. # Install library thorvg
  130. if(NOT LV_CONF_BUILD_DISABLE_THORVG_INTERNAL)
  131. set_target_properties(
  132. lvgl_thorvg
  133. PROPERTIES OUTPUT_NAME lvgl_thorvg
  134. VERSION ${LVGL_VERSION}
  135. SOVERSION ${LVGL_SOVERSION}
  136. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  137. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  138. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  139. PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}")
  140. install(
  141. TARGETS lvgl_thorvg
  142. ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  143. LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  144. RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}"
  145. PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")
  146. endif()
  147. # Install library demos
  148. if(NOT LV_CONF_BUILD_DISABLE_DEMOS)
  149. set_target_properties(
  150. lvgl_demos
  151. PROPERTIES OUTPUT_NAME lvgl_demos
  152. VERSION ${LVGL_VERSION}
  153. SOVERSION ${LVGL_SOVERSION}
  154. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  155. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  156. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  157. PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}")
  158. install(
  159. TARGETS lvgl_demos
  160. ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  161. LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  162. RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}"
  163. PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")
  164. endif()
  165. #install library examples
  166. if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES)
  167. set_target_properties(
  168. lvgl_examples
  169. PROPERTIES OUTPUT_NAME lvgl_examples
  170. VERSION ${LVGL_VERSION}
  171. SOVERSION ${LVGL_SOVERSION}
  172. ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  173. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
  174. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  175. PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}")
  176. install(
  177. TARGETS lvgl_examples
  178. ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  179. LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  180. RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}"
  181. PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")
  182. endif()