www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4080] New: Patch for building dynamic libraries on Mac OS X

reply d-bugmail puremagic.com writes:
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



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: -------
Apr 11 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4080




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: -------
Apr 11 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4080




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: -------
Apr 11 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4080




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: -------
Apr 11 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4080


Walter Bright <bugzilla digitalmars.com> changed:

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



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: -------
Jun 24 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4080




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: -------
Aug 26 2010