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 @@ @@ -1,7 +1,8 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string>
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string();
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
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 __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;
template class std::char_traits<char>;
template class std::allocator<char>;
template class std::basic_string<char, std::char_traits<char>, std::allocator<char>>;

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

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

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

@ -1,7 +1,8 @@ @@ -1,7 +1,8 @@
#define _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
#include <string>
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string();
template __attribute__((visibility("default"))) std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string() noexcept;
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 __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;
template class std::char_traits<char>;
template class std::allocator<char>;
template class std::basic_string<char, std::char_traits<char>, std::allocator<char>>;

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

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

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

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

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

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

12
src/Generator/Passes/SymbolsCodeGenerator.cs

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

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

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

Loading…
Cancel
Save