www.digitalmars.com         C & C++   DMDScript  

D.gnu - GDC MINGW BUILD: version (Windows) NOT DEFINED

reply MINGW-USER <MINGW USER.UR> writes:
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.
Dec 22 2018
parent reply Johannes Pfau <nospam example.com> writes:
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 -- Johannes
Dec 23 2018
parent MINGW-USER <MINGW USER.UR> writes:
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.
Dec 23 2018