DPDK patches and discussions
 help / color / mirror / Atom feed
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


  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).