Git Product home page Git Product logo

avo's Introduction

What is Avo?

Avo is a light, modern C++20 library with a clean design containing various modular components useful for writing applications.

The library was initially written in C++17, but now it is being rewritten from scratch in C++20 and with a better design that is less object oriented.

It can currently be built by GCC and MSVC, but not Clang because it does not yet support all the features used.

Avo consists of:

  • Various modern utilities
  • Mathematical types and functions
  • A windowing library
  • A graphics drawing library (not yet)

Aims and features

Note: The new version of this library has only begun development and is very far from finished.

  • The design of the library is modular and different parts can be used (and tested) separately.
  • The library utilizes different programming paradigms and avoids inheritance hierarchies to be more flexible.
  • Interfaces are hard to misuse and as many errors as possible are caught at compile time.
  • Library code follows C++ Core Guidelines.
  • Written with modules when build systems and compilers have good support for modules.
  • Support for Windows, Linux, and MacOS.
  • UTF-8 by default.
  • Free from warnings with all useful warning flags turned on.
  • Modern CMake integration.

CMake usage

Dependencies

Avo currently only depends on native libraries and the C++ standard library.

Building and installing

Below are the basic commands to build and install Avo using CMake. You don't have to do this if you want to use it as a subproject or with FetchContent. You might have to run the install command as administrator on Windows or add sudo to it on Linux/MacOS.

To help CMake find dependencies you might want to add a CMAKE_PREFIX_PATH or CMAKE_TOOLCHAIN_FILE to the configuration command.

If you are making changes to the library, use one of the toolchain files in the cmake directory to add warning flags. These automatically also include the VCPKG toolchain file if the environment variable VCPKG_ROOT is defined.

git clone https://github.com/avocadoboi/avo.git
mkdir avo/build
cd avo/build
cmake ..
cmake --build . --target avo --config Release
cmake --install .

Using as installation

find_package(Avo REQUIRED)
target_link_libraries(target PRIVATE Avo::avo)

Using as subproject

add_subdirectory(external/avo)
target_link_libraries(target PRIVATE Avo::avo)

Using FetchContent to download

include(FetchContent)

FetchContent_Declare(
  Avo
  GIT_REPOSITORY https://github.com/avocadoboi/avo.git
  GIT_TAG cpp20-rewrite
)
FetchContent_MakeAvailable(Avo)

target_link_libraries(target PRIVATE Avo::avo)

avo's People

Contributors

avocadoboi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

avo's Issues

Error when building examples

atomic_flag_deadlock.cpp:(.text._ZNSt6threadC2IRFvvEJEvEEOT_DpOT0_[_ZNSt6threadC5IRFvvEJEvEEOT_DpOT0_]+0x2f): undefined reference to `pthread_create'

finding & linking the "Threads" package in cmake does nothing

adding the "-pthread" compile flag does nothing

Also another issue

Well, some objects dosnt respond to move and set pos functions in a certain points... like the text input bar, i set the y axis to the bottom of the screen and it stays on the center of the screen or just disppears!

Mouse event - button

Hey! I was wondering if you could provide a simple example on how to register and listen for events on specific buttons? Ive been reading your documentation but can't seem to wrap my head around it.

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.