Skip to content

Commit

Permalink
Merge branch 'dev' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
castle055 committed Apr 4, 2024
2 parents 88325ab + 41bf9f9 commit 64c51c2
Show file tree
Hide file tree
Showing 97 changed files with 1,474 additions and 4,666 deletions.
73 changes: 0 additions & 73 deletions .clang-format

This file was deleted.

10 changes: 1 addition & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,10 @@

.idea/

cmake-build-debug/

cmake-build-release/

.cyd/

.ccls-cache/
.cache/

cmake-build-debug-clang/
cmake-build-debug-gcc-experimental/
cmake-build-release-gcc-experimental/
build/

docs/

Expand Down
135 changes: 49 additions & 86 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,7 @@ SET(TEST_DIR ${CMAKE_CURRENT_LIST_DIR}/test)
SET(INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include)
SET(SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src)

include(CheckCXXCompilerFlag)

set(CMAKE_REQUIRED_QUIET true)
function(enable_cxx_compiler_flag_if_supported flag)
string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_already_set)
if (flag_already_set EQUAL -1)
check_cxx_compiler_flag("${flag}" flag_supported)
if (flag_supported)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE)
message(" [ OK ] Compiler flag: ${flag}")
else ()
message(" [ERROR] Compiler flag: ${flag} <--(Not supported)")
endif ()
unset(flag_supported CACHE)
else ()
message(" [WARN ] Compiler flag: ${flag} <--(Already set)")
endif ()
endfunction()

function(compiler_flags)
message("Setting Compiler Flags:")
foreach (flag ${ARGN})
enable_cxx_compiler_flag_if_supported("${flag}")
endforeach ()
endfunction()


