This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ 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]

[CT-NG:patch 11/19] Add mingw as kernel type


Add the option to build a cross-compiler for kernel type 'mingw'.
The resulting cross-compiler can be used to build applications on a Linux host
that can be run on a Windows target.

Compiler is build using the mingwrt and w32-api packages aviable from the
MinGW project (http://sourceforge.net/projects/mingw).

The windows headers (w32-api package) are extracting with the kernel_headers
step The libraries and other headers from both packages are build and
installed in the various steps of libc

Signed-off-by: Bart vdr Meulen <bartvdrmeulen@gmail.com>
---
 config/kernel.in                |    4 ++
 config/kernel/mingw32.in        |   33 +++++++++++++++++
 config/libc.in                  |   13 ++++++
 config/libc/eglibc.in           |    2 -
 config/libc/glibc.in            |    2 -
 config/libc/mingw.in            |   35 ++++++++++++++++++
 config/libc/uClibc.in           |    2 -
 scripts/build/cc/gcc.sh         |    9 ++++
 scripts/build/kernel/mingw32.sh |   30 ++++++++++++++++
 scripts/build/libc/mingw.sh     |   75 ++++++++++++++++++++++++++++++++++++++++
 10 files changed, 200 insertions(+), 5 deletions(-)

Index: crosstool-ng/config/kernel.in
===================================================================
--- crosstool-ng.orig/config/kernel.in
+++ crosstool-ng/config/kernel.in
@@ -8,6 +8,10 @@ config BARE_METAL
     bool
     default n
 
+config MINGW32
+    bool
+    default n
+
 # Each target OS (aka kernel) that support shared libraries can select
 # this, so the user can decide whether or not to build a shared library
 # enabled toolchain
Index: crosstool-ng/config/kernel/mingw32.in
===================================================================
--- /dev/null
+++ crosstool-ng/config/kernel/mingw32.in
@@ -0,0 +1,33 @@
+# Bare metal config options
+
+config KERNEL_mingw32
+    select MINGW32
+    help
+      Build a toolchain targeting systems running Windows as host
+
+choice
+	bool
+	prompt "Windows api version"
+
+config W32API_V_3_13
+	bool
+	prompt "3.13"
+
+# CT_INSERT_VERSION_ABOVE
+# Don't remove above line!
+
+config W32API_V_select
+    bool
+    prompt "Other version"
+
+endchoice
+
+config W32API_VERSION
+	string
+	prompt "W32 api version" if W32API_V_select
+	default "3.13" if W32API_V_3_13
+# CT_INSERT_VERSION_STRING_ABOVE
+# Don't remove above line!
+    help
+	Enter the version number of the windows api files to use
+
Index: crosstool-ng/config/libc.in
===================================================================
--- crosstool-ng.orig/config/libc.in
+++ crosstool-ng/config/libc.in
@@ -29,10 +29,15 @@ config LIBC_SUPPORT_LINUXTHREADS
     bool
     default n
 
+config LIBC_SUPPORT_WIN32THREADS
+     bool
+     default n
+
 config THREADS
     string
     default "nptl"          if THREADS_NPTL
     default "linuxthreads"  if THREADS_LINUXTHREADS
+    default "win32"         if THREADS_WIN32THREADS
     default "none"          if THREADS_NONE || LIBC_none
 #                              No C library, no threads!
 
@@ -45,7 +50,8 @@ choice
     prompt "Threading implementation to use:"
     default THREADS_NPTL           if LIBC_SUPPORT_NPTL
     default THREADS_LINUXTHREADS   if LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
-    default THREADS_NONE           if ! LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
+    default THREADS_WIN32          if LIBC_SUPPORT_WIN32THREADS
+    default THREADS_NONE           if ! LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL && ! LIBC_SUPPORT_WIN32THREADS
 
 config THREADS_NPTL
     bool
@@ -57,6 +63,11 @@ config THREADS_LINUXTHREADS
     prompt "linuxthreads"
     depends on LIBC_SUPPORT_LINUXTHREADS
 
+config THREADS_WIN32THREADS
+    bool
+    prompt "win32"
+    depends on LIBC_SUPPORT_WIN32THREADS
+
 config THREADS_NONE
     bool
     prompt "none"
Index: crosstool-ng/config/libc/eglibc.in
===================================================================
--- crosstool-ng.orig/config/libc/eglibc.in
+++ crosstool-ng/config/libc/eglibc.in
@@ -1,5 +1,5 @@
 # eglibc options
-# depends on ! BARE_METAL && ARCH_USE_MMU
+# depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU
 
 config LIBC_eglibc
     select LIBC_SUPPORT_NPTL
Index: crosstool-ng/config/libc/glibc.in
===================================================================
--- crosstool-ng.orig/config/libc/glibc.in
+++ crosstool-ng/config/libc/glibc.in
@@ -1,5 +1,5 @@
 # glibc options
-# depends on ! BARE_METAL && ARCH_USE_MMU
+# depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU
 
 config LIBC_glibc
     select LIBC_SUPPORT_NPTL
Index: crosstool-ng/config/libc/mingw.in
===================================================================
--- /dev/null
+++ crosstool-ng/config/libc/mingw.in
@@ -0,0 +1,35 @@
+# mingw options
+# depends on MINGW32
+
+config LIBC_mingw
+    bool
+    select LIBC_SUPPORT_WIN32THREADS
+    help
+      The de-facto standard for Mingw distributions.
+
+choice
+	bool
+	prompt "Mingw runtime version"
+
+config MINGWRT_V_3_15_2
+    bool
+    prompt "3.15.2"
+
+# CT_INSERT_VERSION_ABOVE
+# Don't remove above line!
+
+config MINGWRT_V_select
+    bool
+    prompt "Other version"
+
+endchoice
+
+config MINGWRT_VERSION
+	string
+	prompt "Mingw runtime version" if MINGWRT_V_select
+	default "3.15.2" if MINGWRT_V_3_15_2
+# CT_INSERT_VERSION_STRING_ABOVE
+# Don't remove above line!
+    help
+	Enter the version number of the mingw runtime files to use
+
Index: crosstool-ng/config/libc/uClibc.in
===================================================================
--- crosstool-ng.orig/config/libc/uClibc.in
+++ crosstool-ng/config/libc/uClibc.in
@@ -1,5 +1,5 @@
 # uClibc options
-# depends on ! BARE_METAL
+# depends on ! MINGW32 && ! BARE_METAL
 
 config LIBC_uClibc
     select LIBC_SUPPORT_LINUXTHREADS
Index: crosstool-ng/scripts/build/cc/gcc.sh
===================================================================
--- crosstool-ng.orig/scripts/build/cc/gcc.sh
+++ crosstool-ng/scripts/build/cc/gcc.sh
@@ -68,6 +68,8 @@ do_cc_core_pass_2() {
         ,,nptl)
             do_cc_core mode=shared build_libgcc=yes
             ;;
+        ,,win32) do_cc_core mode=static build_libgcc=yes
+            ;;
         *)  if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
                 do_cc_core mode=static build_libgcc=yes
             else
