Thread overview
[Issue 4080] New: Patch for building dynamic libraries on Mac OS X
Apr 11, 2010
Jacob Carlborg
Apr 11, 2010
Jacob Carlborg
Apr 11, 2010
Jacob Carlborg
Apr 11, 2010
Jacob Carlborg
Jun 24, 2010
Walter Bright
Aug 26, 2010
Walter Bright
April 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080

           Summary: Patch for building dynamic libraries on Mac OS X
           Product: D
           Version: future
          Platform: x86
        OS/Version: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: druntime
        AssignedTo: sean@invisibleduck.org
        ReportedBy: doob@me.com


--- Comment #0 from Jacob Carlborg <doob@me.com> 2010-04-11 05:48:49 PDT ---
Created an attachment (id=606)
Adds the "-dylib" flag

These three patches adds support for building dynamic libraries on Mac OS X.

The patch for DMD adds the "-dylib" flag to the compiler. Building with this flag enabled will produce a dynamic library.

The patch for druntime makes the necessary changes to build dynamic libraries. The D main function is now weakly linked, all of the module constructors of all the loaded images (executables, dynamic libraries) are run. The C main function is slightly modified to use the rt_init and rt_term functions. Two C functions are also added the will initialize and terminate the runtime if no D main function is available, i.e. a D plugin linked with a C application.

The patch for phobos is just some modifications to the make file.

To build druntime and phobos as dynamic libraries add "dynamic", i.e. "make -f osx.mak dynamic".

A note about dynamic libraries on Mac OS X:

Every dynamic library has an install name on Mac OS X which is the path to where an executable should look for the library when loading it. The build script sets this to "@rpath/<libname>.dylib", where <libname> is "libdruntime" or "libphobos2".

@rpath is a relative path which the user can set when compiling an executable like this: "dmd -L-rpath -L/path/to/library/". When the executable then is loaded it will search for the library in "/path/to/library/<libname>.dylib". -rpath can be set multiple times. The user can also change the install name with the tool "install_name_tool" without needing to recompile.

A change to the dmd.conf file is also needed. With this change the user doesn't have to set the @rpath every time when compiling. "libdruntime" must also be linked.

DFLAGS=-I%@P%/../src/phobos -I%@P%/../src/druntime/import -L-L%@P%/../lib -L-rpath -L%@P%/../lib -L%@P%/../lib/libdruntime.dylib

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
April 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080



--- Comment #1 from Jacob Carlborg <doob@me.com> 2010-04-11 05:49:32 PDT ---
Created an attachment (id=607)
Adds support for building dynamic libraries

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
April 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080



--- Comment #2 from Jacob Carlborg <doob@me.com> 2010-04-11 05:50:13 PDT ---
Created an attachment (id=608)
Adds support for building dynamic libraries

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
April 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080



--- Comment #3 from Jacob Carlborg <doob@me.com> 2010-04-11 05:52:34 PDT ---
BTW the make files probably needs some cleaning up, make files are not my strong side.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 24, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com


--- Comment #4 from Walter Bright <bugzilla@digitalmars.com> 2010-06-24 14:29:00 PDT ---
dmd portion: http://www.dsource.org/projects/dmd/changeset/559

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 26, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4080



--- Comment #5 from Walter Bright <bugzilla@digitalmars.com> 2010-08-26 14:21:48 PDT ---
http://www.dsource.org/projects/dmd/changeset/372

I changed the location of the new files to be more consistent with druntime's existing conventions:

Adding         src\core\sys\osx\mach\dyld.d
Adding         src\core\sys\osx\mach\getsect.d
Adding         src\core\sys\osx\mach\loader.d
Adding         src\rt\dylib_fixes.c
Adding         src\rt\image.d

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------