include(cmake/compiler_flags.cmake)
compiler_flags(
"-Wall"
"-Wextra"
Expand All @@ -59,7 +33,6 @@ compiler_flags(


include_directories(${INCLUDE_DIR})
include_directories(/usr/include/freetype2)

find_package(PkgConfig REQUIRED)
pkg_check_modules(CAIROMM-1.16 REQUIRED cairomm-1.16)
Expand All @@ -76,69 +49,59 @@ FILE(GLOB_RECURSE SRC_LIST
)

add_library(cyd_ui)
target_sources(cyd_ui
PUBLIC
${SRC_LIST}
)
target_sources(cyd_ui PUBLIC ${SRC_LIST})
target_link_libraries(cyd_ui
PRIVATE
X11 Xft Xrender fontconfig
yaml-cpp jpeg ${CAIROMM-1.16_LIBRARIES}
${CAIROMM-1.16_LIBRARIES}
yaml-cpp jpeg
)

# Build Tests
FILE(GLOB_RECURSE TEST_LIST
${TEST_DIR}/*.h
${TEST_DIR}/*.hpp
${TEST_DIR}/*.cpp
# ${TEST_DIR}/**/*.*
)
#FILE(GLOB_RECURSE TEST_MOD_LIST
# ${TEST_DIR}/*.cppm
# ${TEST_DIR}/**/*.*
#)
add_executable(cyd_ui_test ${TEST_LIST})
#target_sources(cyd_ui_test
# PRIVATE FILE_SET CXX_MODULES FILES ${TEST_MOD_LIST})
target_include_directories(cyd_ui_test PRIVATE ${TEST_DIR})
target_link_libraries(cyd_ui_test
PRIVATE cyd_ui
sensors)
include(cmake/ctest.cmake)

# Build Doxygen Documentation
add_custom_target(cyd_ui_docs_dir ALL COMMAND ${CMAKE_COMMAND} -E make_directory docs)
add_custom_target(
cyd_ui_docs
COMMAND /usr/bin/doxygen ${CMAKE_CURRENT_LIST_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMENT "Generating DOXYGEN documentation..."
)
add_dependencies(cyd_ui_docs cyd_ui_docs_dir)

#if (CMAKE_BUILD_TYPE MATCHES "Release")
# add_custom_command(TARGET cyd_ui POST_BUILD
# COMMAND /usr/bin/cp
# -v
# ${CMAKE_CURRENT_LIST_DIR}/cmake-build-release/libcyd_ui.a
# ${CMAKE_CURRENT_LIST_DIR}/dist/
# WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
# COMMENT "Generating distribution files..."
# )
# add_custom_command(TARGET cyd_ui POST_BUILD
# COMMAND /usr/bin/cp
# -rv
# ${INCLUDE_DIR}
# ${CMAKE_CURRENT_LIST_DIR}/dist/
# WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
# COMMENT "Copying header files..."
# )
# add_custom_command(TARGET cyd_ui POST_BUILD
# COMMAND /usr/bin/cp
# -v
# ${CMAKE_CURRENT_LIST_DIR}/cyd.yml
# ${CMAKE_CURRENT_LIST_DIR}/dist/
# WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
# COMMENT "Copying CYD files..."
# )
# add_dependencies(cyd_ui cyd_ui_docs)
#endif ()
include(cmake/docs.cmake)

# Build Local tests
if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/local_test)
FILE(GLOB_RECURSE TEST_LIST
${CMAKE_CURRENT_LIST_DIR}/local_test/*.h
${CMAKE_CURRENT_LIST_DIR}/local_test/*.hpp
${CMAKE_CURRENT_LIST_DIR}/local_test/*.cpp
# ${TEST_DIR}/**/*.*
)
#FILE(GLOB_RECURSE TEST_MOD_LIST
# ${TEST_DIR}/*.cppm
# ${TEST_DIR}/**/*.*
#)
add_executable(cyd_ui_test ${TEST_LIST})
#target_sources(cyd_ui_test
# PRIVATE FILE_SET CXX_MODULES FILES ${TEST_MOD_LIST})
target_include_directories(cyd_ui_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/local_test)
target_link_libraries(cyd_ui_test
PRIVATE cyd_ui
)
endif ()

if (CMAKE_BUILD_TYPE MATCHES "Release")
add_custom_command(TARGET cyd_ui POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory dist
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
add_custom_command(TARGET cyd_ui POST_BUILD
COMMAND cp -v
$<TARGET_FILE:cyd_ui>
${CMAKE_CURRENT_LIST_DIR}/dist/
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMENT "Copying binary into distribution directory..."
)
add_custom_command(TARGET cyd_ui POST_BUILD
COMMAND cp -rv
${INCLUDE_DIR}
${CMAKE_CURRENT_LIST_DIR}/dist/
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMENT "Copying header files into distribution directory..."
)
endif ()

26 changes: 26 additions & 0 deletions cmake/compiler_flags.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
include(CheckCXXCompilerFlag)

set(CMAKE_REQUIRED_QUIET true)
function(enable_cxx_compiler_flag_if_supported flag)
string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_already_set)
if (flag_already_set EQUAL -1)
check_cxx_compiler_flag("${flag}" flag_supported)
if (flag_supported)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE)
message(" [ OK ] Compiler flag: ${flag}")
else ()
message(" [ERROR] Compiler flag: ${flag} <--(Not supported)")
endif ()
unset(flag_supported CACHE)
else ()
message(" [WARN ] Compiler flag: ${flag} <--(Already set)")
endif ()
endfunction()

function(compiler_flags)
message("Setting Compiler Flags:")
foreach (flag ${ARGN})
enable_cxx_compiler_flag_if_supported("${flag}")
endforeach ()
endfunction()

23 changes: 23 additions & 0 deletions cmake/ctest.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
enable_testing()

FILE(GLOB_RECURSE TEST_LIST
${CMAKE_CURRENT_LIST_DIR}/../test/**/*.cpp
)
foreach (test ${TEST_LIST})
get_filename_component(TName ${test} NAME_WLE)
add_executable(${TName} ${test})
target_link_libraries(${TName} PRIVATE cyd_ui)
target_include_directories(${TName} PRIVATE ${TEST_DIR}/common)

file(STRINGS ${test} TLines)
message("TEST CASES")
foreach (line ${TLines})
if ("${line}" MATCHES "TEST\\(\"(.*)\"\\)")
message("${line}")
set(case ${CMAKE_MATCH_1})
message("${case}")

add_test(NAME "${TName} - ${case}" COMMAND $<TARGET_FILE:${TName}> "${case}")
endif ()
endforeach ()
endforeach ()
10 changes: 10 additions & 0 deletions cmake/docs.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
add_custom_target(
cyd_ui_docs
COMMAND /usr/bin/doxygen ${CMAKE_CURRENT_LIST_DIR}/../Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
COMMENT "Generating DOXYGEN documentation..."
)
add_custom_command(TARGET cyd_ui_docs PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory docs
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/..
)
2 changes: 1 addition & 1 deletion cyd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ include:
- '$HOME/.config/corium/cyd-includes/project-cpp/cyd.yml'

cmd:
lines: wc -l $(find ./src ./include ./test -name '*.cpp' -o -name '*.hpp' -o -name '*.h') | sort -n
lines: wc -l $(find ./src ./include -name '*.cpp' -o -name '*.hpp' -o -name '*.h') | sort -n
doc: doxygen ./Doxyfile
64 changes: 64 additions & 0 deletions include/async/async_bus.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright (c) 2024, Victor Castillo, All rights reserved.

#ifndef CYD_UI_ASYNC_BUS_H
#define CYD_UI_ASYNC_BUS_H

#include "event_queue.h"
#include "coroutine_runtime.h"

namespace cydui::async {
enum class async_bus_status_e {
RUNNING,
STOPPED,
};

class async_bus_t: public event_queue_t,
public coroutine_runtime_t {
public: /// @name Construction & RAII
// ! Constructor
async_bus_t() {
thread_start();
}
// ! Destructor
~async_bus_t() {
thread_stop();
}
// ! Copy
async_bus_t(const async_bus_t &rhs) = delete;
async_bus_t &operator=(const async_bus_t &rhs) = delete;
// ! Move
async_bus_t(async_bus_t &&rhs) = delete;
async_bus_t &operator=(async_bus_t &&rhs) = delete;

private TEST_PUBLIC: /// @name Status
std::atomic<async_bus_status_e> status = async_bus_status_e::STOPPED;
private TEST_PUBLIC: /// @name Thread
std::unique_ptr<std::thread> thread = nullptr;
void thread_start() {
if (!thread) {
status = async_bus_status_e::RUNNING;
thread = std::make_unique<std::thread>([](async_bus_t* bus) {bus->thread_task();}, this);
}
}
void thread_stop() {
if (thread) {
status = async_bus_status_e::STOPPED;
thread->join();
thread.reset(nullptr);
}
}

void thread_task() {
using namespace std::chrono_literals;
auto prev_t = std::chrono::system_clock::now();
while (status == async_bus_status_e::RUNNING) {
prev_t = std::chrono::system_clock::now();
events_process_batch();
coroutine_run();
std::this_thread::sleep_until(prev_t + 100us);
}
}
};
}

#endif //CYD_UI_ASYNC_BUS_H

0 comments on commit 64c51c2

Please sign in to comment.