This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See crosstool-NG for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Yann, All,As you want :)
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 compilerOK, 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
[--SNIP--]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 dodiff -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).
PDCurses is only a wrapper for use curses function with the DOS console. Nothing to do with Windows API/SDK.
[--SNIP--]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-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.
okNit-picking: please, fold your comments at less than 80-chars.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"
ok
Ditto.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"
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 correctI 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?
i forgot
Even if no patch for now, you have to call CT_Patch anyway (see below, too).+ 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}"
ok
+} + +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}" \
No there is no reason. I will try that wayAny 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.
I will try to simplify all this stuff
make DESTDIR="${CT_SYSROOT_DIR}" install+ "${sdk_opt}" + CT_DoLog EXTRA "Compile Headers" + CT_DoExecLog ALL make + + CT_DoLog EXTRA "Installing Headers" + CT_DoExecLog ALL make 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.
ok[--SNIP--]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 +0200do_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.
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} \... and, DESTDIR=${CT_SYSROOT_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
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
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |