Login  Register

Re: Siren on Squeak

Posted by simonxholland on Aug 24, 2007; 4:59pm
URL: https://forum.world.st/Siren-on-Squeak-tp134163p134167.html

(Cross posted to squeak audio and vw-dev)

Dear All

I am writing primitives to port Stephen Pope’s portmidi_lite VisualWorks plugin to Squeak (on Mac Intel for now).

To test everything possible before linking to the portmidi library, I wrote a series of test plugins using the arguments, return types, and pointer manipulation etc required by portmidi_lite. These show that the primitives do the appropriate proxyinterpreter stack manipulation, type conversion and object creation while avoiding garbage collection, and generally exchange data just fine with the test plugins.

But to transfer this to portmidi_lite, the portmidi library must be linked in. After removing the VW-specific includes from Stephen's portmidi_lite.c (renamed as noted below). and supplying the necessary .h’s , the make compiles and links without error.

However, the plugin then fails to load at runtime.

More specifically, when I run the automatically generated make to rebuild the VM/plugins and to link my slang-generated glue code to portmidi_lite.c and to the portmidi library, this all runs to completion and compiles with no errors. The plugin is created and put in the right place (as an external) and looks sensible via nm. However, the plugin fails to load at run-time.

On attempting to load the plugin, Squeak complains to the console
“ioLoadModule  could not load shared object: /Users/simon/squeak/build/Squeak-3.9-12.app/Contents/MacOS/PortMidiLitePlugin.“  This message originates from vm/dlfcn-dyld.c , where it wraps a Mach error code NSObjectFileImageInappropriateFile – ‘file was not an appropriate type of object file’.

In the Makefile.inc for linking the portmidi plugin, I have

PLIBS=$PLIBS -L/Users/simon/squeak/platforms/unix/plugins/PortMidiLitePlugin/i386

The folder i386 contains
   libportmidi.a
   pmmac.o
   pmmacosxcm.o
   pmutil.o
   portmidi.LinkFileList
   portmidi.o
   ptmacosx_mach.o

The contents of this folder is a fresh build of the portmidi library for intel Mac created using the Xcode project provided by the portmidi guys. (The previous attempt, using just the single file libportmidi.a in this folder gave the same result.)

For completeness, up a level at
Users/simon/squeak/platforms/unix/plugins/PortMidiLitePlugin
we have the following files
   SirenDLLCC.h   (this just includes debug defines)
   portmidi.h
   portmidi_lite.h
   porttime.h
   spPortMidiLitePlugin.c  
(a renamed version of portmidi_lite.c with the VW includes removed – this has includes for the four .h’s)

Any thoughts would be greatly appreciated.

Simon Holland