From 92b049b4d7e70666b790ba78480da8f19c795b1c Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sun, 10 May 2020 14:43:28 +0200 Subject: [PATCH] build: time for efl-one 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 Differential Revision: https://phab.enlightenment.org/D11808 --- meson.build | 129 ++++++++++++++++++++++----------- meson_options.txt | 6 ++ src/lib/ecore_evas/meson.build | 3 + src/lib/evas/meson.build | 2 + 4 files changed, 98 insertions(+), 42 deletions(-) diff --git a/meson.build b/meson.build index 330694951c..1533d984f7 100644 --- a/meson.build +++ b/meson.build @@ -295,48 +295,48 @@ 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_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_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_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_wayland' ,['wl-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') @@ -498,9 +524,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 @@ -523,13 +560,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 diff --git a/meson_options.txt b/meson_options.txt index 0d07d396fc..159f2c2649 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -364,3 +364,9 @@ option('mono-friend-assemblies', value : [], description : 'List of friend assemblies that can access efl_mono assembly\'s internal types and members.' ) + +option('efl-one', + type: 'boolean', + value : false, + description : 'Build special set of .so´s as a single .so' +) diff --git a/src/lib/ecore_evas/meson.build b/src/lib/ecore_evas/meson.build index 554c77cf44..2ce2b0fcd2 100644 --- a/src/lib/ecore_evas/meson.build +++ b/src/lib/ecore_evas/meson.build @@ -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'))] diff --git a/src/lib/evas/meson.build b/src/lib/evas/meson.build index 5799685e87..0ff0535e4f 100644 --- a/src/lib/evas/meson.build +++ b/src/lib/evas/meson.build @@ -320,3 +320,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