[PATCH 1/3] buildtools: ignore exports for MSVC
Tyler Retzlaff
roretzla at linux.microsoft.com
Tue Mar 12 08:51:46 CET 2024
Update map_to_def to allow exports to be ignored only when building with
MSVC. Some data variables need to be exported within code (not via .def)
file depending on their type so allow them to be ignored in the .map
file.
Signed-off-by: Tyler Retzlaff <roretzla at linux.microsoft.com>
---
buildtools/map_to_win.py | 13 +++++++++----
lib/meson.build | 4 ++--
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/buildtools/map_to_win.py b/buildtools/map_to_win.py
index aa1752c..2d547f8 100644
--- a/buildtools/map_to_win.py
+++ b/buildtools/map_to_win.py
@@ -4,9 +4,11 @@
import sys
+def is_function_line(ln, cc):
+ if not ln.startswith('\t') or ":" in ln or ";" not in ln:
+ return False
-def is_function_line(ln):
- return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln and "# WINDOWS_NO_EXPORT" not in ln
+ return not (cc == 'msvc' and "# MSVC_NO_EXPORT" in ln or "# WINDOWS_NO_EXPORT" in ln)
# MinGW keeps the original .map file but replaces per_lcore* to __emutls_v.per_lcore*
def create_mingw_map_file(input_map, output_map):
@@ -27,9 +29,12 @@ def main(args):
# This works taking indented lines only which end with a ";" and which don't
# have a colon in them, i.e. the lines defining functions only.
else:
+ cc = 'notmsvc'
+ if len(args) == 4:
+ cc = args[3]
with open(args[1]) as f_in:
- functions = [ln[:-2] + '\n' for ln in sorted(f_in.readlines())
- if is_function_line(ln)]
+ functions = [ln.split(';', 1)[0] + '\n' for ln in sorted(f_in.readlines())
+ if is_function_line(ln, cc)]
functions = ["EXPORTS\n"] + functions
with open(args[2], 'w') as f_out:
diff --git a/lib/meson.build b/lib/meson.build
index 179a272..f8836a4 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -262,7 +262,7 @@ foreach l:libraries
if is_ms_linker
def_file = custom_target(libname + '_def',
- command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+ command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@', cc.get_id()],
input: version_map,
output: '@0 at _exports.def'.format(libname))
lk_deps += [def_file]
@@ -281,7 +281,7 @@ foreach l:libraries
else
if is_windows
mingw_map = custom_target(libname + '_mingw',
- command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+ command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@', cc.get_id()],
input: version_map,
output: '@0 at _mingw.map'.format(libname))
lk_deps += [mingw_map]
--
1.8.3.1
More information about the dev
mailing list