I'm amazed to not find the IMPORT/EXPORT directives in sqVirtualMachine.h
IMO, the right solution is already sketched in minheadless:
``` $ grep -r VM_FUNCTION_EXPORT platforms/ platforms/minheadless/windows/sqPlatformSpecific-Win32.h:# undef VM_FUNCTION_EXPORT platforms/minheadless/windows/sqPlatformSpecific-Win32.h:# define VM_FUNCTION_EXPORT(returnType) __declspec( dllexport ) returnType platforms/minheadless/windows/sqPlatformSpecific-Win32.h:# undef VM_FUNCTION_EXPORT platforms/minheadless/windows/sqPlatformSpecific-Win32.h:# define VM_FUNCTION_EXPORT(returnType) __declspec( dllimport ) returnType ```
The relevant section is: ``` # if defined(BUILD_VM_CORE) && !defined(VM_CORE_STATIC) # undef VM_FUNCTION_EXPORT # define VM_FUNCTION_EXPORT(returnType) __declspec( dllexport ) returnType # else # undef VM_FUNCTION_EXPORT # define VM_FUNCTION_EXPORT(returnType) __declspec( dllimport ) returnType # endif # ```
then we would just have to declare `VM_FUNCTION_EXPORT(some_return_type) some_foo_func( some_arg_type );` in sqVirtualMachine.h. then at compile time, we just use `-DBUILD_VM_CORE` for compiling the VM, but omit it for compiling external plugins. Or maybe we can just use `#if !defined(SQUEAK_BUILTIN_PLUGIN)` in the platform specific file, instead of if defined(BUILD_VM_CORE) && !defined(VM_CORE_STATIC)
vm-dev@lists.squeakfoundation.org