From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 497D9A0548; Thu, 1 Apr 2021 13:50:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2A00E1410CD; Thu, 1 Apr 2021 13:50:25 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 81F151410CD for ; Thu, 1 Apr 2021 13:50:23 +0200 (CEST) IronPort-SDR: xhBrWHizch05W2XOt0UXBF5f2ZpeZVrMhu06jXCsArnqvismFnNdlSX8/1HvnmQFs3e8FpVVPW EGkE16HJeEZg== X-IronPort-AV: E=McAfee;i="6000,8403,9940"; a="179760774" X-IronPort-AV: E=Sophos;i="5.81,296,1610438400"; d="scan'208";a="179760774" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2021 04:50:22 -0700 IronPort-SDR: oY39BEF6rRqHGNJiXUr+ZFTnPWGfuaOXXYJo81lHUzfBmh5W3QP9ckR2+yaeSQL9MGvX/X/rs1 fjor1jMfnUwg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,296,1610438400"; d="scan'208";a="446062593" Received: from silpixa00399126.ir.intel.com ([10.237.223.116]) by FMSMGA003.fm.intel.com with ESMTP; 01 Apr 2021 04:50:20 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: thomas@monjalon.net, david.marchand@redhat.com, bluca@debian.org, Bruce Richardson Date: Thu, 1 Apr 2021 12:49:57 +0100 Message-Id: <20210401115009.1063844-3-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210401115009.1063844-1-bruce.richardson@intel.com> References: <20210401115009.1063844-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [RFC PATCH 02/14] build: simplify library build file X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Two simplifications can be made to the build file which reduce indentation levels and make it easier to read: 1. When meson build support was first added, the compat library existed in DPDK as a single header file. Since that header has been merged into EAL, we no longer need to support header-only libraries, so can shorten the code. 2. From meson 0.49 onwards we have the "continue" keyword available to break out of one loop iteration and begin the next. This allows us to remove blocks in the build configuration file which were conditional on the "build" variable being true. Instead we can use "continue" to abort processing at the point where the "build" value becomes false. Since this patch changes the indentation level of large parts of the meson.build file, we use the opportunity to adjust the whitespace used to the meson-standard 4-spec indentation level. Signed-off-by: Bruce Richardson --- lib/meson.build | 291 +++++++++++++++++++++++------------------------- 1 file changed, 141 insertions(+), 150 deletions(-) diff --git a/lib/meson.build b/lib/meson.build index 7712aa4977..70a9ef0a0e 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -54,159 +54,150 @@ default_cflags += ['-DALLOW_EXPERIMENTAL_API'] default_cflags += ['-DALLOW_INTERNAL_API'] if cc.has_argument('-Wno-format-truncation') - default_cflags += '-Wno-format-truncation' + default_cflags += '-Wno-format-truncation' endif enabled_libs = [] # used to print summary at the end foreach l:libraries - build = true - reason = '' # set if build == false to explain why - name = l - use_function_versioning = false - sources = [] - headers = [] - indirect_headers = [] # public headers not directly included by apps - includes = [] - cflags = default_cflags - objs = [] # other object files to link against, used e.g. for - # instruction-set optimized versions of code - - # use "deps" for internal DPDK dependencies, and "ext_deps" for - # external package/library requirements - ext_deps = [] - deps = [] - # eal is standard dependency once built - if dpdk_conf.has('RTE_LIB_EAL') - deps += ['eal'] - endif - - dir_name = 'librte_' + l - subdir(dir_name) - - if build - shared_deps = ext_deps - static_deps = ext_deps - foreach d:deps - if not is_variable('shared_rte_' + d) - error('Missing internal dependency "@0@" for @1@ [@2@]' - .format(d, name, 'lib/' + dir_name)) - endif - shared_deps += [get_variable('shared_rte_' + d)] - static_deps += [get_variable('static_rte_' + d)] - endforeach - endif - - if not build - dpdk_libs_disabled += name - set_variable(name.underscorify() + '_disable_reason', reason) - else - enabled_libs += name - dpdk_conf.set('RTE_LIB_' + name.to_upper(), 1) - install_headers(headers) - install_headers(indirect_headers) - dpdk_chkinc_headers += headers - - libname = 'rte_' + name - includes += include_directories(dir_name) - - if sources.length() == 0 - # if no C files, just set a dependency on header path - shared_dep = declare_dependency(include_directories: includes) - static_dep = shared_dep - else - if is_windows and use_function_versioning - message('@0@: Function versioning is not supported by Windows.' - .format(name)) - endif - - if use_function_versioning - cflags += '-DRTE_USE_FUNCTION_VERSIONING' - endif - - # first build static lib - static_lib = static_library(libname, - sources, - objects: objs, - c_args: cflags, - dependencies: static_deps, - include_directories: includes, - install: true) - static_dep = declare_dependency( - include_directories: includes, - dependencies: static_deps) - - if not use_function_versioning or is_windows - # use pre-build objects to build shared lib - sources = [] - objs += static_lib.extract_all_objects(recursive: false) - else - # for compat we need to rebuild with - # RTE_BUILD_SHARED_LIB defined - cflags += '-DRTE_BUILD_SHARED_LIB' - endif - version_map = '@0@/@1@/version.map'.format( - meson.current_source_dir(), dir_name) - implib = dir_name + '.dll.a' - - def_file = custom_target(libname + '_def', - command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], - input: version_map, - output: '@0@_exports.def'.format(libname)) - - mingw_map = custom_target(libname + '_mingw', - command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], - input: version_map, - output: '@0@_mingw.map'.format(libname)) - - if is_ms_linker - lk_args = ['-Wl,/def:' + def_file.full_path()] - if meson.version().version_compare('<0.54.0') - lk_args += ['-Wl,/implib:lib\\' + implib] - endif - else - if is_windows - lk_args = ['-Wl,--version-script=' + mingw_map.full_path()] - else - lk_args = ['-Wl,--version-script=' + version_map] - endif - endif - - lk_deps = [version_map, def_file, mingw_map] - if not is_windows - # on unix systems check the output of the - # check-symbols.sh script, using it as a - # dependency of the .so build - lk_deps += custom_target(name + '.sym_chk', - command: [check_symbols, - version_map, '@INPUT@'], - capture: true, - input: static_lib, - output: name + '.sym_chk') - endif - - shared_lib = shared_library(libname, - sources, - objects: objs, - c_args: cflags, - dependencies: shared_deps, - include_directories: includes, - link_args: lk_args, - link_depends: lk_deps, - version: abi_version, - soversion: so_version, - install: true) - shared_dep = declare_dependency(link_with: shared_lib, - include_directories: includes, - dependencies: shared_deps) - - dpdk_libraries = [shared_lib] + dpdk_libraries - dpdk_static_libraries = [static_lib] + dpdk_static_libraries - endif # sources.length() > 0 - - set_variable('shared_rte_' + name, shared_dep) - set_variable('static_rte_' + name, static_dep) - message('lib/@0@: Defining dependency "@1@"'.format( - dir_name, name)) - endif # if build + build = true + reason = '' # set if build == false to explain why + name = l + use_function_versioning = false + sources = [] + headers = [] + indirect_headers = [] # public headers not directly included by apps + includes = [] + cflags = default_cflags + objs = [] # other object files to link against, used e.g. for + # instruction-set optimized versions of code + + # use "deps" for internal DPDK dependencies, and "ext_deps" for + # external package/library requirements + ext_deps = [] + deps = [] + # eal is standard dependency once built + if dpdk_conf.has('RTE_LIB_EAL') + deps += ['eal'] + endif + + dir_name = 'librte_' + l + subdir(dir_name) + + if not build + dpdk_libs_disabled += name + set_variable(name.underscorify() + '_disable_reason', reason) + continue + endif + + shared_deps = ext_deps + static_deps = ext_deps + foreach d:deps + if not is_variable('shared_rte_' + d) + error('Missing internal dependency "@0@" for @1@ [@2@]' + .format(d, name, 'lib/' + dir_name)) + endif + shared_deps += [get_variable('shared_rte_' + d)] + static_deps += [get_variable('static_rte_' + d)] + endforeach + + enabled_libs += name + dpdk_conf.set('RTE_LIB_' + name.to_upper(), 1) + install_headers(headers) + install_headers(indirect_headers) + dpdk_chkinc_headers += headers + + libname = 'rte_' + name + includes += include_directories(dir_name) + + if is_windows and use_function_versioning + message('@0@: Function versioning is not supported by Windows.'.format(name)) + endif + + if use_function_versioning + cflags += '-DRTE_USE_FUNCTION_VERSIONING' + endif + + # first build static lib + static_lib = static_library(libname, + sources, + objects: objs, + c_args: cflags, + dependencies: static_deps, + include_directories: includes, + install: true) + static_dep = declare_dependency( + include_directories: includes, + dependencies: static_deps) + + if not use_function_versioning or is_windows + # use pre-build objects to build shared lib + sources = [] + objs += static_lib.extract_all_objects(recursive: false) + else + # for compat we need to rebuild with + # RTE_BUILD_SHARED_LIB defined + cflags += '-DRTE_BUILD_SHARED_LIB' + endif + version_map = '@0@/@1@/version.map'.format( + meson.current_source_dir(), dir_name) + implib = dir_name + '.dll.a' + + def_file = custom_target(libname + '_def', + command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], + input: version_map, + output: '@0@_exports.def'.format(libname)) + + mingw_map = custom_target(libname + '_mingw', + command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], + input: version_map, + output: '@0@_mingw.map'.format(libname)) + + if is_ms_linker + lk_args = ['-Wl,/def:' + def_file.full_path()] + if meson.version().version_compare('<0.54.0') + lk_args += ['-Wl,/implib:lib\\' + implib] + endif + else + if is_windows + lk_args = ['-Wl,--version-script=' + mingw_map.full_path()] + else + lk_args = ['-Wl,--version-script=' + version_map] + endif + endif + + lk_deps = [version_map, def_file, mingw_map] + if not is_windows + # on unix systems check the output of the + # check-symbols.sh script, using it as a + # dependency of the .so build + lk_deps += custom_target(name + '.sym_chk', + command: [check_symbols, + version_map, '@INPUT@'], + capture: true, + input: static_lib, + output: name + '.sym_chk') + endif + + shared_lib = shared_library(libname, + sources, + objects: objs, + c_args: cflags, + dependencies: shared_deps, + include_directories: includes, + link_args: lk_args, + link_depends: lk_deps, + version: abi_version, + soversion: so_version, + install: true) + shared_dep = declare_dependency(link_with: shared_lib, + include_directories: includes, + dependencies: shared_deps) + + dpdk_libraries = [shared_lib] + dpdk_libraries + dpdk_static_libraries = [static_lib] + dpdk_static_libraries + + set_variable('shared_rte_' + name, shared_dep) + set_variable('static_rte_' + name, static_dep) + message('lib/@0@: Defining dependency "@1@"'.format(dir_name, name)) endforeach -- 2.27.0