From ab76dcd0879e684b34c3de243e44e3751b68356f Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 8 Nov 2019 13:04:53 +0300 Subject: [PATCH] Initial cmake build scripts. --- CMakeLists.txt | 184 ++++++++++++++++++++++++++++++++++++ cmake/generate_styles.cmake | 94 ++++++++++++++++++ 2 files changed, 278 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/generate_styles.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..61793b7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,184 @@ +add_library(lib_ui OBJECT) +init_target(lib_ui) + +include(cmake/generate_styles.cmake) + +get_filename_component(src_loc . REALPATH) + +set(style_files + ui/basic.style + ui/layers/layers.style + ui/widgets/widgets.style +) + +generate_palette(lib_ui ui/colors.palette) +generate_styles(lib_ui ${src_loc} "${style_files}" ui/colors.palette) +generate_emoji(lib_ui emoji_suggestions/emoji_autocomplete.json) + +set(lib_ui_sources +PRIVATE + ${style_files} + ui/colors.palette + emoji_suggestions/emoji_autocomplete.json + + ui/effects/animation_value.cpp + ui/effects/animation_value.h + ui/effects/animations.cpp + ui/effects/animations.h + ui/effects/cross_animation.cpp + ui/effects/cross_animation.h + ui/effects/fade_animation.cpp + ui/effects/fade_animation.h + ui/effects/numbers_animation.cpp + ui/effects/numbers_animation.h + ui/effects/panel_animation.cpp + ui/effects/panel_animation.h + ui/effects/radial_animation.cpp + ui/effects/radial_animation.h + ui/effects/ripple_animation.cpp + ui/effects/ripple_animation.h + ui/effects/slide_animation.cpp + ui/effects/slide_animation.h + ui/image/image_prepare.cpp + ui/image/image_prepare.h + ui/layers/box_content.cpp + ui/layers/box_content.h + ui/layers/box_layer_widget.cpp + ui/layers/box_layer_widget.h + ui/layers/generic_box.cpp + ui/layers/generic_box.h + ui/layers/layer_manager.cpp + ui/layers/layer_manager.h + ui/layers/layer_widget.cpp + ui/layers/layer_widget.h + ui/platform/linux/ui_window_linux.cpp + ui/platform/linux/ui_window_linux.h + ui/platform/linux/ui_utility_linux.cpp + ui/platform/linux/ui_utility_linux.h + ui/platform/mac/ui_window_mac.h + ui/platform/mac/ui_window_mac.mm + ui/platform/mac/ui_window_title_mac.h + ui/platform/mac/ui_window_title_mac.mm + ui/platform/mac/ui_utility_mac.h + ui/platform/mac/ui_utility_mac.mm + ui/platform/win/ui_window_shadow_win.cpp + ui/platform/win/ui_window_shadow_win.h + ui/platform/win/ui_window_title_win.cpp + ui/platform/win/ui_window_title_win.h + ui/platform/win/ui_window_win.cpp + ui/platform/win/ui_window_win.h + ui/platform/win/ui_utility_win.cpp + ui/platform/win/ui_utility_win.h + ui/platform/ui_platform_window.h + ui/platform/ui_platform_utility.h + ui/style/style_core.cpp + ui/style/style_core.h + ui/style/style_core_color.cpp + ui/style/style_core_color.h + ui/style/style_core_direction.cpp + ui/style/style_core_direction.h + ui/style/style_core_font.cpp + ui/style/style_core_font.h + ui/style/style_core_icon.cpp + ui/style/style_core_icon.h + ui/style/style_core_scale.cpp + ui/style/style_core_scale.h + ui/style/style_core_types.cpp + ui/style/style_core_types.h + ui/text/text.cpp + ui/text/text.h + ui/text/text_block.cpp + ui/text/text_block.h + ui/text/text_entity.cpp + ui/text/text_entity.h + ui/text/text_isolated_emoji.h + ui/text/text_utilities.cpp + ui/text/text_utilities.h + ui/toast/toast.cpp + ui/toast/toast.h + ui/toast/toast_manager.cpp + ui/toast/toast_manager.h + ui/toast/toast_widget.cpp + ui/toast/toast_widget.h + ui/widgets/box_content_divider.cpp + ui/widgets/box_content_divider.h + ui/widgets/buttons.cpp + ui/widgets/buttons.h + ui/widgets/checkbox.cpp + ui/widgets/checkbox.h + ui/widgets/dropdown_menu.cpp + ui/widgets/dropdown_menu.h + ui/widgets/inner_dropdown.cpp + ui/widgets/inner_dropdown.h + ui/widgets/input_fields.cpp + ui/widgets/input_fields.h + ui/widgets/labels.cpp + ui/widgets/labels.h + ui/widgets/menu.cpp + ui/widgets/menu.h + ui/widgets/popup_menu.cpp + ui/widgets/popup_menu.h + ui/widgets/scroll_area.cpp + ui/widgets/scroll_area.h + ui/widgets/shadow.cpp + ui/widgets/shadow.h + ui/widgets/tooltip.cpp + ui/widgets/tooltip.h + ui/widgets/window.cpp + ui/widgets/window.h + ui/wrap/fade_wrap.cpp + ui/wrap/fade_wrap.h + ui/wrap/padding_wrap.cpp + ui/wrap/padding_wrap.h + ui/wrap/slide_wrap.cpp + ui/wrap/slide_wrap.h + ui/wrap/vertical_layout.cpp + ui/wrap/vertical_layout.h + ui/wrap/wrap.h + ui/abstract_button.cpp + ui/abstract_button.h + ui/basic_click_handlers.cpp + ui/basic_click_handlers.h + ui/click_handler.cpp + ui/click_handler.h + ui/delayed_activation.cpp + ui/delayed_activation.h + ui/emoji_config.cpp + ui/emoji_config.h + ui/focus_persister.h + ui/inactive_press.cpp + ui/inactive_press.h + ui/integration.cpp + ui/integration.h + ui/main_queue_processor.cpp + ui/main_queue_processor.h + ui/painter.h + ui/ph.cpp + ui/ph.h + ui/rect_part.h + ui/round_rect.cpp + ui/round_rect.h + ui/rp_widget.cpp + ui/rp_widget.h + ui/ui_log.cpp + ui/ui_log.h + ui/ui_utility.cpp + ui/ui_utility.h + emoji_suggestions/emoji_suggestions.cpp + emoji_suggestions/emoji_suggestions.h + emoji_suggestions/emoji_suggestions_helper.h +) + +force_include(lib_ui ui/ui_pch.h) +nice_target_sources(lib_ui ${src_loc} "${lib_ui_sources}") + +target_include_directories(lib_ui +PUBLIC + ${src_loc} + ${src_loc}/emoji_suggestions +) + +target_link_libraries(lib_ui +PUBLIC + lib_base +) diff --git a/cmake/generate_styles.cmake b/cmake/generate_styles.cmake new file mode 100644 index 0000000..b759319 --- /dev/null +++ b/cmake/generate_styles.cmake @@ -0,0 +1,94 @@ +function(append_generate_target target_name postfix generated_files gen_dst) + add_custom_target(${target_name}_${postfix} DEPENDS ${generated_files}) + init_target(${target_name}_${postfix} "(gen)") + add_dependencies(${target_name} ${target_name}_${postfix}) + target_sources(${target_name} PRIVATE ${generated_files}) + target_include_directories(${target_name} PUBLIC ${gen_dst}) + source_group("(gen)" FILES ${generated_files}) +endfunction() + +function(generate_palette target_name palette_file) + set(gen_dst ${CMAKE_CURRENT_BINARY_DIR}/gen) + set(gen_src ${CMAKE_CURRENT_SOURCE_DIR}/${palette_file}) + set(generated_files + ${gen_dst}/styles/palette.cpp + ${gen_dst}/styles/palette.h + ) + add_custom_command( + OUTPUT + ${generated_files} + COMMAND + codegen_style + -I${gen_dst} + -o${gen_dst}/styles + -w${CMAKE_CURRENT_SOURCE_DIR} + ${gen_src} + COMMENT "Generating palette (${target_name})" + DEPENDS + codegen_style + ${gen_src} + MAIN_DEPENDENCY + ${gen_src} + ) + append_generate_target(${target_name} palette "${generated_files}" ${gen_dst}) +endfunction() + +function(generate_styles target_name src_loc style_files dependent_style_files) + set(gen_dst ${CMAKE_CURRENT_BINARY_DIR}/gen) + set(full_generated_files "") + set(full_dependencies_list ${style_files}) + list(APPEND full_dependencies_list ${dependent_style_files}) + foreach (file ${style_files}) + set(gen_src ${CMAKE_CURRENT_SOURCE_DIR}/${file}) + get_filename_component(file_name ${file} NAME_WLE) + set(generated_files + ${gen_dst}/styles/style_${file_name}.cpp + ${gen_dst}/styles/style_${file_name}.h + ) + list(APPEND full_generated_files ${generated_files}) + add_custom_command( + OUTPUT + ${generated_files} + COMMAND + codegen_style + -I${src_loc} + -I${submodules_loc}/lib_ui + -I${submodules_loc}/Resources + -o${gen_dst}/styles + -w${CMAKE_CURRENT_SOURCE_DIR} + ${gen_src} + COMMENT "Generating style (${target_name}:${file_name})" + DEPENDS + codegen_style + ${full_dependencies_list} + MAIN_DEPENDENCY + ${gen_src} + ) + endforeach() + + append_generate_target(${target_name} styles "${full_generated_files}" ${gen_dst}) +endfunction() + +function(generate_emoji target_name suggestions_json) + set(gen_dst ${CMAKE_CURRENT_BINARY_DIR}/gen) + set(gen_src ${CMAKE_CURRENT_SOURCE_DIR}/${suggestions_json}) + set(generated_files + ${gen_dst}/emoji.cpp + ${gen_dst}/emoji.h + ${gen_dst}/emoji_suggestions_data.cpp + ${gen_dst}/emoji_suggestions_data.h + ) + add_custom_command( + OUTPUT + ${generated_files} + COMMAND + codegen_emoji + -o${gen_dst} + ${gen_src} + COMMENT "Generating emoji (${target_name})" + DEPENDS + codegen_emoji + ${gen_src} + ) + append_generate_target(${target_name} emoji "${generated_files}" ${gen_dst}) +endfunction()