Commit 0ffef2d8 authored by Kirill Smelkov's avatar Kirill Smelkov

*: Fix dll export annotation everywhere

We already try to annotate functions exported from DSOs as such.
However so far we were testing only on Linux and macOS where
-fvisibility=hidden is not the default, and thus linker forgives us
annotation mistakes. But on Windows the default is to have hidden
visibility out of the box and so the linker becomes strict about this.

-> Fix all issues caught there.

For example here is how it breaks if ~_interface() is not annotated properly:

    building 'golang.runtime.libpyxruntime' DSO as build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.dll
    ...
    Z:\home\kirr\src\tools\go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\bin\Hostx64\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:\Program Files\Python310\li
    bs" /LIBPATH:build\lib.win-amd64-cpython-310\golang\runtime /LIBPATH:z:\home\kirr\src\tools\go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\lib\x64 /LIBPATH:z:\home\kirr\src\tools\go\pygo-win\BuildTools\kits
    \10\lib\10.0.22000.0\ucrt\x64 /LIBPATH:z:\home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\lib\10.0.22000.0\um\x64 libgolang.lib build\temp.win-amd64-cpython-310\Release\golang/runtime/libpyxruntime.obj /OU
    T:build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.dll /IMPLIB:build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.lib
       Creating library build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.lib and object build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.exp

    libpyxruntime.obj : error LNK2001: unresolved external symbol "protected: __cdecl golang::_interface::~_interface(void)" (??1_interface@golang@@IEAA@XZ)
    build\lib.win-amd64-cpython-310\golang\runtime\libpyxruntime.dll : fatal error LNK1120: 1 unresolved externals
    error: command 'Z:\\home\\kirr\\src\\tools\\go\\pygo-win\\BuildTools\\vc\\tools\\msvc\\14.35.32215\\bin\\Hostx64\\x64\\link.exe' failed with exit code 1120
