diff --git a/sdl_display/CMakeLists.txt b/sdl_display/CMakeLists.txt index 223d750..b79b91a 100644 --- a/sdl_display/CMakeLists.txt +++ b/sdl_display/CMakeLists.txt @@ -21,6 +21,9 @@ cmake_minimum_required (VERSION 3.13) project (avm_sdl_display) +option(AVM_DISABLE_SMP "Disable SMP." OFF) +option(AVM_DISABLE_TASK_DRIVER "Disable task driver support." OFF) + include_directories(${LIBATOMVM_INCLUDE_PATH}) find_package(SDL) @@ -41,6 +44,27 @@ endif() set(CMAKE_SHARED_LIBRARY_PREFIX "") add_library(avm_display_port_driver SHARED display.c ufontlib.c) + +if (AVM_DISABLE_SMP) + target_compile_definitions(avm_display_port_driver PUBLIC AVM_NO_SMP) +endif() +if (NOT AVM_DISABLE_TASK_DRIVER) + target_compile_definitions(avm_display_port_driver PUBLIC AVM_TASK_DRIVER_ENABLED) +endif() + +include(CheckIncludeFile) +CHECK_INCLUDE_FILE(stdatomic.h STDATOMIC_INCLUDE) +include(CheckCSourceCompiles) +check_c_source_compiles(" + #include + int main() { + _Static_assert(ATOMIC_POINTER_LOCK_FREE == 2, \"Expected ATOMIC_POINTER_LOCK_FREE to be equal to 2\"); + } +" ATOMIC_POINTER_LOCK_FREE_IS_TWO) +if (ATOMIC_POINTER_LOCK_FREE_IS_TWO) + target_compile_definitions(avm_display_port_driver PUBLIC HAVE_ATOMIC) +endif() + target_link_libraries(avm_display_port_driver ${SDL_LIBRARY} ${ZLIB_LIBRARIES}) set_property(TARGET avm_display_port_driver PROPERTY C_STANDARD 11) set_property(TARGET avm_display_port_driver PROPERTY PREFIX "") diff --git a/sdl_display/README.Md b/sdl_display/README.Md new file mode 100644 index 0000000..e80c734 --- /dev/null +++ b/sdl_display/README.Md @@ -0,0 +1,23 @@ +# SDL Display Driver + +This display driver can be used for displaying graphics on a PC using SDL library. + +## Build +In order to build it, just run `cmake` first and then `make`. + +Beware: +- Make sure to set the path to AtomVM headers (`LIBATOMVM_INCLUDE_PATH`) before running cmake, +such as: `cmake -DLIBATOMVM_INCLUDE_PATH=/path-to/AtomVM/src/libAtomVM/ .`. +- Also make sure to build this plugin using same options as AtomVM, that means that +when `AVM_DISABLE_SMP` or `AVM_DISABLE_TASK_DRIVER` have been disabled in AtomVM build, also here +they must be disabled accordingly (their default is on, and in that case no further action is +required). + +## Requirements + +- zlib +- SDL (v1) + +## Run + +Once compiled, it must placed in the current working directory.