ecore-drm2: Add start of Ecore_Drm2 library

This new library is going to replace the existing Ecore_Drm. This will
refactor a lot of the code, bring improvements over the existing API,
and provide additional support for missing features.

@feature

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
This commit is contained in:
Chris Michael 2016-05-02 10:21:00 -04:00
parent 072674dbe2
commit a0d3b955bf
11 changed files with 323 additions and 21 deletions

View File

@ -290,6 +290,10 @@ if HAVE_ELPUT
pkgconfig_DATA += pc/elput.pc
endif
if HAVE_ECORE_DRM2
pkgconfig_DATA += pc/ecore-drm2.pc
endif
# Cmake configs:
efl_cmakeconfigdir = $(libdir)/cmake/Efl/
efl_cmakeconfig_DATA = \

View File

@ -2085,19 +2085,32 @@ if test "x${have_cocoa}" = "xyes"; then
fi
AC_SUBST(cocoa_coreservices_ldflags)
AC_ARG_ENABLE([elput],
[AS_HELP_STRING([--enable-elput],[enable elput library. @<:@default=disabled@:>@])],
[
if test "x${enableval}" = "xyes" ; then
want_elput="yes"
else
want_elput="no"
fi
],
[want_elput="no"])
# Drm
AC_ARG_ENABLE([drm],
[AS_HELP_STRING([--enable-drm],[enable drm engine. @<:@default=disabled@:>@])],
[
if test "x${enableval}" = "xyes" ; then
want_drm="yes"
if test "x${want_elput}" != "xyes" ; then
AC_MSG_ERROR([elput is required to build drm support])
fi
want_drm="yes"
else
want_drm="no"
fi
],
[want_drm="no"])
AC_ARG_ENABLE([gl-drm],
[AC_HELP_STRING([--enable-gl-drm],
[enable gl drm engine. @<:@default=disabled@:>@])],
@ -2296,17 +2309,6 @@ AC_ARG_ENABLE([ecore-buffer],
],
[want_ecore_buffer="no"])
AC_ARG_ENABLE([elput],
[AS_HELP_STRING([--enable-elput],[enable elput library. @<:@default=disabled@:>@])],
[
if test "x${enableval}" = "xyes" ; then
want_elput="yes"
else
want_elput="no"
fi
],
[want_elput="no"])
# Image Loaders
ARG_ENABLE_EVAS_IMAGE_LOADER(BMP, static)
@ -3633,7 +3635,52 @@ EFL_EVAL_PKGS([ELPUT])
### Checks for library functions
EFL_LIB_END_OPTIONAL([Elput])
#### End of Ecore_Drm
#### End of Elput
#### Ecore_Drm2
have_libinput_new="no"
EFL_LIB_START_OPTIONAL([Ecore_Drm2], [test "${want_drm}" = "yes"])
### Additional options to configure
SUID_CFLAGS=-fPIE
SUID_LDFLAGS=-pie
AC_SUBST([SUID_CFLAGS])
AC_SUBST([SUID_LDFLAGS])
### Default values
### Checks for programs
### Checks for libraries
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eo])
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [efl])
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eina])
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [ecore])
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [elput])
EFL_INTERNAL_DEPEND_PKG([ECORE_DRM2], [eeze])
EFL_DEPEND_PKG([ECORE_DRM2], [DRM], [libdrm >= 2.4 gbm])
EFL_ADD_LIBS([ECORE_DRM2], [-lm])
AC_CHECK_LIB(drm, drmModeAtomicCommit, AC_DEFINE(HAVE_ATOMIC_DRM, [], [Atomic modeset supported]))
EFL_EVAL_PKGS([ECORE_DRM2])
### Checks for header files
### Checks for types
### Checks for structures
### Checks for compiler characteristics
### Checks for linker characteristics
### Checks for library functions
EFL_LIB_END_OPTIONAL([Ecore_Drm2])
#### End of Ecore_Drm2
#### Ecore_Audio
@ -5260,7 +5307,7 @@ EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${have_ps3}], [ecore_psl1ght])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_sdl}], [ecore_sdl])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_ecore_evas_gl_cocoa}], [ecore_cocoa])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${build_ecore_evas_win32}], [ecore_win32])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_drm}], [ecore_drm])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${want_drm}], [ecore_drm2])
EFL_OPTIONAL_INTERNAL_DEPEND_PKG([ELEMENTARY], [${build_ecore_evas_wayland}], [ecore_wl2])
dnl Special case deps for ecore_drm
@ -5605,6 +5652,7 @@ pc/elua.pc
pc/elementary.pc
pc/elementary-cxx.pc
pc/elput.pc
pc/ecore-drm2.pc
dbus-services/org.enlightenment.Ethumb.service
systemd-services/ethumb.service
$po_makefile_in

View File