parent 3a83e8f6
...@@ -3,6 +3,7 @@ include golang/libgolang.h ...@@ -3,6 +3,7 @@ include golang/libgolang.h
include golang/runtime/libgolang.cpp include golang/runtime/libgolang.cpp
include golang/runtime/libpyxruntime.cpp include golang/runtime/libpyxruntime.cpp
include golang/pyx/runtime.h include golang/pyx/runtime.h
include golang/pyx/testprog/golang_dso_user/dsouser/dso.h
include golang/pyx/testprog/golang_dso_user/dsouser/dso.cpp include golang/pyx/testprog/golang_dso_user/dsouser/dso.cpp
include golang/runtime/internal.h include golang/runtime/internal.h
include golang/runtime/internal/atomic.h include golang/runtime/internal/atomic.h
......
...@@ -829,7 +829,7 @@ struct _interface { ...@@ -829,7 +829,7 @@ struct _interface {
protected: protected:
// don't use destructor -> use decref // don't use destructor -> use decref
~_interface(); LIBGOLANG_API ~_interface();
}; };
typedef refptr<_interface> interface; typedef refptr<_interface> interface;
......
#ifndef _NXD_LIBGOLANG_OS_H #ifndef _NXD_LIBGOLANG_OS_H
#define _NXD_LIBGOLANG_OS_H #define _NXD_LIBGOLANG_OS_H
// //
// Copyright (C) 2019-2022 Nexedi SA and Contributors. // Copyright (C) 2019-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -61,7 +61,7 @@ private: ...@@ -61,7 +61,7 @@ private:
~_File(); ~_File();
friend File _newFile(_libgolang_ioh* ioh, const string& name); friend File _newFile(_libgolang_ioh* ioh, const string& name);
public: public:
void decref(); LIBGOLANG_API void decref();
public: public:
LIBGOLANG_API string Name() const; LIBGOLANG_API string Name() const;
......
#ifndef _NXD_LIBGOLANG_PYX_RUNTIME_H #ifndef _NXD_LIBGOLANG_PYX_RUNTIME_H
#define _NXD_LIBGOLANG_PYX_RUNTIME_H #define _NXD_LIBGOLANG_PYX_RUNTIME_H
// Copyright (C) 2018-2019 Nexedi SA and Contributors. // Copyright (C) 2018-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -58,8 +58,8 @@ class _PyError final : public _error, object { ...@@ -58,8 +58,8 @@ class _PyError final : public _error, object {
private: private:
_PyError(); _PyError();
~_PyError(); ~_PyError();
friend error PyErr_Fetch(); friend LIBPYXRUNTIME_API error PyErr_Fetch();
friend void PyErr_ReRaise(PyError pyerr); friend LIBPYXRUNTIME_API void PyErr_ReRaise(PyError pyerr);
public: public:
LIBPYXRUNTIME_API void incref(); LIBPYXRUNTIME_API void incref();
LIBPYXRUNTIME_API void decref(); LIBPYXRUNTIME_API void decref();
......
// Copyright (C) 2019 Nexedi SA and Contributors. // Copyright (C) 2019-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// Small library that uses a bit of libgolang features, mainly to verify // Small library that uses a bit of libgolang features, mainly to verify
// that external project can build against libgolang. // that external project can build against libgolang.
#include <golang/libgolang.h> #include "dso.h"
using namespace golang; using namespace golang;
#include <stdio.h> #include <stdio.h>
......
// Copyright (C) 2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com>
//
// This program is free software: you can Use, Study, Modify and Redistribute
// it under the terms of the GNU General Public License version 3, or (at your
// option) any later version, as published by the Free Software Foundation.
//
// You can also Link and Combine this program with other software covered by
// the terms of any of the Free Software licenses or any of the Open Source
// Initiative approved licenses and Convey the resulting work. Corresponding
// source of such a combination shall include the source code for all other
// software used.
//
// This program is distributed WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// See COPYING file for full licensing terms.
// See https://www.nexedi.com/licensing for rationale and options.
#ifndef _NXD_GOLANG_DSOUSER_DSO_H
#define _NXD_GOLANG_DSOUSER_DSO_H
#include <golang/libgolang.h>
#if BUILDING_DSOUSER_DSO
# define DSOUSER_DSO_API LIBGOLANG_DSO_EXPORT
#else
# define DSOUSER_DSO_API LIBGOLANG_DSO_IMPORT
#endif
DSOUSER_DSO_API void dsotest();
#endif // _NXD_GOLANG_DSOUSER_DSO_H
# cython: language_level=2 # cython: language_level=2
# #
# Copyright (C) 2019 Nexedi SA and Contributors. # Copyright (C) 2019-2023 Nexedi SA and Contributors.
# Kirill Smelkov <kirr@nexedi.com> # Kirill Smelkov <kirr@nexedi.com>
# #
# This program is free software: you can Use, Study, Modify and Redistribute # This program is free software: you can Use, Study, Modify and Redistribute
...@@ -21,10 +21,7 @@ ...@@ -21,10 +21,7 @@
# Small test driver that calls dso.so . # Small test driver that calls dso.so .
cdef extern from * nogil: cdef extern from "dso.h" nogil:
"""
void dsotest();
"""
void dsotest() void dsotest()
def main(): def main():
......
# Copyright (C) 2019 Nexedi SA and Contributors. # Copyright (C) 2019-2023 Nexedi SA and Contributors.
# Kirill Smelkov <kirr@nexedi.com> # Kirill Smelkov <kirr@nexedi.com>
# #
# This program is free software: you can Use, Study, Modify and Redistribute # This program is free software: you can Use, Study, Modify and Redistribute
...@@ -24,7 +24,9 @@ setup( ...@@ -24,7 +24,9 @@ setup(
name = 'golang_dso_user', name = 'golang_dso_user',
description = 'test project that uses libgolang from a dso', description = 'test project that uses libgolang from a dso',
x_dsos = [DSO('dsouser.dso', ['dsouser/dso.cpp'])], x_dsos = [DSO('dsouser.dso',
['dsouser/dso.cpp'],
define_macros = [('BUILDING_DSOUSER_DSO', None)])],
ext_modules = [Extension('dsouser.test', ext_modules = [Extension('dsouser.test',
['dsouser/test.pyx'], ['dsouser/test.pyx'],
dsos = ['dsouser.dso'])], dsos = ['dsouser.dso'])],
......
#ifndef _NXD_LIBGOLANG_RUNTIME_INTERNAL_SYSCALL_H #ifndef _NXD_LIBGOLANG_RUNTIME_INTERNAL_SYSCALL_H
#define _NXD_LIBGOLANG_RUNTIME_INTERNAL_SYSCALL_H #define _NXD_LIBGOLANG_RUNTIME_INTERNAL_SYSCALL_H
// Copyright (C) 2021-2022 Nexedi SA and Contributors. // Copyright (C) 2021-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -59,15 +59,15 @@ error NewErrno(__Errno syserr); // TODO better return Errno directly. ...@@ -59,15 +59,15 @@ error NewErrno(__Errno syserr); // TODO better return Errno directly.
// system calls // system calls
int/*n|err*/ Read(int fd, void *buf, size_t count); LIBGOLANG_API int/*n|err*/ Read(int fd, void *buf, size_t count);
int/*n|err*/ Write(int fd, const void *buf, size_t count); LIBGOLANG_API int/*n|err*/ Write(int fd, const void *buf, size_t count);
__Errno Close(int fd); LIBGOLANG_API __Errno Close(int fd);
__Errno Fcntl(int fd, int cmd, int arg); LIBGOLANG_API __Errno Fcntl(int fd, int cmd, int arg);
__Errno Fstat(int fd, struct ::stat *out_st); LIBGOLANG_API __Errno Fstat(int fd, struct ::stat *out_st);
int/*fd|err*/ Open(const char *path, int flags, mode_t mode); LIBGOLANG_API int/*fd|err*/ Open(const char *path, int flags, mode_t mode);
__Errno Pipe(int vfd[2]); LIBGOLANG_API __Errno Pipe(int vfd[2]);
__Errno Sigaction(int signo, const struct ::sigaction *act, struct ::sigaction *oldact); LIBGOLANG_API __Errno Sigaction(int signo, const struct ::sigaction *act, struct ::sigaction *oldact);
}}} // golang::internal::syscall:: }}} // golang::internal::syscall::
......
#ifndef _NXD_LIBGOLANG_SYNC_H #ifndef _NXD_LIBGOLANG_SYNC_H
#define _NXD_LIBGOLANG_SYNC_H #define _NXD_LIBGOLANG_SYNC_H
// Copyright (C) 2018-2020 Nexedi SA and Contributors. // Copyright (C) 2018-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -212,7 +212,7 @@ class _WorkGroup : public object { ...@@ -212,7 +212,7 @@ class _WorkGroup : public object {
private: private:
_WorkGroup(); _WorkGroup();
~_WorkGroup(); ~_WorkGroup();
friend WorkGroup NewWorkGroup(context::Context ctx); friend LIBGOLANG_API WorkGroup NewWorkGroup(context::Context ctx);
public: public:
LIBGOLANG_API void decref(); LIBGOLANG_API void decref();
......
#ifndef _NXD_LIBGOLANG_TIME_H #ifndef _NXD_LIBGOLANG_TIME_H
#define _NXD_LIBGOLANG_TIME_H #define _NXD_LIBGOLANG_TIME_H
// Copyright (C) 2019-2020 Nexedi SA and Contributors. // Copyright (C) 2019-2023 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com> // Kirill Smelkov <kirr@nexedi.com>
// //
// This program is free software: you can Use, Study, Modify and Redistribute // This program is free software: you can Use, Study, Modify and Redistribute
...@@ -123,7 +123,7 @@ private: ...@@ -123,7 +123,7 @@ private:
private: private:
_Ticker(); _Ticker();
~_Ticker(); ~_Ticker();
friend Ticker new_ticker(double dt); friend Ticker LIBGOLANG_API new_ticker(double dt);
public: public:
LIBGOLANG_API void decref(); LIBGOLANG_API void decref();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment