[PATCH] Replace mingw32 by mingw-w64 for generating 32/64 bits Windows cross compiler
Diorcet Yann
diorcet.yann@gmail.com
Tue Nov 13 20:10:00 GMT 2012
Le 13/11/2012 19:57, Yann E. MORIN a écrit :
> Yann, All,
>
> Sorry to come back late on this, past week has been pretty busy in
> Barcelona, during LinuxCon and ELC-E.
> Back to a more normal schedule, now.
>
> On Thursday 25 October 2012 Yann Diorcet wrote:
>> # HG changeset patch
>> # User Yann Diorcet <diorcet.yann@gmail.com>
>> # Date 1351158411 -7200
>> # Node ID 0b819b844f8fbf72a2a85db438e09d66ab495d3e
>> # Parent 946d6d133a90935465e3582b54b60c0d7e4e6397
>> Replace mingw32 by mingw-w64 for generating 32/64 bits Windows cross compiler
> OK, basically this builds both toolchains OK on my machine. That's a
> good start, for sure! ;-)
>
> Here are a few comments, though.
>
> Commit message: what about something like:
>
> kernel/mingw: replace mingw32 with generic mingw
>
> Replace the 32-bit-only mingw32 with mingw64 that is capable
> of building toolchains for both 32- and 64-bit mingw.
>
> kernel/mingw32: Remove this kernel for a generic one
> kernel/mingw: New mingw kernel supporting 32 and 64 bit arch
> libc/mingw: Remove old options
> patches: Remove old mingw libc options' patches
As you want :)
> [--SNIP--]
>> diff -r 946d6d133a90 -r 0b819b844f8f config/libc/mingw.in
>> --- a/config/libc/mingw.in Mon Oct 22 22:40:01 2012 +0200
>> +++ b/config/libc/mingw.in Thu Oct 25 11:46:51 2012 +0200
>> @@ -1,33 +1,7 @@
>> # mingw options
>>
>> -## depends on MINGW32
>> +## depends on MINGW
>> ##
>> ## select LIBC_SUPPORT_WIN32THREADS
>> ##
>> ## help The de-facto standard for Mingw distributions.
>> -
>> -choice
>> - bool
>> - prompt "Mingw runtime version"
>> -
>> -# Don't remove next line
>> -# CT_INSERT_VERSION_BELOW
>> -config MINGWRT_V_3_18
>> - bool
>> - prompt "3.18"
>> -
>> -config MINGWRT_V_select
>> - bool
>> - prompt "Other version"
>> -
>> -endchoice
>> -
>> -config MINGWRT_VERSION
>> - string
>> - prompt "Mingw runtime version" if MINGWRT_V_select
>> -# Don't remove next line
>> -# CT_INSERT_VERSION_STRING_BELOW
>> - default "3.18" if MINGWRT_V_3_18
>> - help
>> - Enter the version number of the mingw runtime files to use
>> -
> Sure there is no option for the C library part of mingw?
> At least, add a comment that the version is the same as the one from the
> mingw kernel (I mean, a #-comment, not a kconfig comment).
The issue is that in mingw-w64 there is no seperation between
"kernel"/"libc" they come from same archive. I don't know what i have to do
>
>> diff -r 946d6d133a90 -r 0b819b844f8f config/libc/mingw.in.2
>> --- a/config/libc/mingw.in.2 Mon Oct 22 22:40:01 2012 +0200
>> +++ b/config/libc/mingw.in.2 Thu Oct 25 11:46:51 2012 +0200
>> @@ -1,72 +1,1 @@
>> # Part-2 of mingw C library options: development libraries
>> -
>> -config MINGW_DIRECTX
> [--SNIP--]
>> -config MINGW_OPENGL
> [--SNIP--]
>> -config MINGW_PDCURSES
> [--SNIP--]
>> -choice
> [--SNIP--]
>> -config MINGW_PDCURSES_V_3_4
> [--SNIP--]
>
> In the first place, I was not too happy having those target libraries be
> built as part of the toolchain, but people argued they were part of the
> expected 'SDK' (or API, call it whatever you want) of mingw / Windows (TM).
>
> So, if those get remove, I'm afraid those same people will come back
> whinning, unless you can prove either:
> - it is *not* part of the Windows API/SDK, or
> - the new ming64 build provides a replacement for those libs.
PDCurses is only a wrapper for use curses function with the DOS console.
Nothing to do with Windows API/SDK.
For opengl
Directx is replaced (btw the old provided includes are incomplete)
There is new important enhancement: DDK
>> diff -r 946d6d133a90 -r 0b819b844f8f samples/i686-unknown-mingw32/reported.by
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/samples/i686-unknown-mingw32/reported.by Thu Oct 25 11:46:51 2012 +0200
>> @@ -0,0 +1,3 @@
>> +reporter_name="Yann Diorcet <diorcet.yann@gmail.com>"
>> +reporter_url=""
>> +reporter_comment="Config to build cross-compiler with mingw as kernel type for 32 bits Windows target"
> Nit-picking: please, fold your comments at less than 80-chars.
ok
>
>> diff -r 946d6d133a90 -r 0b819b844f8f samples/x86_64-unknown-mingw32/reported.by
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/samples/x86_64-unknown-mingw32/reported.by Thu Oct 25 11:46:51 2012 +0200
>> @@ -0,0 +1,3 @@
>> +reporter_name="Yann Diorcet <diorcet.yann@gmail.com>"
>> +reporter_url=""
>> +reporter_comment="Config to build cross-compiler with mingw as kernel type for 64 bits Windows target"
> Ditto.
ok
>
>> diff -r 946d6d133a90 -r 0b819b844f8f scripts/build/kernel/mingw.sh
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/scripts/build/kernel/mingw.sh Thu Oct 25 11:46:51 2012 +0200
>> @@ -0,0 +1,54 @@
>> +# This file declares functions to install the kernel headers for mingw64
>> +# Copyright 2012 Yann Diorcet
>> +# Licensed under the GPL v2. See COPYING in the root of this package
>> +
>> +CT_DoKernelTupleValues() {
>> + CT_TARGET_KERNEL="mingw32" #yes it's correct
> I know we discussed this already, and that -mingw32 is indeed the correct
> kernel part, but could you add a comment that is a bit more elaborate?
ok
>
>> + CT_TARGET_SYS=
>> +}
>> +
>> +do_kernel_get() {
>> + CT_GetFile "mingw-w64-v${CT_WINAPI_VERSION}" \
>> + http://downloads.sourceforge.net/sourceforge/mingw-w64
>> +}
>> +
>> +do_kernel_extract() {
>> + CT_Extract "mingw-w64-v${CT_WINAPI_VERSION}"
> Even if no patch for now, you have to call CT_Patch anyway (see below, too).
i forgot
>
>> +}
>> +
>> +do_kernel_headers() {
> sdk_opt is a local variable, you have to declare it. Usually, we use bash
> arrays for options. Here, it is not really important, as you only have one
> option, but nonetheless, I'd rather have consistent code:
> local -a sdk_opts
ok
>
> and then, to add a configure option:
>
> sdk_opts+=( "option" )
>
>> + CT_DoStep INFO "Installing kernel headers"
>> +
>> + mkdir -p "${CT_HEADERS_DIR}"
>> +
>> + case "${CT_MINGW_DIRECTX}:${CT_MINGW_DDK}" in
>> + y:y) sdk_opt="--enable-sdk=all";;
>> + y:) sdk_opt="--enable-sdk=directx";;
>> + :y) sdk_opt="--enable-sdk=ddk";;
>> + :) sdk_opt="";;
> Empty statement for the ':' case:
> :) ;;
ok
>> + esac
>> +
>> + CT_mkdir_pushd "${CT_BUILD_DIR}/build-header-build-${CT_BUILD}"
>> +
>> + CT_DoLog EXTRA "Configuring Headers"
>> +
>> + CT_DoExecLog CFG \
>> + "${CT_SRC_DIR}/mingw-w64-v${CT_WINAPI_VERSION}/mingw-w64-headers/configure" \
>> + --build=${CT_BUILD} \
> Space-damage:
> - no leading tabs,
> - trailing '\' are not aligned; it is OK for single-word lines (like
> the ./configure line) to be longer than 80 chars, but other '\'
> should all be aligned together, preferably to the longest line;
> something like:
>
> CT_DoExecLog CFG \
> "veeeeeeeeerrrryyyyy-loooooooooooooong-configure-line" \
> --option1="value1" \
> --option2="value2" \
> ${options}
>
>> + --host=${CT_TARGET} \
>> + --prefix="${CT_SYSROOT_DIR}" \
ok
> Any reason why you do not use --prefix=/usr, and pass DESTDIR=${SYSROOT_DIR}
> at install time?
>
> --prefix is for run-time, so the sysroot directory (where target stuff
> gets installed) does not exist at runtime, while DESTDIR is for where to
> install stuff.
No there is no reason. I will try that way
>
>> + "${sdk_opt}"
>> + CT_DoLog EXTRA "Compile Headers"
>> + CT_DoExecLog ALL make
>> +
>> + CT_DoLog EXTRA "Installing Headers"
>> + CT_DoExecLog ALL make install
> make DESTDIR="${CT_SYSROOT_DIR}" install
>
>> + CT_Popd
>> +
>> + CT_DoExecLog ALL cp -r "${CT_SYSROOT_DIR}/${CT_TARGET}/include/"* \
>> + "${CT_HEADERS_DIR}"
> That's what is weird with mingw and the way you install the headers: they
> are installed in sysroot/tuple/include, when we want them in
> sysroot/usr/include (and by the way, your code only copies them , so they
> still are present in the original place. What path will the pre-processor
> search for?
>
> I'll do a few tests here to see if --prefix=/usr and DESTDIR=${sysroot_dir}
> can make a difference. If you can also look into this, that'd be great, too.
I will try to simplify all this stuff
>> diff -r 946d6d133a90 -r 0b819b844f8f scripts/build/libc/mingw.sh
>> --- a/scripts/build/libc/mingw.sh Mon Oct 22 22:40:01 2012 +0200
>> +++ b/scripts/build/libc/mingw.sh Thu Oct 25 11:46:51 2012 +0200
> [--SNIP--]
>> do_libc_extract() {
>> - CT_Extract "mingwrt-${CT_MINGWRT_VERSION}-mingw32-src"
>> -
>> - if [ -n "${CT_MINGW_PDCURSES}" ]; then
>> - CT_Extract "PDCurses-${CT_MINGW_PDCURSES_VERSION}"
>> - CT_Patch "PDCurses" "${CT_MINGW_PDCURSES_VERSION}"
>> - fi
>> - if [ -n "${CT_MINGW_GNURX}" ]; then
>> - CT_Extract "mingw-libgnurx-${CT_MINGW_GNURX_VERSION}-src"
>> - CT_Patch "mingw-libgnurx" "${CT_MINGW_GNURX_VERSION}-src"
>> - fi
>> + CT_Extract "mingw-w64-v${CT_WINAPI_VERSION}"
> Even if there are no patches for now, you still have to call CT_Patch,
> so it is in-line with the rest of the components.
ok
> If there is no patch, CT_Patch will just do nothing.
>
>> }
>>
>> do_libc_check_config() {
>> @@ -40,117 +14,36 @@
>> do_libc_start_files() {
>> CT_DoStep INFO "Installing C library headers"
>>
>> - CT_DoLog EXTRA "Installing MinGW Runtime headers"
>> - mkdir -p "${CT_HEADERS_DIR}"
>> - cp -r ${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32-src/include/* \
>> - ${CT_HEADERS_DIR}
>> -
>> # It seems mingw is strangely set up to look into /mingw instead of
>> # /usr (notably when looking for the headers). This symlink is
>> # here to workaround this, and seems to be here to last... :-/
>> - CT_DoExecLog ALL ln -sv "usr" "${CT_SYSROOT_DIR}/mingw"
>> + CT_DoExecLog ALL ln -sv "${CT_TARGET}" "${CT_SYSROOT_DIR}/mingw"
> And this change should no longer be needed if we use the proper prefix at
> configure time. Also, the headers are installed by the 'kernel', so it
> should be the 'kernel' script that does the symlink.
>
> Which makes me think... For MingW, do we really have a 'kernel' per-say, or
> can't we just build everything in the libc steps? It seems to me that would
> be much cleaner.
>
> Note: the do_libc_start_files step is run just after the kernel_headers step.
>
>> CT_EndStep
>> }
>>
>> do_libc() {
>> - CT_DoStep INFO "Building MinGW files"
>> + CT_DoStep INFO "Building mingw32-w64 files"
>>
>> - CT_DoLog EXTRA "Configuring W32-API"
>> + CT_DoLog EXTRA "Configuring mingw-w64-crt"
>>
>> - mkdir -p "${CT_BUILD_DIR}/build-w32api"
>> - cd "${CT_BUILD_DIR}/build-w32api"
>> + mkdir -p "${CT_BUILD_DIR}/build-w64crt"
>> + cd "${CT_BUILD_DIR}/build-w64crt"
>>
>> CT_DoExecLog CFG \
>> - CFLAGS="-I${CT_HEADERS_DIR}" \
>> - LDFLAGS="-L${CT_SYSROOT_DIR}/lib" \
>> - "${CT_SRC_DIR}/w32api-${CT_W32API_VERSION}-mingw32-src/configure" \
>> + "${CT_SRC_DIR}/mingw-w64-v${CT_WINAPI_VERSION}/mingw-w64-crt/configure" \
>> --prefix=${CT_SYSROOT_DIR} \
> Again, prefix=/usr (yes, that's old code, let use that new stuff to fix it
> at the same time) ...
>
>> - --includedir=${CT_HEADERS_DIR} \
>> --host=${CT_TARGET}
>>
>> - CT_DoLog EXTRA "Building W32-API"
>> + CT_DoLog EXTRA "Building mingw-w64-crt"
>> CT_DoExecLog ALL make ${JOBSFLAGS}
>>
>> - CT_DoLog EXTRA "Installing W32-API"
>> - CT_DoExecLog ALL make install
>> -
>> - CT_DoLog EXTRA "Configuring MinGW Runtime"
>> -
>> - mkdir -p "${CT_BUILD_DIR}/build-mingwrt"
>> - cd "${CT_BUILD_DIR}/build-mingwrt"
>> -
>> - CT_DoExecLog CFG \
>> - CFLAGS="-I${CT_HEADERS_DIR}" \
>> - LDFLAGS="-L${CT_SYSROOT_DIR}/lib" \
>> - "${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32-src/configure" \
>> - --prefix=${CT_SYSROOT_DIR}/ \
>> - --includedir=${CT_HEADERS_DIR} \
>> - --host=${CT_TARGET}
>> -
>> - CT_DoLog EXTRA "Building MinGW Runtime"
>> - CT_DoExecLog ALL make ${JOBSFLAGS}
>> -
>> - CT_DoLog EXTRA "Installing MinGW Runtime"
>> + CT_DoLog EXTRA "Installing mingw-w64-crt"
>> CT_DoExecLog ALL make install
> ... and, DESTDIR=${CT_SYSROOT_DIR}
>
>> CT_EndStep
>> }
>>
>> do_libc_finish() {
>> - CT_DoStep INFO "Installing MinGW Development libraries"
>> -
>> - CT_Pushd "${CT_SYSROOT_DIR}"
>> - if [ -n "${CT_MINGW_DIRECTX}" ]; then
>> - CT_DoLog EXTRA "Installing DirectX development package"
>> - CT_Extract nochdir "directx-devel"
>> - fi
>> - if [ -n "${CT_MINGW_OPENGL}" ]; then
>> - CT_DoLog EXTRA "Installing OpenGL development package"
>> - CT_Extract nochdir "opengl-devel"
>> - fi
>> - CT_Popd
>> -
>> - if [ -n "${CT_MINGW_PDCURSES}" ]; then
>> - CT_DoLog EXTRA "Building PDCurses development files"
>> - mkdir -p "${CT_BUILD_DIR}/build-pdcurses"
>> - cd "${CT_BUILD_DIR}/build-pdcurses"
>> -
>> - make -f ${CT_SRC_DIR}/PDCurses-${CT_MINGW_PDCURSES_VERSION}/win32/mingwin32.mak libs \
>> - PDCURSES_SRCDIR=${CT_SRC_DIR}/PDCurses-${CT_MINGW_PDCURSES_VERSION} \
>> - CROSS_COMPILE=${CT_TARGET}-
>> -
>> - CT_DoLog EXTRA "Installing PDCurses development files"
>> - chmod a+r ${CT_SRC_DIR}/PDCurses-${CT_MINGW_PDCURSES_VERSION}/*.h
>> - cp ${CT_SRC_DIR}/PDCurses-${CT_MINGW_PDCURSES_VERSION}/*.h \
>> - ${CT_HEADERS_DIR}/
>> - cp pdcurses.a ${CT_SYSROOT_DIR}/lib/libpdcurses.a
>> - cp pdcurses.a ${CT_SYSROOT_DIR}/lib/libncurses.a
>> - fi
>> -
>> - if [ -n "${CT_MINGW_GNURX}" ]; then
>> - CT_DoLog EXTRA "Configuring GnuRX development files"
>> -
>> - mkdir -p "${CT_BUILD_DIR}/build-gnurx"
>> - cd "${CT_BUILD_DIR}/build-gnurx"
>> -
>> - CT_DoExecLog CFG \
>> - CFLAGS="${CT_CFLAGS_FOR_TARGET}" \
>> - "${CT_SRC_DIR}/mingw-libgnurx-${CT_MINGW_GNURX_VERSION}-src/configure" \
>> - --build=${CT_BUILD} \
>> - --host=${CT_TARGET} \
>> - --prefix=${CT_SYSROOT_DIR} \
>> - --includedir=${CT_HEADERS_DIR} \
>> - --enable-shared \
>> - --enable-static
>> -
>> - CT_DoLog EXTRA "Building GnuRX development files"
>> - CT_DoExecLog ALL make ${JOBSFLAGS}
>> -
>> - CT_DoLog EXTRA "Installing GnuRX development files"
>> - CT_DoExecLog ALL make install-dev
>> - fi
>> -
>> - CT_EndStep
>> + :
>> }
> Yeah! We get rid of libc_finish for MingW! Hurray! \o/
> Let's bash on newlib, the last offender now. ;-)
>
> [--SNIP--]
>
> Now we have a working base that is able to build toolchains, can you look
> at the comments above, so we can have a clean implementation?
>
> Thank you for this overall good work so far! :-)
>
> Regards,
> Yann E. MORIN.
>
--
For unsubscribe information see http://sourceware.org/lists.html#faq
More information about the crossgcc
mailing list