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
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to