| |
| Posted by MINGW-USER in reply to Johannes Pfau | PermalinkReply |
|
MINGW-USER
Posted in reply to Johannes Pfau
| On Sunday, 23 December 2018 at 15:15:37 UTC, Johannes Pfau wrote:
> Am Sun, 23 Dec 2018 01:21:22 +0000 schrieb MINGW-USER:
>
>> It seems version (Windows) is not defined into the compiler gdc.exe gdc
>> (GCC) 9.0.0 20181221 (experimental)
>> built with msys2/mingw-w64 on Windows 10.
>>
>> The trouble appears while building libdruntime
>>
>> EXAMPLE: libphobos\libdruntime\core\stdc\time.d error: undefined
>> identifier 'time_t'
>> error: undefined identifier 'tm'
>>
>> Manually add
>>
>> version (GNU) {
>> alias c_long time_t; alias c_long clock_t;
>> }
>>
>> into time.d then it compiles but it seems weird.
>>
>> The trouble is that there are many other similar errors with core\stdc\stddef.d, stdlib.d, stdint.d, etc ...
>>
>> Help needed.
>
> That's an interesting coincidence, I just set up a Windows 10 VM + MSYS2 for MinGW development a day ago.
>
> How exactly did you build GCC? I tried to build in the mingw64 environment using the same configure flags as in the mingw-w64-gcc package [1] and without any GCC patches. I had to fix some build errors in filename.c, did you get these as well? Additionally the built toolchain is not properly relocatable: Installing into / works, but if I use DESTDIR=/somewhere/else to install, the new gcc doesn't find the headers in /mingw64/x86_64... anymore. So if you know any better way to build GCC in the MSYS2 environment, please let me know :-)
>
> And regarding the specific problem you mentioned: As gdc is untested on the mingw backend, the patches for mingw which set version(Windows) have not been applied to the GCC sources. You have to apply this patch manually: https://github.com/D-Programming-GDC/GDC/blob/ 958363de2ba09656de340d13ca56f80f8ba10805/patches/targetdm-untested.patch
>
> However, phobos probably won't build right now either way.
>
>
> [1]
> ../gcc-9-20181216/configure --enable-languages=lto,d,c++ --prefix=/mingw64
> --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --
> host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-
> header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib
> --with-arch=x86-64 --with-tune=generic --enable-shared --enable-static --
> enable-libatomic --enable-threads=posix --enable-graphite --disable-
> libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --
> enable-lto --enable-libgomp --disable-multilib --disable-rpath --disable-
> win32-registry --disable-nls --disable-werror --disable-symvers --with-
> libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --
> with-mpc=/mingw64 --with-isl=/mingw64 --with-gnu-as --with-gnu-ld --
> disable-bootstrap --enable-libphobos
Yeah I had to fix some build errors in filename.c (attempt to use poisoned "malloc"; invalid const_cast from type 'const char*' to type 'void*'; and '_mkdir' was not declared in this scope)
The following script is based on the instructions I found at https://github.com/StephanTLavavej/mingw-distro
The end result will be stored at C:\build\dest
I can move/rename 'dest' to somewhere else and it works
(no relocatable problem, I guess)
I tried to reproduce every step I took. It's something like this ...
------------- build mingw c, c++, d ------------------
Map C:\build to /build in msys2
(/etc/fstab.d)
export PATH="/c/Dev/mingw64/bin:/c/Dev/msys64/usr/bin:/c/Windows/System32:/c/Windows"
where /c/Dev/mingw64 is from https://sourceforge.net/projects/mingw-w64/files/Multilib%20Toolchains%28Targetting%20Win32%20and%20Win64%29/ray_linn/gcc-6.X-with-ada/gcc-6.1.0-multilib-mingw-4.0.6-with-ada-201605226.7z
Download binutils-2.31.1.tar.xz from the GNU FTP
and extract into /build
cd /build
mkdir build-binutils
cd build-binutils
../binutils-2.31.1/configure \
--build=x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--target=x86_64-w64-mingw32 \
--prefix=/build/dest
make
make install
Download and extract mingw-w64-v5.0.4.zip from
https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
(version 6.0.0 does not work)
cd /build
mkdir build-mingw-w64
cd build-mingw-w64
../mingw-w64-v5.0.4/configure \
--build=x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--prefix=/build/dest/x86_64-w64-mingw32 \
--disable-lib32 \
--with-libraries=winpthreads \
--with-tools=all
make
make install
Download and extract
- gmp-6.1.2.tar.gz
- mpfr-3.1.6.tar.gz
- mpc-1.1.0.tar.gz
- isl-0.18.tar.gz
into directory /build/gcc-all
Download https://github.com/StephanTLavavej/mingw-distro/blob/v15.4/mpfr.patch
patch -Z -d /build/gcc-all/mpfr-3.1.6 -p1 < mpfr.patch
cd /build/gcc-all
mv /path/to/gcc-trunk src
(where /path/to/gcc-trunk is the root directory of gcc svn)
mv gmp-6.1.2 src/gmp
mv mpfr-3.1.6 src/mpfr
mv mpc-1.1.0 src/mpc
mv isl-0.18 src/isl
Create junction point
cmd /C "mklink /J C:\build\dest\mingw C:\build\dest\x86_64-w64-mingw32"
cd /build
mkdir build-gcc
cd build-gcc
../gcc-all/src/configure \
--enable-languages=c,c++,d \
--build=x86_64-w64-mingw32 \
--host=x86_64-w64-mingw32 \
--target=x86_64-w64-mingw32 \
--disable-shared \
--disable-multilib \
--disable-bootstrap \
--prefix=/build/dest \
--with-sysroot=/build/dest \
--disable-libstdcxx-pch \
--disable-libstdcxx-verbose \
--disable-nls \
--disable-win32-registry \
--enable-threads=posix \
--enable-libgomp
make
make install
cp /build/dest/x86_64-w64-mingw32/bin/libwinpthread-1.dll /build/dest/bin/libwinpthread-1_x64.dll
cp /build/dest/x86_64-w64-mingw32/bin/libwinpthread-1.dll /build/dest/bin/libwinpthread-1.dll
Here I noticed libphobos is not built.
export PATH="/build/dest/bin:/c/Dev/msys64/usr/bin:/c/Windows/System32:/c/Windows"
cd /build
mkdir build-phobos
cd build-phobos
../gcc-all/src/libphobos/configure --prefix=/build/dest
make
Here I see the problem mentioned in the original post. I'll try to apply targetdm-untested.patch.
Thank you for the info.
|