build: time for efl-one
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Sun, 10 May 2020 12:43:28 +0000 (14:43 +0200)
committerJongmin Lee <jm105.lee@samsung.com>
Thu, 28 May 2020 10:07:46 +0000 (19:07 +0900)
this is building parts of efl into a single .so and links all modules
and binaries to it.

The libraries themselfs are build as .a's which are linked together as
.so's. Which is required as every subproject has its little custom
c_flags, which are somtimes conflicting.

After the final .so is then built, all the split up libraries are
replaced with the efl-one. After that the modules and binaries are built
correctly with the correct link on the efl-one parts.

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D11808

Change-Id: Icbb8b0f60c2581e07c57e87ae66f44bc8c0e7de8

meson.build
meson_options.txt
src/lib/ecore_evas/meson.build
src/lib/evas/meson.build

index 1bf44ad..96a6ed1 100644 (file)
@@ -295,49 +295,49 @@ endif
 
 subprojects = [
 # name              |   option              | mod  | lib  | bin  | bench | tests | examples | true if build in efl-one | pkg-config options | name of static libs
-['evil'             ,[]                    , false,  true, false, false, false, false, false, [], []],
-['eina'             ,[]                    , false,  true,  true,  true,  true,  true, false,  [], []],
+['evil'             ,[]                    , false,  true, false, false, false, false,  true, [], []],
+['eina'             ,[]                    , false,  true,  true,  true,  true,  true,  true, [], []],
 ['eolian'           ,[]                    , false,  true,  true, false,  true, false, false, ['eina'], []],
-['eo'               ,[]                    , false,  true, false,  true,  true, false, false, ['eina'], []],
-['efl'              ,[]                    , false,  true, false, false,  true, false, false, ['eo'], []],
-['emile'            ,[]                    , false,  true, false, false,  true,  true, false, ['eina', 'efl'], ['lz4', 'rg_etc']],
-['eet'              ,[]                    , false,  true,  true, false,  true,  true, false, ['eina', 'emile', 'efl'], []],
-['ecore'            ,[]                    , false,  true, false, false, false, false, false, ['eina', 'eo', 'efl'], ['buildsystem']],
-['eldbus'           ,[]                    , false,  true,  true, false,  true,  true, false, ['eina', 'eo', 'efl'], []],
-['ecore'            ,[]                    ,  true, false, false, false,  true,  true, false, ['eina', 'eo', 'efl'], []], #ecores modules depend on eldbus
-['ecore_audio'      ,['audio']             , false,  true, false, false, false, false, false, ['eina', 'eo'], []],
+['eo'               ,[]                    , false,  true, false,  true,  true, false,  true, ['eina'], []],
+['efl'              ,[]                    , false,  true, false, false,  true, false,  true, ['eo'], []],
+['emile'            ,[]                    , false,  true, false, false,  true,  true,  true, ['eina', 'efl'], ['lz4', 'rg_etc']],
+['eet'              ,[]                    , false,  true,  true, false,  true,  true,  true, ['eina', 'emile', 'efl'], []],
+['ecore'            ,[]                    , false,  true, false, false, false, false,  true, ['eina', 'eo', 'efl'], ['buildsystem']],
+['eldbus'           ,[]                    , false,  true,  true, false,  true,  true,  true, ['eina', 'eo', 'efl'], []],
+['ecore'            ,[]                    ,  true, false, false, false,  true,  true,  true, ['eina', 'eo', 'efl'], []], #ecores modules depend on eldbus
+['ecore_audio'      ,['audio']             , false,  true, false, false, false, false,  true, ['eina', 'eo'], []],
 ['ecore_avahi'      ,['avahi']             , false,  true, false, false, false,  true, false, ['eina', 'ecore'], []],
-['ecore_con'        ,[]                    , false,  true,  true, false,  true, false, false, ['eina', 'eo', 'efl', 'ecore'], ['http-parser']],
-['ecore_file'       ,[]                    , false,  true, false, false, false, false, false, ['eina'], []],
-['eeze'             ,['eeze']              ,  true,  true,  true, false,  true, false, false, ['eina', 'efl'], []],
-['ecore_input'      ,[]                    , false,  true, false, false, false, false, false, ['eina', 'eo'], []],
-['ecore_x'          ,['x11']               , false,  true, false, false, false, false, false, ['eina', 'efl'], []],
-['ecore_fb'         ,['fb']                , false,  true, false, false, false, false, false, ['eina'], []],
+['ecore_con'        ,[]                    , false,  true,  true, false,  true, false,  true, ['eina', 'eo', 'efl', 'ecore'], ['http-parser']],
+['ecore_file'       ,[]                    , false,  true, false, false, false, false,  true, ['eina'], []],
+['eeze'             ,['eeze']              ,  true,  true,  true, false,  true, false,  true, ['eina', 'efl'], []],
+['ecore_input'      ,[]                    , false,  true, false, false, false, false,  true, ['eina', 'eo'], []],
+['ecore_x'          ,['x11']               , false,  true, false, false, false, false,  true, ['eina', 'efl'], []],
+['ecore_fb'         ,['fb']                , false,  true, false, false, false, false,  true, ['eina'], []],
 ['ecore_wayland'    ,['wl-deprecated']     , false,  true, false, false, false, false, false, ['eina'], []],
-['ecore_wl2'        ,['wl']                ,  true,  true, false, false, true, false, false, ['eina'], ['libdrm']],
-['ecore_sdl'        ,['sdl']               , false,  true, false, false, false, false, false, ['eina'], []],
-['ecore_win32'      ,[]                    , false,  true, false, false, false, false, false, ['eina'], []],
-['ecore_ipc'        ,[]                    , false,  true, false, false, false, false, false, ['eina'], []],
-['ecore_buffer'     ,['buffer']            ,  true,  true,  true, false, false, false, false, ['eina'], []],
-['ector'            ,[]                    , false,  true, false, false,  true, false, false, ['eina', 'efl'], ['draw', 'triangulator', 'freetype']],
-['elput'            ,['drm']               , false,  true, false, false,  true, false, false, ['eina', 'eldbus'], []],
-['ecore_drm2'       ,['drm']               , false,  true, false, false, false, false, false, ['ecore'], ['libdrm']],
-['ecore_cocoa'      ,['cocoa']             , false,  true, false, false, false, false, false, ['eina'], []],
-['evas'             ,[]                    ,  true,  true, false, false,  true,  true, false, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
-['efreet'           ,[]                    , false,  true, false, false,  true, false, false, ['eina', 'efl', 'eo'], []],
-['ecore_input_evas' ,[]                    , false,  true, false, false, false, false, false, ['eina', 'evas'], []],
-['ecore_evas'       ,[]                    ,  true,  true,  true, false, false, false, false, ['evas', 'ector'], []],
-['ecore_imf'        ,[]                    ,  true,  true, false, false, false, false, false, ['eina'], []],
-['embryo'           ,[]                    , false,  true,  true, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['eio'              ,[]                    , false,  true, false, false,  true,  true, false, ['eina', 'eet'], []],
-['efreet'           ,[]                    , false, false,  true, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['ecore_imf_evas'   ,[]                    , false,  true, false, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['ephysics'         ,['physics']           , false,  true, false, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['edje'             ,[]                    , false,  true,  true, false,  true,  true, false, ['evas', 'eo', 'efl', lua_pc_name], []],
-['emotion'          ,[]                    ,  true,  true, false, false,  true,  true, false, ['eina', 'efl', 'eo'], []],
-['ethumb'           ,[]                    ,  true,  true,  true, false, false, false, false, ['eina', 'efl', 'eo'], []],
-['ethumb_client'    ,[]                    , false,  true,  true, false, false,  true, false, ['eina', 'efl', 'eo', 'ethumb'], []],
-['elementary'       ,[]                    ,  true,  true,  true,  true,  true,  true, false, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio'], ['atspi']],
+['ecore_wl2'        ,['wl']                ,  true,  true, false, false,  true, false,  true, ['eina'], ['libdrm']],
+['ecore_sdl'        ,['sdl']               , false,  true, false, false, false, false,  true, ['eina'], []],
+['ecore_win32'      ,[]                    , false,  true, false, false, false, false,  true, ['eina'], []],
+['ecore_ipc'        ,[]                    , false,  true, false, false, false, false,  true, ['eina'], []],
+['ecore_buffer'     ,['buffer']            ,  true,  true,  true, false, false, false,  true, ['eina'], []],
+['ector'            ,[]                    , false,  true, false, false,  true, false,  true, ['eina', 'efl'], ['draw', 'triangulator', 'freetype']],
+['elput'            ,['drm']               , false,  true, false, false,  true, false,  true, ['eina', 'eldbus'], []],
+['ecore_drm2'       ,['drm']               , false,  true, false, false, false, false,  true, ['ecore'], ['libdrm']],
+['ecore_cocoa'      ,['cocoa']             , false,  true, false, false, false, false,  true, ['eina'], []],
+['evas'             ,[]                    ,  true,  true, false, false,  true,  true,  true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
+['efreet'           ,[]                    , false,  true, false, false,  true, false,  true, ['eina', 'efl', 'eo'], []],
+['ecore_input_evas' ,[]                    , false,  true, false, false, false, false,  true, ['eina', 'evas'], []],
+['ecore_evas'       ,[]                    ,  true,  true,  true, false, false, false,  true, ['evas', 'ector'], []],
+['ecore_imf'        ,[]                    ,  true,  true, false, false, false, false,  true, ['eina'], []],
+['embryo'           ,[]                    , false,  true,  true, false, false, false,  true, ['eina', 'efl', 'eo'], []],
+['eio'              ,[]                    , false,  true, false, false,  true,  true,  true, ['eina', 'eet'], []],
+['efreet'           ,[]                    , false, false,  true, false, false, false,  true, ['eina', 'efl', 'eo'], []],
+['ecore_imf_evas'   ,[]                    , false,  true, false, false, false, false,  true, ['eina', 'efl', 'eo'], []],
+['ephysics'         ,['physics']           , false,  true, false, false, false, false,  true, ['eina', 'efl', 'eo'], []],
+['edje'             ,[]                    , false,  true,  true, false,  true,  true,  true, ['evas', 'eo', 'efl', lua_pc_name], []],
+['emotion'          ,[]                    ,  true,  true, false, false,  true,  true,  true, ['eina', 'efl', 'eo'], []],
+['ethumb'           ,[]                    ,  true,  true,  true, false, false, false,  true, ['eina', 'efl', 'eo'], []],
+['ethumb_client'    ,[]                    , false,  true,  true, false, false,  true,  true, ['eina', 'efl', 'eo', 'ethumb'], []],
+['elementary'       ,[]                    ,  true,  true,  true,  true,  true,  true,  true, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio'], ['atspi']],
 ['efl_canvas_wl'    ,['wl']                , false,  true,  true, false, false, false, false, ['eina', 'efl', 'eo', 'evas', 'ecore'], []],
 ['elua'             ,['elua']              , false,  true,  true, false,  true, false, false, ['eina', 'luajit'], []],
 ['ecore_drm'        ,['drm-deprecated']    , false,  true, false, false, false, false, false, ['eina'], []],
@@ -357,6 +357,10 @@ ecore_audio = declare_dependency()
 
 test_dirs = []
 example_dirs = []
+efl_one_parts = []
+efl_one_deps = []
+efl_one_eo_deps = []
+efl_one_include_dirs = []
 tmp_empty = declare_dependency()
 
 foreach package : subprojects
@@ -406,6 +410,28 @@ foreach package : subprojects
       set_variable(package_name + '_eot_files', pub_eo_types_files)
       set_variable(package_name + '_header_subdirs', package_header_subdirs)
       set_variable(package_name + '_eo_subdirs', package_eo_subdirs)
+      if (package[8] and get_option('efl-one'))
+        src = get_variable(package_name+'_src')
+        external_deps = get_variable(package_name+'_ext_deps')
+        efl_one_include_dirs += [include_directories('.'), include_directories(join_paths(local_lib, package_name))]
+
+        foreach subdirs : package_eo_subdirs
+          efl_one_include_dirs += include_directories(join_paths(local_lib, package_name))
+        endforeach
+
+        tmp = static_library('efl_one_part_'+package_name,
+            src, pub_eo_file_target, priv_eo_file_target,
+            include_directories: efl_one_include_dirs,
+            dependencies: external_deps + efl_one_eo_deps,
+            c_args : package_c_args,
+        )
+        # dependency for all the .eo file targets
+        efl_one_eo_deps += declare_dependency(
+          sources: pub_eo_file_target,
+        )
+        efl_one_deps += external_deps
+        efl_one_parts += tmp
+      endif
     endif
     #special case for eolian, this is never efl-one, but will be required in the library
     if (package_name == 'eolian')
@@ -508,9 +534,20 @@ endif
 foreach package : subprojects
   package_name = package[0]
   if package[1].length() == 0 or get_option(package[1][0])
+    dir_package_include = join_paths(dir_include, package_version_name)
+    dir_package_modules = join_paths(dir_lib, package_name, 'modules')
+    package_c_args = [
+      '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+      '-DNEED_RUN_IN_TREE=1',
+      '-DEFL_BUILD=1',
+    ]
     if (package[2])
        subdir(join_paths(local_module, package_name))
     endif
+    package_c_args = [
+      '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
+      '-DNEED_RUN_IN_TREE=1',
+    ]
     if (package[4] and package_name != 'eolian')
        subdir(join_paths(local_bin, package_name))
     endif
@@ -536,13 +573,21 @@ if get_option('build-tests')
   check = dependency('check')
   subdir(join_paths('src', 'tests'))
   foreach test : test_dirs
-      subdir(join_paths(local_tests, test))
+    package_c_args = [
+      '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, test)+'"',
+      '-DNEED_RUN_IN_TREE=1',
+    ]
+    subdir(join_paths(local_tests, test))
   endforeach
 endif
 
 if get_option('build-examples')
   foreach example : example_dirs
-      subdir(join_paths(local_examples, example))
+    package_c_args = [
+      '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, example)+'"',
+      '-DNEED_RUN_IN_TREE=1',
+    ]
+    subdir(join_paths(local_examples, example))
   endforeach
 endif
 
index a001ff0..1fe94e4 100644 (file)
@@ -403,3 +403,9 @@ option('exactness',
   value : false,
   description : 'enable exactness that record and play eo event'
 )
+
+option('efl-one',
+  type: 'boolean',
+  value : false,
+  description : 'Build special set of .so´s as a single .so'
+)
index 554c77c..2ce2b0f 100644 (file)
@@ -52,3 +52,6 @@ ecore_evas = declare_dependency(
 install_headers(ecore_evas_header_src,
   install_dir : dir_package_include,
 )
+
+#a custom directory that must be added to efl_one
+efl_one_include_dirs += [include_directories(join_paths('..', '..', 'modules', 'evas', 'engines', 'buffer'))]
index f52c753..0e59ed5 100644 (file)
@@ -328,3 +328,5 @@ install_headers(evas_header_src,
 pub_eo_files = []
 package_eo_subdirs += ['canvas', 'gesture']
 package_header_subdirs += ['canvas', 'gesture']
+#special case becase evas has a more structures subfolder
+efl_one_include_dirs += evas_include_directories