linuxOS_D21X/source/artinchip/awtk-ui/CMakeLists.txt
2024-11-29 16:33:21 +08:00

376 lines
11 KiB
CMake

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
# project name
project(awtk-ui)
set(PROJ awtk)
# Suppress cmake unused warning
set(ignore ${BUILD_DOC} ${BUILD_DOCS} ${BUILD_EXAMPLE} ${BUILD_EXAMPLES}
${BUILD_SHARED_LIBS}${BUILD_TEST}${BUILD_TESTING}${BUILD_TESTS})
# Add compile option
add_compile_options(-fPIC)
add_compile_options(-Wall)
set(NANOVG_BACKEND "AGGE")
# set awtk path
set(TK_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/awtk)
# set google pinyin
set(INPUT_ENGINE "pinyin")
# set(INPUT_ENGINE "null")
### build config
add_definitions(-DLINUX)
add_definitions(-DHAS_STD_MALLOC)
add_definitions(-DHAS_STDIO)
add_definitions(-DHAS_FAST_MEMCPY)
add_definitions(-DWITH_VGCANVAS)
add_definitions(-DWITH_UNICODE_BREAK)
add_definitions(-DLOAD_ASSET_WITH_MMAP=1)
add_definitions(-DWITH_SOCKET=1)
add_definitions(-DWITH_ASSET_LOADER)
add_definitions(-DWITH_FS_RES)
add_definitions(-DHAS_GET_TIME_US64=1)
add_definitions(-DSTBTT_STATIC)
add_definitions(-DSTB_IMAGE_STATIC)
add_definitions(-DWITH_STB_IMAGE)
add_definitions(-DWITH_STB_FONT)
add_definitions(-DWITH_TEXT_BIDI=1)
add_definitions(-DAPP_TYPE=APP_MOBILE)
add_definitions(-DLINUX_FB)
add_definitions(-DWITH_NANOVG_AGGE)
add_definitions(-DWITH_LINUX_FB)
add_definitions(-DWITH_FAST_LCD_PORTRAIT)
add_definitions(-DHAS_PTHREAD)
add_definitions(-DWITH_DATA_READER_WRITER)
add_definitions(-DWITH_BITMAP_BGRA)
add_definitions(-DWITH_G2D)
add_definitions(-DWITH_DEC_IMAGE)
add_definitions(-DWITH_AIC_G2D)
add_definitions(-DTK_NDEBUG)
if (INPUT_ENGINE STREQUAL "pinyin")
add_definitions(-DWITH_IME_PINYIN)
else()
add_definitions(-DWITH_IME_NULL)
endif()
### all source file
set(SOURCE_FILES "")
# add linux fb root
set(TK_LINUX_FB_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/awtk-linux-fb)
set(SOURCE_FILES ${SOURCE_FILES}
${TK_LINUX_FB_ROOT}/awtk-port/input_thread/input_thread.c
${TK_LINUX_FB_ROOT}/awtk-port/input_thread/input_dispatcher.c
${TK_LINUX_FB_ROOT}/awtk-port/input_thread/mouse_thread.c
${TK_LINUX_FB_ROOT}/awtk-port/lcd_linux/lcd_linux_fb.c
${TK_LINUX_FB_ROOT}/awtk-port/lcd_linux/lcd_mem_others.c
${TK_LINUX_FB_ROOT}/awtk-port/devices.c
${TK_LINUX_FB_ROOT}/awtk-port/main_loop_linux.c
)
# add lcd
set(LCD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/awtk-linux-fb/awtk-port/lcd_linux)
set(SOURCE_FILES ${SOURCE_FILES}
${LCD_DIR}/lcd_linux_fb.c
)
# add input
set(INPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/awtk-linux-fb/awtk-port/input_thread)
set(SOURCE_FILES ${SOURCE_FILES}
${INPUT_DIR}/input_dispatcher.c
${INPUT_DIR}/touch_thread.c
)
# add agge
if (NANOVG_BACKEND STREQUAL "AGGE")
set(AGGE_ROOT ${TK_ROOT}/3rd/agge)
aux_source_directory(${AGGE_ROOT}/agge SRC)
set(SOURCE_FILES ${SOURCE_FILES} ${SRC})
endif()
# add nanovg
if (NANOVG_BACKEND STREQUAL "AGGE")
set(NANOVG_ROOT ${TK_ROOT}/3rd/nanovg)
aux_source_directory(${NANOVG_ROOT}/base SRC)
set(SOURCE_FILES ${SOURCE_FILES} ${SRC})
endif()
# add aic g2d
set(AIC_G2D ${CMAKE_CURRENT_SOURCE_DIR}/awtk-linux-fb/awtk-port/aic_g2d)
set(SOURCE_FILES ${SOURCE_FILES}
${AIC_G2D}/aic_g2d.c
${AIC_G2D}/aic_linux_mem.c
${AIC_G2D}/aic_dec_asset.c
${AIC_G2D}/aic_dec_asset_frame.c
${AIC_G2D}/aic_graphic_buffer.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/3rd/nanovg/agge/nanovg_agge.cpp)
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/3rd/nanovg/agge/nanovg_vertex.cpp)
if (NANOVG_BACKEND STREQUAL AGGE)
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/src/vgcanvas/vgcanvas_nanovg_soft.c)
else()
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/src/vgcanvas/vgcanvas_nanovg_gl.c)
endif()
file(GLOB LCD_MEM_SRC ${TK_ROOT}/src/lcd/lcd_mem_*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${LCD_MEM_SRC})
# add gpinyin source file
set(GPINYIN ${TK_ROOT}/3rd/gpinyin)
aux_source_directory(${GPINYIN}/src SRC)
set(SOURCE_FILES ${SOURCE_FILES} ${SRC})
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/src/input_methods/input_method_creator.c)
if (INPUT_ENGINE STREQUAL "pinyin")
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/src/input_engines/input_engine_pinyin.cpp)
else()
set(SOURCE_FILES ${SOURCE_FILES} ${TK_ROOT}/src/input_engines/input_engine_null.c)
endif()
# add linebreak
set(LIBUNIBREAK ${TK_ROOT}/3rd/libunibreak)
set(SOURCE_FILES ${SOURCE_FILES}
${LIBUNIBREAK}/graphemebreak.c
${LIBUNIBREAK}/linebreak.c
${LIBUNIBREAK}/linebreakdef.c
${LIBUNIBREAK}/unibreakbase.c
${LIBUNIBREAK}/unibreakdef.c
${LIBUNIBREAK}/wordbreak.c
${LIBUNIBREAK}/emojidef.c
${LIBUNIBREAK}/linebreakdata.c
)
# add fribidi
set(FRIBIDI ${TK_ROOT}/3rd/fribidi)
file(GLOB FRIBIDI_SRC ${FRIBIDI}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${FRIBIDI_SRC})
# add compressors
set(COMPRESSORS ${TK_ROOT}/src/compressors)
file(GLOB COMPRESSORS_SRC ${COMPRESSORS}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${COMPRESSORS_SRC})
# add miniz
set(MINIZ ${TK_ROOT}/3rd/miniz)
set(MINIZ_SRC
${MINIZ}/miniz.c
${MINIZ}/miniz_tdef.c
${MINIZ}/miniz_tinfl.c
${MINIZ}/miniz_zip.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${MINIZ_SRC})
# add csv
set(CSV ${TK_ROOT}/src/csv)
file(GLOB CSV_SRC ${CSV}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${CSV_SRC})
# add ubjson
set(UBJSON ${TK_ROOT}/src/ubjson)
file(GLOB UBJSON_SRC ${UBJSON}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${UBJSON_SRC})
# add cjson
set(CJSON ${TK_ROOT}/3rd/cjson)
file(GLOB CJSON_SRC ${CJSON}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${CJSON_SRC})
# add conf_io
set(CONF_IO ${TK_ROOT}/src/conf_io)
file(GLOB CONF_IO_SRC ${CONF_IO}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${CONF_IO_SRC})
# add hal
set(HAL ${TK_ROOT}/src/hal)
file(GLOB HAL_SRC
${HAL}/*.c
${HAL}/linux/*.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${HAL_SRC})
# add mbedtls
set(MBEDTLS ${TK_ROOT}/3rd/mbedtls)
file(GLOB MBEDTLS_SRC
${MBEDTLS}/library/*.c
${MBEDTLS}/3rdparty/everest/library/everest.c
${MBEDTLS}/3rdparty/everest/library/x25519.c
${MBEDTLS}3rdparty/everest/library/Hacl_Curve25519_joined.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${MBEDTLS_SRC})
# add streams
set(STREAMS ${TK_ROOT}/src/streams)
file(GLOB STREAMS_SRC
${STREAMS}/buffered/*.c
${STREAMS}/file/*.c
${STREAMS}/inet/*.c
${STREAMS}/mem/*.c
${STREAMS}/serial/*.c
${STREAMS}/shdlc/*.c
${STREAMS}/noisy/*.c
${STREAMS}/misc/*.c
${STREAMS}/statistics/*.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${STREAMS_SRC})
# add debugger
set(DEBUGGER ${TK_ROOT}/src/debugger)
file(GLOB DEBUGGER_SRC ${DEBUGGER}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${DEBUGGER_SRC})
# add charset
set(CHARSET ${TK_ROOT}/src/charset)
file(GLOB CHARSET_SRC ${CHARSET}/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${CHARSET_SRC})
# add awtk core
file(GLOB AWTK_SRC
${TK_ROOT}/src/layouters/*.c
${TK_ROOT}/src/base/*.c
${TK_ROOT}/src/ui_loader/*.c
${TK_ROOT}/src/xml/*.c
${TK_ROOT}/src/svg/*.c
${TK_ROOT}/src/clip_board/*.c
${TK_ROOT}/src/font_loader/*.c
${TK_ROOT}/src/blend/*.c
${TK_ROOT}/src/image_loader/*.c
${TK_ROOT}/src/designer_support/*.c
${TK_ROOT}/src/widget_animators/*.c
${TK_ROOT}/src/misc/*.c
${TK_ROOT}/src/window_animators/*.c
${TK_ROOT}/src/dialog_highlighters/*.c
${TK_ROOT}/src/window_manager/window_manager_default.c
${TK_ROOT}/src/graphic_buffer/graphic_buffer_default.c
${TK_ROOT}/src/native_window/native_window_raw.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${AWTK_SRC})
file(GLOB SRC_SRC
${TK_ROOT}/src/awtk_global.c
${TK_ROOT}/src/widgets/*.c
${TK_ROOT}/src/tkc/*.c
${TK_ROOT}/src/fscript_ext/*.c
${TK_ROOT}/src/platforms/pc/*.c
${TK_ROOT}/src/ext_widgets/*.c
${TK_ROOT}/src/ext_widgets/*/*.c
)
set(SOURCE_FILES ${SOURCE_FILES} ${SRC_SRC})
set(SOURCE_FILES ${SOURCE_FILES}
${TK_ROOT}/src/lcd/lcd_mono.c
${TK_ROOT}/src/main_loop/main_loop_simple.c
)
add_library(${PROJ} SHARED ${SOURCE_FILES})
target_link_libraries(${PROJ} PUBLIC m dl pthread stdc++)
# add path
set(CPPPATH
${TK_ROOT}/src
${TK_ROOT}/3rd
${TK_ROOT}/src/ext_widgets
${TK_ROOT}/3rd/pixman
${TK_ROOT}/3rd/agge
${TK_ROOT}/3rd/cjson
${TK_ROOT}/3rd/fribidi
${TK_ROOT}/3rd/mbedtls/include
${TK_ROOT}/3rd/mbedtls/3rdparty/everest/include
${TK_ROOT}/3rd/nanovg
${TK_ROOT}/3rd/nanovg/gl
${TK_ROOT}/3rd/nanovg/base
${TK_ROOT}/3rd/nanovg/agge
${TK_ROOT}/3rd/SDL/src
${TK_ROOT}/3rd/SDL/include
${TK_ROOT}/3rd/SDL/src/video/khronos
${TK_ROOT}/3rd/agge/src
${TK_ROOT}/3rd/agge/include
${TK_ROOT}/3rd/gpinyin/include
${TK_ROOT}/3rd/libunibreak
${TK_ROOT}/3rd/nativefiledialog/src
${TK_ROOT}/3rd/nativefiledialog/src/include
${TK_ROOT}/3rd/gtest/googletest
${TK_ROOT}/3rd/gtest/googletest/include
${TK_ROOT}/tools
${TK_LINUX_FB_ROOT}
${TK_LINUX_FB_ROOT}/awtk-port/input_thread
${TK_LINUX_FB_ROOT}/awtk-port/lcd_linux
${TK_LINUX_FB_ROOT}/awtk-port/aic_g2d
${TK_ROOT}/src/native_window
)
target_include_directories(${PROJ} PRIVATE ${CPPPATH})
# Install
# install directories
if(NOT CMAKE_INSTALL_PREFIX)
message(FATAL_ERROR "ERROR: CMAKE_INSTALL_PREFIX is not defined.")
endif()
include(GNUInstallDirs)
if(DEFINED CMAKE_INSTALL_FULL_LIBDIR)
install(TARGETS ${PROJ} RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}")
endif() # CMAKE_INSTALL_FULL_LIBDIR
# set project
set(PRJ_APP demo_char)
set(USER_APPS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/user_apps)
set(USER_DEMO_CHART ${USER_APPS_ROOT}/awtk-demo-chart)
## demo source file
set(DEMO_SOURCE_FILES "")
# add user 3rd
set(USER_DEMO_3RD ${USER_DEMO_CHART}/3rd/awtk-widget-chart-view/src)
file(GLOB DEMO_3RD_SRC
${USER_DEMO_3RD}/*.c
${USER_DEMO_3RD}/base/*.c
${USER_DEMO_3RD}/chart_view/*.c
${USER_DEMO_3RD}/pie_slice/*.c
)
set(DEMO_SOURCE_FILES ${DEMO_SOURCE_FILES} ${DEMO_3RD_SRC})
# add user src
set(USER_DEMO_SRC ${USER_DEMO_CHART}/src)
file(GLOB USER_DEMO_SRC
${USER_DEMO_SRC}/*.c
${USER_DEMO_SRC}/pages/*.c
${USER_DEMO_SRC}/common/*.c
)
set(DEMO_SOURCE_FILES ${DEMO_SOURCE_FILES} ${USER_DEMO_SRC})
# add link lib
find_library(LIBMPP_GE libmpp_ge.so)
find_library(LIBMPP_BASE libmpp_base.so)
find_library(LIBMPP_VE libmpp_ve.so)
find_library(LIBMPP_DEC libmpp_decoder.so)
# Do not modify the app name
set(PRJ_APP test_awtk)
add_executable(${PRJ_APP} ${DEMO_SOURCE_FILES})
target_include_directories(${PRJ_APP} PRIVATE ${CPPPATH})
target_link_libraries(${PRJ_APP} PUBLIC awtk ${LIBMPP_GE} ${LIBMPP_DEC} ${LIBMPP_BASE} ${LIBMPP_VE})
set_target_properties(${PRJ_APP} PROPERTIES INSTALL_RPATH "/usr/local/lib")
# install app
if(DEFINED CMAKE_INSTALL_FULL_BINDIR)
install(TARGETS ${PRJ_APP} RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}")
endif() # CMAKE_INSTALL_FULL_BINDIR
include(GNUInstallDirs)
add_definitions(-DAWTK_DIR="L:${CMAKE_INSTALL_FULL_DATAROOTDIR}")
add_definitions(-DAPP_RES_ROOT="/usr/local/share/awtk_data/res")
# Do not modify the installation path, you can modify the installation content
if(DEFINED CMAKE_INSTALL_FULL_DATAROOTDIR)
install(DIRECTORY user_apps/awtk-demo-chart/res/assets/default/raw
DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/awtk_data/res/assets/default)
endif() # CMAKE_INSTALL_FULL_DATAROOTDIR