From: Paul Szczepanek <paul.szczepanek@arm.com>
To: thomas@monjalon.net
Cc: dev@dpdk.org, Paul Szczepanek <paul.szczepanek@arm.com>,
Dhruv Tripathi <Dhruv.Tripathi@arm.com>
Subject: [PATCH v1 1/1] lib: allow libraries with no sources
Date: Wed, 6 Mar 2024 22:17:09 +0000 [thread overview]
Message-ID: <20240306221709.166722-2-paul.szczepanek@arm.com> (raw)
In-Reply-To: <20240306221709.166722-1-paul.szczepanek@arm.com>
Allow header only libraries.
Signed-off-by: Paul Szczepanek <paul.szczepanek@arm.com>
Reviewed-by: Dhruv Tripathi <Dhruv.Tripathi@arm.com>
---
lib/meson.build | 176 +++++++++++++++++++++++++-----------------------
1 file changed, 91 insertions(+), 85 deletions(-)
diff --git a/lib/meson.build b/lib/meson.build
index 4fb01f059b..0fcf3336d1 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -220,105 +220,111 @@ foreach l:libraries
includes += include_directories(l)
dpdk_includes += include_directories(l)
- if developer_mode and is_windows and use_function_versioning
- message('@0@: Function versioning is not supported by Windows.'.format(name))
- endif
+ if sources.length() != 0
+ if developer_mode and 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
- cflags += '-DRTE_LOG_DEFAULT_LOGTYPE=lib.' + l
- if annotate_locks and cc.get_id() == 'clang' and cc.version().version_compare('>=3.5.0')
- cflags += '-DRTE_ANNOTATE_LOCKS'
- cflags += '-Wthread-safety'
- endif
+ if use_function_versioning
+ cflags += '-DRTE_USE_FUNCTION_VERSIONING'
+ endif
+ cflags += '-DRTE_LOG_DEFAULT_LOGTYPE=lib.' + l
+ if annotate_locks and cc.get_id() == 'clang' and cc.version().version_compare('>=3.5.0')
+ cflags += '-DRTE_ANNOTATE_LOCKS'
+ cflags += '-Wthread-safety'
+ 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)
+ # 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
+ 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(), l)
- lk_deps = [version_map]
+ version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
+ lk_deps = [version_map]
- if is_ms_linker
- def_file = custom_target(libname + '_def',
- command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
- input: version_map,
- output: '@0@_exports.def'.format(libname))
- lk_deps += [def_file]
+ if is_ms_linker
+ def_file = custom_target(libname + '_def',
+ command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+ input: version_map,
+ output: '@0@_exports.def'.format(libname))
+ lk_deps += [def_file]
- if is_ms_compiler
- lk_args = ['/def:' + def_file.full_path()]
- if meson.version().version_compare('<0.54.0')
- lk_args += ['/implib:lib\\librte_' + l + '.dll.a']
+ if is_ms_compiler
+ lk_args = ['/def:' + def_file.full_path()]
+ if meson.version().version_compare('<0.54.0')
+ lk_args += ['/implib:lib\\librte_' + l + '.dll.a']
+ endif
+ else
+ lk_args = ['-Wl,/def:' + def_file.full_path()]
+ if meson.version().version_compare('<0.54.0')
+ lk_args += ['-Wl,/implib:lib\\librte_' + l + '.dll.a']
+ endif
endif
else
- lk_args = ['-Wl,/def:' + def_file.full_path()]
- if meson.version().version_compare('<0.54.0')
- lk_args += ['-Wl,/implib:lib\\librte_' + l + '.dll.a']
+ if is_windows
+ mingw_map = custom_target(libname + '_mingw',
+ command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+ input: version_map,
+ output: '@0@_mingw.map'.format(libname))
+ lk_deps += [mingw_map]
+
+ lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+ else
+ lk_args = ['-Wl,--version-script=' + version_map]
endif
endif
- else
- if is_windows
- mingw_map = custom_target(libname + '_mingw',
- command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
- input: version_map,
- output: '@0@_mingw.map'.format(libname))
- lk_deps += [mingw_map]
- lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
- else
- lk_args = ['-Wl,--version-script=' + version_map]
+ if developer_mode and 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
- endif
-
- if developer_mode and 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)
+ 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
+ dpdk_libraries = [shared_lib] + dpdk_libraries
+ dpdk_static_libraries = [static_lib] + dpdk_static_libraries
+ else # 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
+ endif
set_variable('shared_rte_' + name, shared_dep)
set_variable('static_rte_' + name, static_dep)
--
2.25.1
next prev parent reply other threads:[~2024-03-06 22:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-06 22:17 [PATCH v1 0/1] " Paul Szczepanek
2024-03-06 22:17 ` Paul Szczepanek [this message]
2024-03-07 10:46 ` [PATCH v1 1/1] lib: " David Marchand
2024-03-07 11:42 ` Bruce Richardson
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=20240306221709.166722-2-paul.szczepanek@arm.com \
--to=paul.szczepanek@arm.com \
--cc=Dhruv.Tripathi@arm.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).