include("${CMAKE_CURRENT_LIST_DIR}/version.cmake") # Option to define LV_LVGL_H_INCLUDE_SIMPLE, default: ON option(LV_LVGL_H_INCLUDE_SIMPLE "Use #include \"lvgl.h\" instead of #include \"../../lvgl.h\"" ON) # Option to define LV_CONF_INCLUDE_SIMPLE, default: ON option(LV_CONF_INCLUDE_SIMPLE "Use #include \"lv_conf.h\" instead of #include \"../../lv_conf.h\"" ON) # Option LV_CONF_PATH, which should be the path for lv_conf.h # If set parent path LV_CONF_DIR is added to includes if( LV_CONF_PATH ) get_filename_component(LV_CONF_DIR ${LV_CONF_PATH} DIRECTORY) endif( LV_CONF_PATH ) # Option to build shared libraries (as opposed to static), default: OFF option(BUILD_SHARED_LIBS "Build shared libraries" OFF) # Set sources used for LVGL components file(GLOB_RECURSE SOURCES ${LVGL_ROOT_DIR}/src/*.c ${LVGL_ROOT_DIR}/src/*.S) file(GLOB_RECURSE EXAMPLE_SOURCES ${LVGL_ROOT_DIR}/examples/*.c) file(GLOB_RECURSE DEMO_SOURCES ${LVGL_ROOT_DIR}/demos/*.c) file(GLOB_RECURSE THORVG_SOURCES ${LVGL_ROOT_DIR}/src/libs/thorvg/*.cpp ${LVGL_ROOT_DIR}/src/others/vg_lite_tvg/*.cpp) # Build LVGL library add_library(lvgl ${SOURCES}) add_library(lvgl::lvgl ALIAS lvgl) target_compile_definitions( lvgl PUBLIC $<$:LV_LVGL_H_INCLUDE_SIMPLE> $<$:LV_CONF_INCLUDE_SIMPLE>) # Add definition of LV_CONF_PATH only if needed if(LV_CONF_PATH) target_compile_definitions(lvgl PUBLIC LV_CONF_PATH=${LV_CONF_PATH}) endif() # Add definition of LV_CONF_SKIP only if needed if(LV_CONF_SKIP) target_compile_definitions(lvgl PUBLIC LV_CONF_SKIP=1) endif() # Include root and optional parent path of LV_CONF_PATH target_include_directories(lvgl SYSTEM PUBLIC ${LVGL_ROOT_DIR} ${LV_CONF_DIR} ${CMAKE_CURRENT_BINARY_DIR}) if(NOT LV_CONF_BUILD_DISABLE_THORVG_INTERNAL) add_library(lvgl_thorvg ${THORVG_SOURCES}) add_library(lvgl::thorvg ALIAS lvgl_thorvg) target_include_directories(lvgl_thorvg SYSTEM PUBLIC ${LVGL_ROOT_DIR}/src/libs/thorvg) target_link_libraries(lvgl_thorvg PUBLIC lvgl) endif() if(NOT (CMAKE_C_COMPILER_ID STREQUAL "MSVC")) set_source_files_properties(${LVGL_ROOT_DIR}/src/others/vg_lite_tvg/vg_lite_tvg.cpp PROPERTIES COMPILE_FLAGS -Wunused-parameter) endif() # Build LVGL example library if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES) add_library(lvgl_examples ${EXAMPLE_SOURCES}) add_library(lvgl::examples ALIAS lvgl_examples) target_include_directories(lvgl_examples SYSTEM PUBLIC ${LVGL_ROOT_DIR}/examples) target_link_libraries(lvgl_examples PUBLIC lvgl) endif() # Build LVGL demos library if(NOT LV_CONF_BUILD_DISABLE_DEMOS) add_library(lvgl_demos ${DEMO_SOURCES}) add_library(lvgl::demos ALIAS lvgl_demos) target_include_directories(lvgl_demos SYSTEM PUBLIC ${LVGL_ROOT_DIR}/demos) target_link_libraries(lvgl_demos PUBLIC lvgl) endif() # Library and headers can be installed to system using make install file(GLOB LVGL_PUBLIC_HEADERS "${LVGL_ROOT_DIR}/lvgl.h" "${LVGL_ROOT_DIR}/lv_version.h") if(NOT LV_CONF_SKIP) if (LV_CONF_PATH) list(APPEND LVGL_PUBLIC_HEADERS ${LV_CONF_PATH}) else() list(APPEND LVGL_PUBLIC_HEADERS "${CMAKE_SOURCE_DIR}/lv_conf.h") endif() endif() if("${LIB_INSTALL_DIR}" STREQUAL "") set(LIB_INSTALL_DIR "lib") endif() if("${RUNTIME_INSTALL_DIR}" STREQUAL "") set(RUNTIME_INSTALL_DIR "bin") endif() if("${INC_INSTALL_DIR}" STREQUAL "") set(INC_INSTALL_DIR "include/lvgl") endif() set(CMAKE_INSTALL_PREFIX .) #Install headers install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src" DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/" FILES_MATCHING PATTERN "*.h") # Install headers from the LVGL_PUBLIC_HEADERS variable install( FILES ${LVGL_PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/" ) # install example headers if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES) install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/examples" DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/" FILES_MATCHING PATTERN "*.h") endif() # install demo headers if(NOT LV_CONF_BUILD_DISABLE_DEMOS) install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/demos" DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/" FILES_MATCHING PATTERN "*.h") endif() configure_file("${LVGL_ROOT_DIR}/lvgl.pc.in" ${CMAKE_CURRENT_BINARY_DIR}/lvgl.pc @ONLY) configure_file("${LVGL_ROOT_DIR}/lv_version.h.in" ${CMAKE_CURRENT_BINARY_DIR}/lv_version.h @ONLY) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/lvgl.pc" DESTINATION "${LIB_INSTALL_DIR}/pkgconfig/") # Install library set_target_properties( lvgl PROPERTIES OUTPUT_NAME lvgl VERSION ${LVGL_VERSION} SOVERSION ${LVGL_SOVERSION} ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}") install( TARGETS lvgl ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" LIBRARY DESTINATION "${LIB_INSTALL_DIR}" RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}") # Install library thorvg if(NOT LV_CONF_BUILD_DISABLE_THORVG_INTERNAL) set_target_properties( lvgl_thorvg PROPERTIES OUTPUT_NAME lvgl_thorvg VERSION ${LVGL_VERSION} SOVERSION ${LVGL_SOVERSION} ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}") install( TARGETS lvgl_thorvg ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" LIBRARY DESTINATION "${LIB_INSTALL_DIR}" RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}") endif() # Install library demos if(NOT LV_CONF_BUILD_DISABLE_DEMOS) set_target_properties( lvgl_demos PROPERTIES OUTPUT_NAME lvgl_demos VERSION ${LVGL_VERSION} SOVERSION ${LVGL_SOVERSION} ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}") install( TARGETS lvgl_demos ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" LIBRARY DESTINATION "${LIB_INSTALL_DIR}" RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}") endif() #install library examples if(NOT LV_CONF_BUILD_DISABLE_EXAMPLES) set_target_properties( lvgl_examples PROPERTIES OUTPUT_NAME lvgl_examples VERSION ${LVGL_VERSION} SOVERSION ${LVGL_SOVERSION} ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}") install( TARGETS lvgl_examples ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" LIBRARY DESTINATION "${LIB_INSTALL_DIR}" RUNTIME DESTINATION "${RUNTIME_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}") endif()