@@ -516,4 +516,28 @@ if get_option('default_library') == 'both'
NOTE: DPDK always builds both shared and static libraries. Please set
"default_library" to either "static" or "shared" to select default linkage
for apps and any examples.''')
+elif get_option('default_library') == 'shared' and is_windows and not is_ms_compiler
+ error( '''
+ Unsupported value "shared" for "default_library" option.
+
+ NOTE: DPDK Windows shared is only supported when building with MSVC. Please set
+ "default_library" to either "static" or use MSVC.''')
+endif
+
+is_shared_enabled=true
+install_static = true
+install_shared = true
+if is_windows
+ install_static = get_option('default_library') == 'static'
+ install_shared = get_option('default_library') == 'shared'
+ if not is_ms_compiler or not install_shared
+ is_shared_enabled = false
+ else
+ # building shared libraries
+ dpdk_conf.set('RTE_BUILD_SHARED_LIB', true)
+
+ # enable export / import of thread_local variables
+ add_project_arguments('/experimental:tlsDllInterface', language: 'c')
+ add_project_link_arguments('/experimental:tlsDllInterface', language: 'c')
+ endif
endif
@@ -247,7 +247,7 @@ foreach subpath:subdirs
include_directories: includes,
dependencies: static_deps,
c_args: cflags,
- install: true)
+ install: install_static)
# now build the shared driver
version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), drv_path)
@@ -271,48 +271,39 @@ foreach subpath:subdirs
endif
endif
- if is_windows
- if is_ms_linker
+ if is_shared_enabled
+ if is_ms_compiler
def_file = custom_target(lib_name + '_def',
command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
input: version_map,
output: '@0@_exports.def'.format(lib_name))
lk_deps += [def_file]
-
- lk_args = ['-Wl,/def:' + def_file.full_path()]
- if meson.version().version_compare('<0.54.0')
- lk_args += ['-Wl,/implib:drivers\\lib' + lib_name + '.dll.a']
- endif
+ lk_args = ['/def:' + def_file.full_path()]
else
- mingw_map = custom_target(lib_name + '_mingw',
- command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
- input: version_map,
- output: '@0@_mingw.map'.format(lib_name))
- lk_deps += [mingw_map]
-
- lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+ lk_args = ['-Wl,--version-script=' + version_map]
endif
- else
- lk_args = ['-Wl,--version-script=' + version_map]
endif
- shared_lib = shared_library(lib_name, sources,
- objects: objs,
- include_directories: includes,
- dependencies: shared_deps,
- c_args: cflags,
- link_args: lk_args,
- link_depends: lk_deps,
- version: abi_version,
- soversion: so_version,
- install: true,
- install_dir: driver_install_path)
-
- # create a dependency object and add it to the global dictionary so
- # testpmd or other built-in apps can find it if necessary
- shared_dep = declare_dependency(link_with: shared_lib,
- include_directories: includes,
- dependencies: shared_deps)
+ shared_dep = {}
+ if is_shared_enabled
+ shared_lib = shared_library(lib_name, sources,
+ objects: objs,
+ include_directories: includes,
+ dependencies: shared_deps,
+ c_args: cflags,
+ link_args: lk_args,
+ link_depends: lk_deps,
+ version: abi_version,
+ soversion: so_version,
+ install: install_shared,
+ install_dir: driver_install_path)
+
+ # create a dependency object and add it to the global dictionary so
+ # testpmd or other built-in apps can find it if necessary
+ shared_dep = declare_dependency(link_with: shared_lib,
+ include_directories: includes,
+ dependencies: shared_deps)
+ endif
static_dep = declare_dependency(
include_directories: includes,
dependencies: static_deps)
@@ -242,11 +242,13 @@ foreach l:libraries
c_args: cflags,
dependencies: static_deps,
include_directories: includes,
- install: true)
+ install: install_static)
static_dep = declare_dependency(
include_directories: includes,
dependencies: static_deps)
+ dpdk_static_libraries = [static_lib] + dpdk_static_libraries
+
if not use_function_versioning or is_windows
# use pre-build objects to build shared lib
sources = []
@@ -260,33 +262,14 @@ foreach l:libraries
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_shared_enabled
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
- if is_windows
- mingw_map = custom_target(libname + '_mingw',
+ def_file = custom_target(libname + '_def',
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()]
+ output: '@0@_exports.def'.format(libname))
+ lk_deps += [def_file]
+ lk_args = ['/def:' + def_file.full_path()]
else
lk_args = ['-Wl,--version-script=' + version_map]
endif
@@ -304,23 +287,25 @@ foreach l:libraries
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_dep = {}
+ if is_shared_enabled
+ 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: install_shared)
+ 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
+ endif
set_variable('shared_rte_' + name, shared_dep)
set_variable('static_rte_' + name, static_dep)