[dmd-internals] DragonFlyBSD Support
Diederik de Groot
ddegroot at talon.nl
Mon Dec 11 19:04:58 UTC 2017
On Saturday, 19 August 2017 at 23:21:50 UTC, Dave MacFarlane
wrote:
> Hello,
>
> I'm trying to add support for DragonFlyBSD to dmd, but I'm
> running into an issue that I'm not sure how to move forward on..
>
> I've compiled a version of ldc's ltsmaster branch (after adding
> support to druntime and phobos), and using it I'm able to
> compile dmd (after adding support to druntime and phobos in
> HEAD, rather than ltsmaster..), but the compiled dmd isn't able
> to link anything. It gets a bunch of errors of the form "error:
> TLS relocation against invalid instruction" (the complete log
> of the errors is at
> https://gist.github.com/driusan/6a04060c234806d3fbb2625759bd55a4)
>
> From what I can tell, the symbols like _d_arrayappendcTX are
> supposed to be added from dmd, but for some reason aren't (I
> might be misreading the errors, though..)
>
> Unrelatedly (or relatedly?) I'm not sure how the DMD backend
> uses the EX_* enums defined in cdefs.h or where the values come
> from, so it's not obvious what the right value is for
> DragonFly. The comment says it's the "Executable file format",
> but at least 8 of them just use elf/elf64 for their executable
> file format, so I don't see why they're different or if I
> should just shift over 1 bit and add a new EX_DRAGONFLY64.
>
> (I tried sending a pull request with my runtime/phobos ldc
> changes but
> was told I should send them upstream instead.. but I don't want
> to
> send my runtime changes upstream until I'm sure that they work,
> and
> I'm not as confident in these changes since the compiled dmd
> can't
> link. I'm not sure if the trouble is in the backend or the
> runtime
> since the problem seems to come from linking the runtime..)
> - Dave
Hi Dave,
I finished a (initial) port of dmd/druntime and phobos to
DragonFlyBSD.
Stacked port:
- I first ported the dmd-cxx branch (this version is using g++)
(stage0).
- Because dmd-cxx is not able to compile the current dmd master,
i choose a closely related branch (v2.068.2) as the next staging
compiler (stage1). In retrospect i should have choosen v2.072.2
as the intermediate.
- The stage1 (v2.068.2) compiler is then able to compile the
current master (rev: 49568bf) and run 99% of the unittests. A
little more work is needed to get the last couple of unittests
working as well.
You can find give it a try:
mkdir dmd-cxx
cd dmd-cxx
git clone -b dmd-cxx https://github.com/dkgroot/dmd.git
git clone -b dmd-cxx https://github.com/dkgroot/druntime.git
git clone -b dmd-cxx https://github.com/dkgroot/phobos.git
cd dmd
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
cd ../druntime
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
cd ../phobos
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
export HOST_DC=`pwd`/install/dragonflybsd/bin64/dmd
cd ..
mkdir v2.068.2
cd v2.068.2
git clone -b dragonflybsd_v2.068.2
https://github.com/dkgroot/dmd.git
git clone -b dragonflybsd_v2.068.2
https://github.com/dkgroot/druntime.git
git clone -b dragonflybsd_v2.068.2
https://github.com/dkgroot/phobos.git
cd dmd
gmake -f posix.mak HOST_CSS=g++ HOST_DC=${HOST_DC}
gmake -f posix.mak HOST_CSS=g++ HOST_DC=${HOST_DC} install
cd ../druntime
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
cd ../phobos
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
export HOST_DMD=`pwd`/install/dragonflybsd/bin64/dmd
cd ..
mkdir master
cd master
git clone https://github.com/dkgroot/dmd.git
git clone https://github.com/dkgroot/druntime.git
git clone https://github.com/dkgroot/phobos.git
cd dmd
gmake -f posix.mak HOST_CSS=g++ HOST_DMD=${HOST_DMD}
gmake -f posix.mak HOST_CSS=g++ HOST_DMD=${HOST_DMD} install
cd ../druntime
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
cd ../phobos
gmake -f posix.mak HOST_CSS=g++
gmake -f posix.mak HOST_CSS=g++ install
cd ..
cd dmd
gmake -f posix.mak HOST_CSS=g++ HOST_DMD=${HOST_DMD} test
cd ../druntime
gmake -f posix.mak HOST_CSS=g++ unittest
cd ../phobos
gmake -f posix.mak HOST_CSS=g++ unittest
cd ..
Maybe you can give it a try.
Question to the Forum:
- Is using v2.068.2 as a stage1 compiler going to be a problem
when getting the Pull Request accepted ?
- Is dmd-cxx going to be supported longtime ?
- Is dmd-cxx going to be updated to being able to compile v2.77.2
directly ?
@Dave: getting these changes into druntime and phobos should also
making it a lot easier to port the ldc2 version, which was what
you were looking for.
Regards,
Diederik
More information about the dmd-internals
mailing list