[1/3] buildtools: ignore exports for MSVC

Message ID 1710229908-31704-2-git-send-email-roretzla@linux.microsoft.com (mailing list archive)
State New
Delegated to: Thomas Monjalon
Headers
Series RFC fix import/export MSVC data variables |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing fail build patch failure

Commit Message

Tyler Retzlaff March 12, 2024, 7:51 a.m. UTC
  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@linux.microsoft.com>
---
 buildtools/map_to_win.py | 13 +++++++++----
 lib/meson.build          |  4 ++--
 2 files changed, 11 insertions(+), 6 deletions(-)
  

Patch

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@_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@_mingw.map'.format(libname))
             lk_deps += [mingw_map]