@@ -317,7 +319,12 @@ do_cc() {
             extra_config+=("--disable-libgomp")
         fi
     else
-        extra_config+=("--enable-threads=posix")
+	if [ "${CT_THREADS}" = "win32" ]; then
+		extra_config+=("--enable-threads=win32")
+		extra_config+=("--disable-win32-registry")
+	else
+		extra_config+=("--enable-threads=posix")
+	fi
     fi
 
     CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
Index: crosstool-ng/scripts/build/kernel/mingw32.sh
===================================================================
--- /dev/null
+++ crosstool-ng/scripts/build/kernel/mingw32.sh
@@ -0,0 +1,30 @@
+# This file declares functions to install the kernel headers for mingw
+# Copyright 2009 Bart vdr. Meulen
+# Licensed under the GPL v2. See COPYING in the root of this package
+
+CT_DoKernelTupleValues() {
+    CT_TARGET_KERNEL="mingw32"
+    CT_TARGET_SYS=
+}
+
+do_kernel_get() {
+    CT_GetFile "w32api-${CT_W32API_VERSION}-mingw32-src" \
+        http://downloads.sourceforge.net/sourceforge/mingw
+
+    return 0
+}
+
+do_kernel_extract() {
+    CT_Extract "w32api-${CT_W32API_VERSION}-mingw32-src"
+    return 0
+}
+
+do_kernel_headers() {
+    CT_DoStep INFO "Installing kernel headers"
+
+    mkdir -p "${CT_SYSROOT_DIR}/include"
+    cp -r ${CT_SRC_DIR}/w32api-${CT_W32API_VERSION}-mingw32/include \
+          ${CT_SYSROOT_DIR}
+
+  CT_EndStep
+}
Index: crosstool-ng/scripts/build/libc/mingw.sh
===================================================================
--- /dev/null
+++ crosstool-ng/scripts/build/libc/mingw.sh
@@ -0,0 +1,75 @@
+do_libc_get() {
+    CT_GetFile "mingwrt-${CT_MINGWRT_VERSION}-mingw32-src" \
+        http://downloads.sourceforge.net/sourceforge/mingw
+}
+
+do_libc_extract() {
+
+    CT_Extract "mingwrt-${CT_MINGWRT_VERSION}-mingw32-src"
+}
+
+do_libc_check_config() {
+    :
+}
+
+do_libc_headers() {
+    CT_DoStep INFO "Installing C library headers"
+
+    CT_DoLog EXTRA "Installing MinGW Runtime headers"
+    mkdir -p "${CT_SYSROOT_DIR}/include"
+    cp -r ${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32/include \
+          ${CT_SYSROOT_DIR}
+
+    CT_EndStep
+}
+
+do_libc_start_files() {
+    :
+}
+
+do_libc() {
+    CT_DoStep INFO "Building MinGW files"
+
+    CT_DoLog EXTRA "Configuring W32-API"
+
+    mkdir -p "${CT_BUILD_DIR}/w32api"
+    cd "${CT_BUILD_DIR}/w32api"
+
+    CFLAGS="-I${CT_SYSROOT_DIR}/include"                          \
+    LDFLAGS="-L${CT_SYSROOT_DIR}/lib"                             \
+    CT_DoExecLog ALL                                              \
+    "${CT_SRC_DIR}/w32api-${CT_W32API_VERSION}-mingw32/configure" \
+        --prefix=${CT_SYSROOT_DIR}                                \
+        --host=${CT_TARGET}
+
+    CT_DoLog EXTRA "Building W32-API"
+    CT_DoExecLog ALL make ${PARALLELMFLAGS}
+
+    CT_DoLog EXTRA "Installing W32-API"
+    CT_DoExecLog ALL make install
+
+    CT_DoLog EXTRA "Configuring MinGW Runtime"
+
+    mkdir -p "${CT_BUILD_DIR}/mingwrt"
+    cd "${CT_BUILD_DIR}/mingwrt"
+
+    CFLAGS="-I${CT_SYSROOT_DIR}/include"                            \
+    LDFLAGS="-L${CT_SYSROOT_DIR}/lib"                               \
+    CT_DoExecLog ALL                                                \
+    "${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32/configure" \
+        --prefix=${CT_SYSROOT_DIR}/                                 \
+        --host=${CT_TARGET}
+
+    CT_DoLog EXTRA "Building MinGW Runtime"
+    CT_DoExecLog ALL make ${PARALLELMFLAGS}
+
+    CT_DoLog EXTRA "Installing MinGW Runtime"
+    CT_DoExecLog ALL make install
+
+    CT_EndStep
+}
+
+do_libc_finish() {
+ :
+}
+

-- 


--
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]