aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Michael <cpmichael@osg.samsung.com>2016-05-02 10:21:00 -0400
committerChris Michael <cpmichael@osg.samsung.com>2016-05-27 11:57:53 -0400
commita0d3b955bfa18e807ef1067aa612a63d99bf7681 (patch)
tree5a8b1671da7187b597f12b6b98e8e147ea3ac66e
parentefl - ecore c+ ecore-imf - fix odd case input when faking a real event (diff)
downloadefl-a0d3b955bfa18e807ef1067aa612a63d99bf7681.tar.gz
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>
-rw-r--r--Makefile.am4
-rw-r--r--configure.ac78
-rw-r--r--m4/efl.m43
-rw-r--r--pc/.gitignore1
-rw-r--r--pc/ecore-drm2.pc.in12
-rw-r--r--src/Makefile.am3
-rw-r--r--src/Makefile_Ecore_Drm2.am25
-rw-r--r--src/Makefile_Ecore_Evas.am12
-rw-r--r--src/lib/ecore_drm2/Ecore_Drm2.h74
-rw-r--r--src/lib/ecore_drm2/ecore_drm2.c74
-rw-r--r--src/lib/ecore_drm2/ecore_drm2_private.h58
11 files changed, 323 insertions, 21 deletions
diff --git a/Makefile.am b/Makefile.am
index 564f332993..1efae6ed10 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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 = \
diff --git a/configure.ac b/configure.ac
index cae4e39594..0912ac2e29 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/m4/efl.m4 b/m4/efl.m4
index c9e15f3537..f1694c58d5 100644
--- a/m4/efl.m4
+++ b/m4/efl.m4
@@ -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])}"
diff --git a/pc/.gitignore b/pc/.gitignore
index f66395b99d..893e9373c9 100644
--- a/pc/.gitignore
+++ b/pc/.gitignore
@@ -74,3 +74,4 @@
/efl-js.pc
/elementary-cxx.pc
/elput.pc
+/ecore-drm2.pc
diff --git a/pc/ecore-drm2.pc.in b/pc/ecore-drm2.pc.in
new file mode 100644
index 0000000000..4530eacab4
--- /dev/null
+++ b/pc/ecore-drm2.pc.in
@@ -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@
diff --git a/src/Makefile.am b/src/Makefile.am
index af019a7bc1..523f411037 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -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
diff --git a/src/Makefile_Ecore_Drm2.am b/src/Makefile_Ecore_Drm2.am
new file mode 100644
index 0000000000..2818b0e760
--- /dev/null
+++ b/src/Makefile_Ecore_Drm2.am
@@ -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
diff --git a/src/Makefile_Ecore_Evas.am b/src/Makefile_Ecore_Evas.am
index 12efc0b135..25af963eb2 100644
--- a/src/Makefile_Ecore_Evas.am
+++ b/src/Makefile_Ecore_Evas.am
@@ -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
diff --git a/src/lib/ecore_drm2/Ecore_Drm2.h b/src/lib/ecore_drm2/Ecore_Drm2.h
new file mode 100644
index 0000000000..b2bbd15e02
--- /dev/null
+++ b/src/lib/ecore_drm2/Ecore_Drm2.h
@@ -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
diff --git a/src/lib/ecore_drm2/ecore_drm2.c b/src/lib/ecore_drm2/ecore_drm2.c
new file mode 100644
index 0000000000..32b6781cc7
--- /dev/null
+++ b/src/lib/ecore_drm2/ecore_drm2.c
@@ -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;
+}
diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h
new file mode 100644
index 0000000000..6177e8e436
--- /dev/null
+++ b/src/lib/ecore_drm2/ecore_drm2_private.h
@@ -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