https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dc25409cbf4f90176b773af10849e94084130217

commit dc25409cbf4f90176b773af10849e94084130217
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Sat Nov 16 11:49:51 2024 +0200
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Sun Jan 19 09:02:58 2025 +0200

    [SPEC2DEF] Implement support for debug-only exports
---
 sdk/cmake/gcc.cmake           |  9 +++++++--
 sdk/cmake/msvc.cmake          |  9 +++++++--
 sdk/tools/spec2def/spec2def.c | 13 +++++++++++++
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake
index 1c994e2c51d..1a233c22d47 100644
--- a/sdk/cmake/gcc.cmake
+++ b/sdk/cmake/gcc.cmake
@@ -373,11 +373,16 @@ function(fixup_load_config _target)
         DEPENDS native-pefixup)
 endfunction()
 
+if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR
+   CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
+    set(__spec2def_dbg_arg "--dbg")
+endif()
+
 function(generate_import_lib _libname _dllname _spec_file __version_arg)
     # Generate the def for the import lib
     add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def
-        COMMAND native-spec2def ${__version_arg} -n=${_dllname} -a=${ARCH2} 
${ARGN} --implib -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def 
${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
+        COMMAND native-spec2def ${__version_arg} ${__spec2def_dbg_arg} 
-n=${_dllname} -a=${ARCH2} ${ARGN} --implib 
-d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def 
${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
 
     # With this, we let DLLTOOL create an import library
@@ -450,7 +455,7 @@ function(spec2def _dllname _spec_file)
     # Generate exports def and C stubs file for the DLL
     add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
-        COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} 
-d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
-s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} 
${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
+        COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} 
-d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
-s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} 
${__version_arg} ${__spec2def_dbg_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
 
     # Do not use precompiled headers for the stub file
diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake
index 16f3d3ea159..f9e768bfa0f 100644
--- a/sdk/cmake/msvc.cmake
+++ b/sdk/cmake/msvc.cmake
@@ -332,6 +332,11 @@ function(fixup_load_config _target)
     # msvc knows how to generate a load_config so no hacks here
 endfunction()
 
+if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR
+   CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
+    set(__spec2def_dbg_arg "--dbg")
+endif()
+
 function(generate_import_lib _libname _dllname _spec_file __version_arg)
 
     set(_def_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def)
@@ -341,7 +346,7 @@ function(generate_import_lib _libname _dllname _spec_file 
__version_arg)
     # Generate the def, asm stub and alias files
     add_custom_command(
         OUTPUT ${_asm_stubs_file} ${_def_file} ${_asm_impalias_file}
-        COMMAND native-spec2def --ms ${__version_arg} -a=${SPEC2DEF_ARCH} 
--implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} 
-i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
+        COMMAND native-spec2def --ms ${__version_arg} ${__spec2def_dbg_arg} 
-a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} 
-l=${_asm_stubs_file} -i=${_asm_impalias_file} 
${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
 
     # Compile the generated asm stub file
@@ -414,7 +419,7 @@ function(spec2def _dllname _spec_file)
     # Generate exports def and C stubs file for the DLL
     add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c
-        COMMAND native-spec2def --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} 
-d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
-s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} 
${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
+        COMMAND native-spec2def --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} 
-d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def 
-s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} 
${__version_arg} ${__spec2def_dbg_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
 
     # Do not use precompiled headers for the stub file
diff --git a/sdk/tools/spec2def/spec2def.c b/sdk/tools/spec2def/spec2def.c
index cd80dffafcc..df844ba9d55 100644
--- a/sdk/tools/spec2def/spec2def.c
+++ b/sdk/tools/spec2def/spec2def.c
@@ -67,6 +67,7 @@ int gbImportLib = 0;
 int gbNotPrivateNoWarn = 0;
 int gbTracing = 0;
 int giArch = ARCH_X86;
+int gbDbgExports = 0;
 char *pszArchString = "i386";
 char *pszArchString2;
 char *pszSourceFileName = NULL;
@@ -1162,6 +1163,13 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned 
*cExports)
 
                 } while (*pc == ',');
             }
+            else if (CompareToken(pc, "-dbg"))
+            {
+                if (!gbDbgExports)
+                {
+                    included = 0;
+                }
+            }
             else if (CompareToken(pc, "-private"))
             {
                 exp.uFlags |= FL_PRIVATE;
@@ -1505,6 +1513,7 @@ void usage(void)
            "  -s=<file>               generate a stub file\n"
            "  -i=<file>               generate an import alias file\n"
            "  --ms                    MSVC compatibility\n"
+           "  --dbg                   Enable debug exports\n"
            "  -n=<name>               name of the dll\n"
            "  --version=<version>     Sets the version to create exports for\n"
            "  --implib                generate a def file for an import 
library\n"
@@ -1571,6 +1580,10 @@ int main(int argc, char *argv[])
         {
             gbMSComp = 1;
         }
+        else if (strcasecmp(argv[i], "--dbg") == 0)
+        {
+            gbDbgExports = 1;
+        }
         else if (strcasecmp(argv[i], "--no-private-warnings") == 0)
         {
             gbNotPrivateNoWarn = 1;

Reply via email to