DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, david.marchand@redhat.com, bluca@debian.org,
	Bruce Richardson <bruce.richardson@intel.com>
Subject: [dpdk-dev] [RFC PATCH 02/14] build: simplify library build file
Date: Thu,  1 Apr 2021 12:49:57 +0100
Message-ID: <20210401115009.1063844-3-bruce.richardson@intel.com> (raw)
In-Reply-To: <20210401115009.1063844-1-bruce.richardson@intel.com>

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 <bruce.richardson@intel.com>
---
 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 = '<unknown 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 = '<unknown 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


  parent reply	other threads:[~2021-04-01 11:50 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-01 11:49 [dpdk-dev] [RFC PATCH 00/14] Build file update proposals Bruce Richardson
2021-04-01 11:49 ` [dpdk-dev] [RFC PATCH 01/14] editorconfig: add entry for meson files Bruce Richardson
2021-04-01 11:49 ` Bruce Richardson [this message]
2021-04-01 11:49 ` [dpdk-dev] [RFC PATCH 03/14] build: correct indentation in list of libs Bruce Richardson
2021-04-01 13:30   ` Thomas Monjalon
2021-04-01 14:01     ` Bruce Richardson
2021-04-01 11:49 ` [dpdk-dev] [RFC PATCH 04/14] build: simplify the driver build configuration file Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 05/14] build: clean up driver list indentation Bruce Richardson
2021-04-01 12:14   ` Andrew Rybchenko
2021-04-01 12:33     ` Bruce Richardson
2021-04-01 12:40       ` Andrew Rybchenko
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 06/14] build: reduce indentation in app build spec Bruce Richardson
2021-04-01 13:32   ` Thomas Monjalon
2021-04-01 14:05     ` Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 07/14] build: reduce indentation in examples " Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 08/14] build: change infrastructure file tabs to spaces Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 09/14] lib: change meson " Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 10/14] drivers: " Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 11/14] examples: " Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 12/14] app: " Bruce Richardson
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 13/14] lib: remove librte_ prefix from directory names Bruce Richardson
2021-04-01 13:42   ` Thomas Monjalon
2021-04-01 11:50 ` [dpdk-dev] [RFC PATCH 14/14] lib: allow disabling optional libraries Bruce Richardson
2021-04-01 12:27 ` [dpdk-dev] [RFC PATCH 00/14] Build file update proposals Andrew Rybchenko
2021-04-01 13:15   ` Luca Boccassi
2021-04-01 13:36 ` Thomas Monjalon
2021-04-01 14:10   ` Bruce Richardson
2021-04-16 17:04 ` [dpdk-dev] [PATCH 00/14] Build file updates Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 01/14] build: simplify library build file Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 02/14] build: tidy up list of libraries to build Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 03/14] build: simplify the driver build configuration file Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 04/14] build: clean up driver lists Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 05/14] build: reduce indentation in app build spec Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 06/14] build: reduce indentation in examples " Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 07/14] build: change infrastructure file tabs to spaces Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 08/14] lib: cleanup whitespace in meson build files Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 09/14] drivers: change meson file tabs to spaces Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 10/14] examples: " Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 11/14] app: " Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 12/14] editorconfig: add entry for meson files Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 13/14] lib: remove librte_ prefix from directory names Bruce Richardson
2021-04-16 17:04   ` [dpdk-dev] [PATCH 14/14] lib: allow disabling optional libraries Bruce Richardson
2021-04-18  8:45   ` [dpdk-dev] [PATCH 00/14] Build file updates Xueming(Steven) Li
2021-04-19 13:06     ` Bruce Richardson
2021-04-21 13:01       ` Xueming(Steven) Li
2021-04-21 15:52         ` Xueming(Steven) Li
2021-04-19  0:20   ` Thomas Monjalon
2021-04-19 13:09     ` Bruce Richardson
2021-04-19 13:47       ` Thomas Monjalon
2021-04-19 14:23         ` Bruce Richardson
2021-04-20 10:22 ` [dpdk-dev] [PATCH v2 00/16] " Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 01/16] build: simplify library build file Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 02/16] build: tidy up list of libraries to build Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 03/16] build: simplify the driver build configuration file Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 04/16] build: clean up driver lists Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 05/16] build: reduce indentation in app build spec Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 06/16] build: reduce indentation in examples " Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 07/16] build: change infrastructure file tabs to spaces Bruce Richardson
2021-04-27 19:16     ` David Christensen
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 08/16] lib: cleanup whitespace in meson build files Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 09/16] drivers: change meson file tabs to spaces Bruce Richardson
2021-04-21  1:48     ` Xu, Rosen
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 10/16] examples: " Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 11/16] app: " Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 12/16] editorconfig: add entry for meson files Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 13/16] doc: add meson coding style section to contributors guide Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 14/16] lib: remove librte_ prefix from directory names Bruce Richardson
2021-04-28 20:18     ` David Christensen
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 15/16] devtools: add script to ease backport of renamed files Bruce Richardson
2021-04-20 10:22   ` [dpdk-dev] [PATCH v2 16/16] lib: allow disabling optional libraries Bruce Richardson
2021-04-21 12:08   ` [dpdk-dev] [PATCH v2 00/16] Build file updates Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210401115009.1063844-3-bruce.richardson@intel.com \
    --to=bruce.richardson@intel.com \
    --cc=bluca@debian.org \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git