diff --git a/docs/get-started/platforms/cmake.md b/docs/get-started/platforms/cmake.md index 57b210e65..11e82efbe 100644 --- a/docs/get-started/platforms/cmake.md +++ b/docs/get-started/platforms/cmake.md @@ -81,3 +81,13 @@ FetchContent_MakeAvailable(lv_drivers) # The target "MyFirmware" depends on LVGL, drivers and demos target_link_libraries(MyFirmware PRIVATE lvgl::lvgl lvgl::drivers lvgl::examples) ``` + +# Build shared libraries with CMake +By default, LVGL will be built as a static library (archive). CMake can instead be instructed to build LVGL as shared library (.so/.dll/etc.): +```cmake +set(BUILD_SHARED_LIBS ON) +``` +OR +``` +$ cmake "-DBUILD_SHARED_LIBS=ON" . +``` diff --git a/env_support/cmake/custom.cmake b/env_support/cmake/custom.cmake index cf6f8430c..561698211 100644 --- a/env_support/cmake/custom.cmake +++ b/env_support/cmake/custom.cmake @@ -11,11 +11,19 @@ option(LV_CONF_INCLUDE_SIMPLE option(LV_CONF_PATH "Path defined for lv_conf.h") get_filename_component(LV_CONF_DIR ${LV_CONF_PATH} DIRECTORY) +# Option to build shared libraries (as opposed to static), default: OFF +option(BUILD_SHARED_LIBS "Build shared libraries" OFF) + file(GLOB_RECURSE SOURCES ${LVGL_ROOT_DIR}/src/*.c) file(GLOB_RECURSE EXAMPLE_SOURCES ${LVGL_ROOT_DIR}/examples/*.c) file(GLOB_RECURSE DEMO_SOURCES ${LVGL_ROOT_DIR}/demos/*.c) -add_library(lvgl STATIC ${SOURCES}) +if (BUILD_SHARED_LIBS) + add_library(lvgl SHARED ${SOURCES}) +else() + add_library(lvgl STATIC ${SOURCES}) +endif() + add_library(lvgl::lvgl ALIAS lvgl) add_library(lvgl_examples STATIC ${EXAMPLE_SOURCES}) add_library(lvgl::examples ALIAS lvgl_examples) @@ -59,9 +67,13 @@ set_target_properties( lvgl PROPERTIES OUTPUT_NAME lvgl ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" PUBLIC_HEADER "${LVGL_PUBLIC_HEADERS}") install( TARGETS lvgl ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" + LIBRARY DESTINATION "${LIB_INSTALL_DIR}" + RUNTIME DESTINATION "${LIB_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")