@ -174,6 +174,9 @@ case "m4_defn([DOWNOTHER])" in
ecore_win32)
depname="ecore-win32"
;;
ecore_drm2)
depname="ecore-drm2"
;;
esac
requirements_pc_[]m4_defn([DOWNEFL])="${depname} >= ${PACKAGE_VERSION} ${requirements_pc_[][]m4_defn([DOWNEFL])}"
requirements_cflags_[]m4_defn([DOWNEFL])="-I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} ${requirements_cflags_[][]m4_defn([DOWNEFL])}"

1
pc/.gitignore vendored
View File

@ -74,3 +74,4 @@
/efl-js.pc
/elementary-cxx.pc
/elput.pc
/ecore-drm2.pc

12
pc/ecore-drm2.pc.in Normal file
View File

@ -0,0 +1,12 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: ecore-drm2
Description: E core library, DRM module
Requires.private: @requirements_pc_ecore_drm2@
Version: @VERSION@
Libs: -L${libdir} -lecore_drm2
Libs.private: @requirements_libs_ecore_drm2@
Cflags: -I${includedir}/efl-@VMAJ@ -I${includedir}/ecore-drm2-@VMAJ@

View File

@ -54,7 +54,9 @@ include Makefile_Ecore_IMF.am
include Makefile_Ecore_IMF_Evas.am
include Makefile_Eldbus.am
include Makefile_Eeze.am
include Makefile_Elput.am
include Makefile_Ecore_Drm.am
include Makefile_Ecore_Drm2.am
include Makefile_Ecore_Evas.am
include Makefile_Ecore_Audio.am
include Makefile_Ecore_Avahi.am
@ -69,7 +71,6 @@ include Makefile_Ethumb.am
include Makefile_Ethumb_Client.am
include Makefile_Elocation.am
include Makefile_Elementary.am
include Makefile_Elput.am
include Makefile_Cxx.am
include Makefile_Eolian_Cxx.am

View File

@ -0,0 +1,25 @@
if HAVE_ECORE_DRM2
### Library
lib_LTLIBRARIES += lib/ecore_drm2/libecore_drm2.la
installed_ecoredrm2mainheadersdir = $(includedir)/ecore-drm2-@VMAJ@
dist_installed_ecoredrm2mainheaders_DATA = \
lib/ecore_drm2/Ecore_Drm2.h
lib_ecore_drm2_libecore_drm2_la_SOURCES = \
lib/ecore_drm2/ecore_drm2.c \
lib/ecore_drm2/ecore_drm2_private.h
lib_ecore_drm2_libecore_drm2_la_CPPFLAGS = \
-I$(top_builddir)/src/lib/efl \
@ECORE_DRM2_CFLAGS@ @EFL_CFLAGS@ \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
-DMODULE_ARCH=\"$(MODULE_ARCH)\"
lib_ecore_drm2_libecore_drm2_la_LIBADD = @ECORE_DRM2_LIBS@
lib_ecore_drm2_libecore_drm2_la_DEPENDENCIES = @ECORE_DRM2_INTERNAL_LIBS@
lib_ecore_drm2_libecore_drm2_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
endif

View File

@ -271,11 +271,13 @@ modules_ecore_evas_engines_drm_module_la_CPPFLAGS = -I$(top_builddir)/src/lib/ef
@ECORE_EVAS_CFLAGS@ \
@ECORE_DRM_CFLAGS@ \
-I$(top_srcdir)/src/modules/evas/engines/drm \
-I$(top_srcdir)/src/modules/evas/engines/gl_drm \
@ecore_evas_engines_gl_drm_cflags@
modules_ecore_evas_engines_drm_module_la_LIBADD = @USE_ECORE_EVAS_LIBS@ \
@ecore_evas_engines_gl_drm_libs@
modules_ecore_evas_engines_drm_module_la_DEPENDENCIES = @USE_ECORE_EVAS_INTERNAL_LIBS@
-I$(top_srcdir)/src/modules/evas/engines/gl_drm
modules_ecore_evas_engines_drm_module_la_LIBADD = \
@USE_ECORE_EVAS_LIBS@ \
@USE_ECORE_DRM2_LIBS@
modules_ecore_evas_engines_drm_module_la_DEPENDENCIES = \
@USE_ECORE_EVAS_INTERNAL_LIBS@ \
@USE_ECORE_DRM2_INTERNAL_LIBS@
modules_ecore_evas_engines_drm_module_la_LDFLAGS = -module @EFL_LTMODULE_FLAGS@
modules_ecore_evas_engines_drm_module_la_LIBTOOLFLAGS = --tag=disable-static
endif

View File

