Browse Source

Exported all additional symbols on macOS.

Many functions in libc++ are marked with _LIBCPP_INLINE_VISIBILITY. This means they are only exported when actually used. This is why exporting just the templates themselves failed to export their functions but listing the functions themselves worked. We need to define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS to have the functions always exported.

We use _LIBCPP_VERSION to detect if we use libc++ i.e. Clang's standard C++ library.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1149/head
Dimitar Dobrev 7 years ago
parent
commit
32da859711
  1. 9
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp
  2. 2
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp
  3. 9
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp
  4. 2
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp
  5. 2
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp
  6. 2
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp
  7. 12
      src/Generator/Passes/SymbolsCodeGenerator.cs
  8. 2
      src/Generator/Types/Std/Stdlib.cs

9
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/Std-symbols.cpp

@ -1,7 +1,8 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(); template class std::char_traits<char>;
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept; template class std::allocator<char>;
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>::value_type*); template class std::basic_string<char, std::char_traits<char>, std::allocator<char>>;
template __attribute__((visibility("default"))) const std::basic_string<char, std::char_traits<char>, std::allocator<char>>::value_type* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::c_str() const noexcept;

2
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std-symbols.cpp

@ -1,3 +1,5 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>

9
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/Std-symbols.cpp

@ -1,7 +1,8 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(); template class std::char_traits<char>;
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept; template class std::allocator<char>;
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>& std::basic_string<char, std::char_traits<char>, std::allocator<char>>::assign(const std::basic_string<char, std::char_traits<char>, std::allocator<char>>::value_type*); template class std::basic_string<char, std::char_traits<char>, std::allocator<char>>;
template __attribute__((visibility("default"))) const std::basic_string<char, std::char_traits<char>, std::allocator<char>>::value_type* std::basic_string<char, std::char_traits<char>, std::allocator<char>>::c_str() const noexcept;

2
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/Std-symbols.cpp

@ -1,3 +1,5 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>

2
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std-symbols.cpp

@ -1,3 +1,5 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>

2
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std-symbols.cpp

@ -1,3 +1,5 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string> #include <string>

12
src/Generator/Passes/SymbolsCodeGenerator.cs

@ -5,7 +5,6 @@ using System.Text;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.AST.Extensions; using CppSharp.AST.Extensions;
using CppSharp.Generators; using CppSharp.Generators;
using CppSharp.Parser;
namespace CppSharp.Passes namespace CppSharp.Passes
{ {
@ -20,6 +19,9 @@ namespace CppSharp.Passes
public override void Process() public override void Process()
{ {
WriteLine("#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS");
NewLine();
if (TranslationUnit.Module == Options.SystemModule) if (TranslationUnit.Module == Options.SystemModule)
WriteLine("#include <string>"); WriteLine("#include <string>");
else else
@ -62,12 +64,8 @@ namespace CppSharp.Passes
private string GetExporting() private string GetExporting()
{ {
var exporting = string.Empty; return Context.ParserOptions.IsMicrosoftAbi ?
if (Context.ParserOptions.IsMicrosoftAbi) "__declspec(dllexport) " : string.Empty;
exporting = "__declspec(dllexport) ";
else if (TargetTriple.IsMacOS(Context.ParserOptions.TargetTriple))
exporting = "__attribute__((visibility(\"default\"))) ";
return exporting;
} }
private string GetWrapper(Module module) private string GetWrapper(Module module)

2
src/Generator/Types/Std/Stdlib.cs

@ -137,7 +137,7 @@ namespace CppSharp.Types.Std
ctx.Before.WriteLine($@"{qualifiedBasicString}Extensions.{ ctx.Before.WriteLine($@"{qualifiedBasicString}Extensions.{
assign.Name}({varBasicString}, {ctx.Parameter.Name});"); assign.Name}({varBasicString}, {ctx.Parameter.Name});");
ctx.Return.Write($"{varBasicString}.{Helpers.InstanceIdentifier}"); ctx.Return.Write($"{varBasicString}.{Helpers.InstanceIdentifier}");
if (!type.IsAddress()) if (!type.IsPointer())
ctx.Cleanup.WriteLine($"{varBasicString}.Dispose(false);"); ctx.Cleanup.WriteLine($"{varBasicString}.Dispose(false);");
} }
} }

Loading…
Cancel
Save