aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Hanspeter Portner <dev@open-music-kontrollers.ch>2016-10-13 17:18:28 +0200
committerGravatar Hanspeter Portner <dev@open-music-kontrollers.ch>2016-10-13 18:23:38 +0200
commit9a7b3447e45fef6598825c0c46b05d296374c429 (patch)
tree4a371e924e8541da773154f92861fe2ee3b7d056
parent7d6210374025dbf7ba2ccae288bbe5ce86af9d16 (diff)
downloadcanvas_display.lv2-9a7b3447e45fef6598825c0c46b05d296374c429.zip
canvas_display.lv2-9a7b3447e45fef6598825c0c46b05d296374c429.tar.gz
canvas_display.lv2-9a7b3447e45fef6598825c0c46b05d296374c429.tar.bz2
canvas_display.lv2-9a7b3447e45fef6598825c0c46b05d296374c429.tar.xz
prototype cross compilation.
-rw-r--r--.gitlab-ci.yml72
-rw-r--r--CMakeLists.txt93
-rw-r--r--VERSION2
-rw-r--r--canvas.c16
-rw-r--r--canvas_ui.c86
-rw-r--r--cmake/arm-linux-gnueabihf.cmake23
-rw-r--r--cmake/i686-linux-gnu.cmake10
-rw-r--r--cmake/i686-w64-mingw32.cmake24
-rw-r--r--cmake/universal-apple-darwin.cmake23
-rw-r--r--cmake/x86_64-linux-gnu.cmake7
-rw-r--r--cmake/x86_64-w64-mingw32.cmake24
-rwxr-xr-xdocker_build.sh24
-rwxr-xr-xdocker_run.sh5
13 files changed, 357 insertions, 52 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..ada89e1
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,72 @@
+stages:
+ - build
+ - deploy
+
+.variables_template: &variables_definition
+ variables:
+ BASE_NAME: "canvas.lv2"
+ PKG_CONFIG_PATH: "/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig"
+ TOOLCHAIN_FILE: "${CI_PROJECT_DIR}/cmake/${CI_BUILD_NAME}.cmake"
+
+.common_template: &common_definition
+ <<: *variables_definition
+ stage: build
+ artifacts:
+ name: "${BASE_NAME}-$(cat VERSION)-${CI_BUILD_NAME}"
+ paths:
+ - "${BASE_NAME}-$(cat VERSION)/"
+
+.build_template: &build_definition
+ <<: *common_definition
+ script:
+ - mkdir build
+ - pushd build
+ - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${CI_PROJECT_DIR} -DPLUGIN_DEST="${BASE_NAME}-$(cat ../VERSION)/${CI_BUILD_NAME}/${BASE_NAME}" -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} ..
+ - cmake .. # needed for darwin
+ - make
+ - make install
+
+.universal_linux_template: &universal_linux_definition
+ image: ventosus/universal-linux-gnu
+ <<: *build_definition
+
+.arm_linux_template: &arm_linux_definition
+ image: ventosus/arm-linux-gnueabihf
+ <<: *build_definition
+
+.universal_w64_template: &universal_w64_definition
+ image: ventosus/universal-w64-mingw32
+ <<: *build_definition
+
+.universal_apple_template: &universal_apple_definition
+ image: ventosus/universal-apple-darwin
+ <<: *build_definition
+
+# building in docker
+x86_64-linux-gnu:
+ <<: *universal_linux_definition
+
+i686-linux-gnu:
+ <<: *universal_linux_definition
+
+arm-linux-gnueabihf:
+ <<: *arm_linux_definition
+
+x86_64-w64-mingw32:
+ <<: *universal_w64_definition
+
+i686-w64-mingw32:
+ <<: *universal_w64_definition
+
+universal-apple-darwin:
+ <<: *universal_apple_definition
+
+pack:
+ <<: *variables_definition
+ stage: deploy
+ script:
+ - echo 'packing up...'
+ artifacts:
+ name: "${BASE_NAME}-$(cat VERSION)"
+ paths:
+ - "${BASE_NAME}-$(cat VERSION)/"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 78f666d..1dfee4b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,10 +5,16 @@ project(canvas.lv2)
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/pugl)
+set(CMAKE_FIND_FRAMEWORK FIRST)
+
set(CMAKE_C_FLAGS "-std=gnu11 -Wextra -Wno-unused-parameter -ffast-math -fvisibility=hidden ${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "-Wshadow -Wimplicit-function-declaration -Wmissing-prototypes -Wstrict-prototypes ${CMAKE_C_FLAGS}")
-set(CMAKE_MODULE_LINKER_FLAGS "-Wl,-z,nodelete ${CMAKE_MODULE_LINKER_FLAGS}")
-set(CMAKE_MODULE_LINKER_FLAGS "-Wl,-z,defs ${CMAKE_MODULE_LINKER_FLAGS}")
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+ set(CMAKE_MODULE_LINKER_FLAGS "-Wl,-z,defs ${CMAKE_MODULE_LINKER_FLAGS}")
+ set(CMAKE_MODULE_LINKER_FLAGS "-Wl,-z,nodelete ${CMAKE_MODULE_LINKER_FLAGS}")
+elseif(WIN32)
+ set(CMAKE_C_FLAGS "-mstackrealign ${CMAKE_C_FLAGS}")
+endif()
add_definitions("-D_GNU_SOURCE=1") # asprintf
file(STRINGS "VERSION" CANVAS_VERSION)
@@ -18,42 +24,79 @@ list(GET VERSION_LIST 1 CANVAS_MINOR_VERSION)
list(GET VERSION_LIST 2 CANVAS_MICRO_VERSION)
add_definitions("-DCANVAS_VERSION=\"${CANVAS_VERSION}\"")
-set(DEST lib/lv2/canvas.lv2)
+if(NOT DEFINED PLUGIN_DEST)
+ set(PLUGIN_DEST lib/lv2/canvas.lv2)
+endif()
find_package(PkgConfig) # ${PKG_CONFIG_FOUND}
+set(LIBS m)
+set(LIBS_UI m)
+set(TAR_UI canvas_ui.c)
+
pkg_search_module(LV2 REQUIRED lv2>=1.10)
include_directories(${LV2_INCLUDE_DIRS})
pkg_search_module(CAIRO REQUIRED cairo>=1.14)
include_directories(${CAIRO_INCLUDE_DIRS})
+set(LIBS ${LIBS} ${CAIRO_LDFLAGS})
+set(LIBS_UI ${LIBS_UI} ${CAIRO_LDFLAGS})
add_definitions("-DPUGL_HAVE_CAIRO")
-pkg_search_module(X11 REQUIRED x11>=1.6)
-include_directories(${X11_INCLUDE_DIRS})
+find_package(OpenGL)
+if(${OPENGL_FOUND})
+ set(LIBS_UI ${LIBS_UI} ${OPENGL_LIBRARIES})
+ add_definitions("-DPUGL_HAVE_GL")
+else()
+ message(STATUS "OpenGL not found")
+endif()
+
+if(WIN32)
+ find_library(GDI32_LIBRARY NAMES gdi32)
+ if(GDI32_LIBRARY)
+ set(LIBS_UI ${LIBS_UI} ${GDI32_LIBRARY})
+ else()
+ message(FATAL_ERROR "gdi32 library not found")
+ endif()
+
+ find_library(USER32_LIBRARY NAMES user32)
+ if(USER32_LIBRARY)
+ set(LIBS_UI ${LIBS_UI} ${USER32_LIBRARY})
+ else()
+ message(FATAL_ERROR "user32 library not found")
+ endif()
+
+ set(TAR_UI ${TAR_UI} pugl/pugl/pugl_win.cpp)
-pkg_search_module(GL REQUIRED gl>=12.0)
-include_directories(${GL_INCLUDE_DIRS})
-add_definitions("-DPUGL_HAVE_GL")
+elseif(APPLE)
+ find_library(COCOA_LIBRARY NAMES Cocoa)
+ if(COCOA_LIBRARY)
+ set(LIBS_UI ${LIBS_UI} ${COCOA_LIBRARY})
+ else()
+ message(FATAL_ERROR "Cocoa framework not found")
+ endif()
-add_library(canvas MODULE
- canvas.c)
-target_link_libraries(canvas
- ${CAIRO_LDFLAGS})
+ set(TAR_UI ${TAR_UI} pugl/pugl/pugl_osx.m)
+
+else() # GNU/Linux
+ pkg_search_module(X11 REQUIRED x11>=1.6)
+ include_directories(${X11_INCLUDE_DIRS})
+ set(LIBS_UI ${LIBS_UI} ${X11_LDFLAGS})
+
+ set(TAR_UI ${TAR_UI} pugl/pugl/pugl_x11.c)
+endif()
+
+add_library(canvas MODULE canvas.c)
+target_link_libraries(canvas ${LIBS})
set_target_properties(canvas PROPERTIES PREFIX "")
-install(TARGETS canvas DESTINATION ${DEST})
-
-add_library(canvas_ui MODULE
- canvas_ui.c
- pugl/pugl/pugl_x11.c)
-target_link_libraries(canvas_ui
- ${CAIRO_LDFLAGS}
- ${X11_LDFLAGS}
- ${GL_LDFLAGS})
+install(TARGETS canvas DESTINATION ${PLUGIN_DEST})
+
+add_library(canvas_ui MODULE ${TAR_UI})
+target_link_libraries(canvas_ui ${LIBS_UI})
set_target_properties(canvas_ui PROPERTIES PREFIX "")
-install(TARGETS canvas_ui DESTINATION ${DEST})
+install(TARGETS canvas_ui DESTINATION ${PLUGIN_DEST})
configure_file(${PROJECT_SOURCE_DIR}/manifest.ttl.in ${PROJECT_BINARY_DIR}/manifest.ttl)
-install(FILES ${PROJECT_BINARY_DIR}/manifest.ttl DESTINATION ${DEST})
-install(FILES ${PROJECT_SOURCE_DIR}/canvas.ttl DESTINATION ${DEST})
-install(FILES ${PROJECT_SOURCE_DIR}/canvas_ui.ttl DESTINATION ${DEST})
+install(FILES ${PROJECT_BINARY_DIR}/manifest.ttl DESTINATION ${PLUGIN_DEST})
+install(FILES ${PROJECT_SOURCE_DIR}/canvas.ttl DESTINATION ${PLUGIN_DEST})
+install(FILES ${PROJECT_SOURCE_DIR}/canvas_ui.ttl DESTINATION ${PLUGIN_DEST})
diff --git a/VERSION b/VERSION
index 17e51c3..00d605c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.1
+0.1.281
diff --git a/canvas.c b/canvas.c
index 5091e60..b775410 100644
--- a/canvas.c
+++ b/canvas.c
@@ -73,14 +73,14 @@ cleanup(LV2_Handle instance)
}
const LV2_Descriptor canvas_canvas = {
- .URI = CANVAS_CANVAS_URI,
- .instantiate = instantiate,
- .connect_port = connect_port,
- .activate = NULL,
- .run = run,
- .deactivate = NULL,
- .cleanup = cleanup,
- .extension_data = NULL
+ .URI = CANVAS_CANVAS_URI,
+ .instantiate = instantiate,
+ .connect_port = connect_port,
+ .activate = NULL,
+ .run = run,
+ .deactivate = NULL,
+ .cleanup = cleanup,
+ .extension_data = NULL
};
LV2_SYMBOL_EXPORT const LV2_Descriptor*
diff --git a/canvas_ui.c b/canvas_ui.c
index b15372a..14a029c 100644
--- a/canvas_ui.c
+++ b/canvas_ui.c
@@ -29,13 +29,23 @@ typedef struct _plughandle_t plughandle_t;
struct _plughandle_t {
PuglView *view;
- double val;
int done;
+ struct {
+ double r;
+ double g;
+ double b;
+ } col;
+ struct {
+ bool r;
+ bool g;
+ bool b;
+ } dir;
};
static inline void
_expose(plughandle_t *handle)
{
+#ifndef _WIN32 //FIXME
cairo_t *ctx = puglGetContext(handle->view);
cairo_surface_t *surf = cairo_get_target(ctx);
@@ -49,9 +59,10 @@ _expose(plughandle_t *handle)
cairo_rectangle(ctx, 0.0, 0.0, 1.0, 1.0);
cairo_fill(ctx);
- cairo_set_source_rgba(ctx, handle->val, handle->val, 0.0, 1.0);
+ cairo_set_source_rgba(ctx, handle->col.r, handle->col.g, handle->col.b, 1.0);
cairo_arc(ctx, 0.5, 0.5, 0.4, 0.0, 2*M_PI);
cairo_fill(ctx);
+#endif
}
static inline void
@@ -147,8 +158,8 @@ instantiate(const LV2UI_Descriptor *descriptor, const char *plugin_uri,
return NULL;
}
- const int w = 400;
- const int h = 400;;
+ const unsigned w = 400;
+ const unsigned h = 400;;
puglInitWindowClass(handle->view, "canvas");
puglInitWindowParent(handle->view, (intptr_t)parent);
puglInitWindowSize(handle->view, w, h);
@@ -156,17 +167,24 @@ instantiate(const LV2UI_Descriptor *descriptor, const char *plugin_uri,
puglInitWindowAspectRatio(handle->view, 1, 1, 1, 1);
puglInitResizable(handle->view, true);
puglInitTransientFor(handle->view, (intptr_t)parent);
+ puglSetHandle(handle->view, handle);
+ puglSetEventFunc(handle->view, _event_func);
+
+ int stat;
#ifdef PUGL_HAVE_GL
puglInitContextType(handle->view, PUGL_CAIRO_GL);
-#else
- puglInitContextType(handle->view, PUGL_CAIRO);
+ stat = puglCreateWindow(handle->view, "CanvasGL");
+ if(stat != 0)
#endif
- puglSetHandle(handle->view, handle);
- puglSetEventFunc(handle->view, _event_func);
+ {
+ fprintf(stderr, "falling back to non-GL\n");
+ puglInitContextType(handle->view, PUGL_CAIRO);
+ stat = puglCreateWindow(handle->view, "Canvas");
+ }
- int stat = puglCreateWindow(handle->view, "Canvas");
- if(stat)
+ if(stat != 0)
{
+ puglDestroy(handle->view);
free(handle);
return NULL;
}
@@ -224,9 +242,41 @@ _idle(LV2UI_Handle instance)
{
plughandle_t *handle = instance;
- handle->val += 0.01;
- if(handle->val >= 1.0)
- handle->val = 0.0;
+ handle->col.r += 0.01 * (handle->dir.r ? 1.0 : -1.0);
+ if(handle->dir.r && (handle->col.r > 1.0) )
+ {
+ handle->dir.r = false;
+ handle->col.r = 1.0;
+ }
+ else if(!handle->dir.r && (handle->col.r < 0.0) )
+ {
+ handle->dir.r = true;
+ handle->col.r = 0.0;
+ }
+
+ handle->col.g += 0.02 * (handle->dir.g ? 1.0 : -1.0);
+ if(handle->dir.g && (handle->col.g > 1.0) )
+ {
+ handle->dir.g = false;
+ handle->col.g = 1.0;
+ }
+ else if(!handle->dir.g && (handle->col.g < 0.0) )
+ {
+ handle->dir.g = true;
+ handle->col.g = 0.0;
+ }
+
+ handle->col.b += 0.04 * (handle->dir.b ? 1.0 : -1.0);
+ if(handle->dir.b && (handle->col.b > 1.0) )
+ {
+ handle->dir.b = false;
+ handle->col.b = 1.0;
+ }
+ else if(!handle->dir.b && (handle->col.b < 0.0) )
+ {
+ handle->dir.b = true;
+ handle->col.b = 0.0;
+ }
puglPostRedisplay(handle->view);
@@ -254,11 +304,11 @@ extension_data(const char *uri)
}
const LV2UI_Descriptor canvas_canvas_ui = {
- .URI = CANVAS_CANVAS_UI_URI,
- .instantiate = instantiate,
- .cleanup = cleanup,
- .port_event = port_event,
- .extension_data = extension_data
+ .URI = CANVAS_CANVAS_UI_URI,
+ .instantiate = instantiate,
+ .cleanup = cleanup,
+ .port_event = port_event,
+ .extension_data = extension_data
};
LV2_SYMBOL_EXPORT const LV2UI_Descriptor*
diff --git a/cmake/arm-linux-gnueabihf.cmake b/cmake/arm-linux-gnueabihf.cmake
new file mode 100644
index 0000000..ac43290
--- /dev/null
+++ b/cmake/arm-linux-gnueabihf.cmake
@@ -0,0 +1,23 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR "armv7h")
+set(TOOLCHAIN "arm-linux-gnueabihf")
+
+# which compilers to use for C and C++
+set(CMAKE_C_COMPILER "${TOOLCHAIN}-gcc")
+set(CMAKE_CXX_COMPILER "${TOOLCHAIN}-g++")
+
+# here is the target environment located
+set(CMAKE_FIND_ROOT_PATH "usr/${TOOLCHAIN}")
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
+
+set(QEMU qemu-arm)
diff --git a/cmake/i686-linux-gnu.cmake b/cmake/i686-linux-gnu.cmake
new file mode 100644
index 0000000..6148f85
--- /dev/null
+++ b/cmake/i686-linux-gnu.cmake
@@ -0,0 +1,10 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR "i686")
+set(TOOLCHAIN "i686-linux-gnu")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" CACHE STRING "c flags")
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
diff --git a/cmake/i686-w64-mingw32.cmake b/cmake/i686-w64-mingw32.cmake
new file mode 100644
index 0000000..df7d2d0
--- /dev/null
+++ b/cmake/i686-w64-mingw32.cmake
@@ -0,0 +1,24 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR "i686")
+set(TOOLCHAIN "i686-w64-mingw32")
+
+# which compilers to use for C and C++
+set(CMAKE_C_COMPILER "${TOOLCHAIN}-gcc")
+set(CMAKE_CXX_COMPILER "${TOOLCHAIN}-g++")
+set(CMAKE_RC_COMPILER "${TOOLCHAIN}-windres")
+
+# here is the target environment located
+set(CMAKE_FIND_ROOT_PATH "/usr/${TOOLCHAIN}")
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
+
+set(WINE wine32)
diff --git a/cmake/universal-apple-darwin.cmake b/cmake/universal-apple-darwin.cmake
new file mode 100644
index 0000000..3efab34
--- /dev/null
+++ b/cmake/universal-apple-darwin.cmake
@@ -0,0 +1,23 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Darwin)
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+set(TOOLCHAIN "universal-apple-darwin")
+
+set(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
+
+# which compilers to use for C and C++
+set(CMAKE_C_COMPILER "/usr/${TOOLCHAIN}/bin/x86_64-apple-darwin15-clang")
+set(CMAKE_CXX_COMPILER "/usr/${TOOLCHAIN}/bin/x86_64-apple-darwin15-clang++")
+
+# here is the target environment located
+set(CMAKE_FIND_ROOT_PATH "/usr/${TOOLCHAIN}/SDK/MacOSX10.11.sdk")
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
diff --git a/cmake/x86_64-linux-gnu.cmake b/cmake/x86_64-linux-gnu.cmake
new file mode 100644
index 0000000..290d01b
--- /dev/null
+++ b/cmake/x86_64-linux-gnu.cmake
@@ -0,0 +1,7 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+set(TOOLCHAIN "x86_64-linux-gnu")
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
diff --git a/cmake/x86_64-w64-mingw32.cmake b/cmake/x86_64-w64-mingw32.cmake
new file mode 100644
index 0000000..d699ad3
--- /dev/null
+++ b/cmake/x86_64-w64-mingw32.cmake
@@ -0,0 +1,24 @@
+# the name of the target operating system
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR "x86_64")
+set(TOOLCHAIN "x86_64-w64-mingw32")
+
+# which compilers to use for C and C++
+set(CMAKE_C_COMPILER "${TOOLCHAIN}-gcc")
+set(CMAKE_CXX_COMPILER "${TOOLCHAIN}-g++")
+set(CMAKE_RC_COMPILER "${TOOLCHAIN}-windres")
+
+# here is the target environment located
+set(CMAKE_FIND_ROOT_PATH "/usr/${TOOLCHAIN}")
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(STATIC_CAIRO "/opt/${TOOLCHAIN}/lib/libcairo.a")
+set(STATIC_PIXMAN "/opt/${TOOLCHAIN}/lib/libpixman-1.a")
+
+set(WINE wine64)
diff --git a/docker_build.sh b/docker_build.sh
new file mode 100755
index 0000000..048f0f5
--- /dev/null
+++ b/docker_build.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+TARGET=$1
+
+CI_PROJECT_DIR=$(pwd)
+CI_BUILD_NAME=${TARGET}
+
+BASE_NAME="canvas.lv2"
+PKG_CONFIG_PATH="/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig"
+TOOLCHAIN_FILE="${CI_PROJECT_DIR}/cmake/${CI_BUILD_NAME}.cmake"
+
+rm -rf ${TARGET}
+mkdir -p ${TARGET}
+pushd ${TARGET}
+ PKG_CONFIG_PATH=${PKG_CONFIG_PATH} cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=${CI_PROJECT_DIR} \
+ -DPLUGIN_DEST="${BASE_NAME}-$(cat ../VERSION)/${CI_BUILD_NAME}/${BASE_NAME}" \
+ -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
+ ..
+ make -j4
+ make install
+ #ARGS='-VV' make test
+popd
diff --git a/docker_run.sh b/docker_run.sh
new file mode 100755
index 0000000..ea1c47a
--- /dev/null
+++ b/docker_run.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/bash
+
+TARGET=$1
+
+docker run --rm -it -v $(pwd):/workdir/canvas.lv2 ventosus/${TARGET}