@ -0,0 +1,74 @@
#ifndef _ECORE_DRM2_H
# define _ECORE_DRM2_H
# include <Ecore.h>
# include <Elput.h>
# ifdef EAPI
# undef EAPI
# endif
# ifdef _MSC_VER
# ifdef BUILDING_DLL
# define EAPI __declspec(dllexport)
# else // ifdef BUILDING_DLL
# define EAPI __declspec(dllimport)
# endif // ifdef BUILDING_DLL
# else // ifdef _MSC_VER
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else // if __GNUC__ >= 4
# define EAPI
# endif // if __GNUC__ >= 4
# else // ifdef __GNUC__
# define EAPI
# endif // ifdef __GNUC__
# endif // ifdef _MSC_VER
# ifdef EFL_BETA_API_SUPPORT
/**
* @file
* @brief Ecore functions for dealing with drm, virtual terminals
*
* @defgroup Ecore_Drm2_Group Ecore_Drm2 - Drm Integration
* @ingroup Ecore
*
* Ecore_Drm2 provides a wrapper and functions for using libdrm
*
* @li @ref Ecore_Drm2_Init_Group
* @li @ref Ecore_Drm2_Device_Group
*/
/**
* @defgroup Ecore_Drm2_Init_Group Drm library Init and Shutdown functions
*
* Functions that start and shutdown the Ecore_Drm2 library
*/
/**
* Initialize the Ecore_Drm2 library
*
* @return The number of times the library has been initialized without
* being shut down. 0 is returned if an error occurs.
*
* @ingroup Ecore_Drm2_Init_Group
* @since 1.18
*/
EAPI int ecore_drm2_init(void);
/**
* Shutdown the Ecore_Drm2 library
*
* @return The number of times the library has been initialized without
* being shutdown. 0 is returned if an error occurs.
*
* @ingroup Ecore_Drm2_Init_Group
* @since 1.18
*/
EAPI int ecore_drm2_shutdown(void);
# endif
#endif

View File

@ -0,0 +1,74 @@
#include "ecore_drm2_private.h"
static int _ecore_drm2_init_count = 0;
int _ecore_drm2_log_dom = -1;
EAPI int
ecore_drm2_init(void)
{
if (++_ecore_drm2_init_count != 1) return _ecore_drm2_init_count;
if (!eina_init()) goto eina_err;
if (!ecore_init())
{
EINA_LOG_ERR("Could not initialize Ecore library");
goto ecore_err;
}
if (!eeze_init())
{
EINA_LOG_ERR("Could not initialize Eeze library");
goto eeze_err;
}
if (!elput_init())
{
EINA_LOG_ERR("Could not initialize Elput library");
goto elput_err;
}
_ecore_drm2_log_dom =
eina_log_domain_register("ecore_drm2", ECORE_DRM2_DEFAULT_LOG_COLOR);
if (!_ecore_drm2_log_dom)
{
EINA_LOG_ERR("Could not create logging domain for Ecore_Drm2");
goto log_err;
}
return _ecore_drm2_init_count;
log_err:
elput_shutdown();
elput_err:
eeze_shutdown();
eeze_err:
ecore_shutdown();
ecore_err:
eina_shutdown();
eina_err:
return --_ecore_drm2_init_count;
}
EAPI int
ecore_drm2_shutdown(void)
{
if (_ecore_drm2_init_count < 1)
{
ERR("Ecore_Drm2 shutdown called without init");
return 0;
}
if (--_ecore_drm2_init_count != 0) return _ecore_drm2_init_count;
eina_log_domain_unregister(_ecore_drm2_log_dom);
_ecore_drm2_log_dom = -1;
elput_shutdown();
eeze_shutdown();
ecore_shutdown();
eina_shutdown();
return _ecore_drm2_init_count;
}

View File

@ -0,0 +1,58 @@
#ifndef _ECORE_DRM2_PRIVATE_H
# define _ECORE_DRM2_PRIVATE_H
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
# include "Ecore.h"
# include "ecore_private.h"
# include "Eeze.h"
# include "Elput.h"
# include <Ecore_Drm2.h>
# include <unistd.h>
# include <strings.h>
# include <sys/mman.h>
# include <fcntl.h>
# include <ctype.h>
# include <sys/ioctl.h>
# include <xf86drm.h>
# include <xf86drmMode.h>
# include <drm_mode.h>
# include <drm_fourcc.h>
extern int _ecore_drm2_log_dom;
# ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
# undef ECORE_DRM2_DEFAULT_LOG_COLOR
# endif
# define ECORE_DRM2_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
# ifdef ERR
# undef ERR
# endif
# define ERR(...) EINA_LOG_DOM_ERR(_ecore_drm2_log_dom, __VA_ARGS__)
# ifdef DBG
# undef DBG
# endif
# define DBG(...) EINA_LOG_DOM_DBG(_ecore_drm2_log_dom, __VA_ARGS__)
# ifdef INF
# undef INF
# endif
# define INF(...) EINA_LOG_DOM_INFO(_ecore_drm2_log_dom, __VA_ARGS__)
# ifdef WRN
# undef WRN
# endif
# define WRN(...) EINA_LOG_DOM_WARN(_ecore_drm2_log_dom, __VA_ARGS__)
# ifdef CRIT
# undef CRIT
# endif
# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
#endif