kernel: add mingw
authorBart vdr Meulen <bartvdrmeulen@gmail.com>
Sun Jul 11 21:36:20 2010 +0200 (2010-07-11)
changeset 2017f637b6c2162b
parent 2016 46366b11da3d
child 2018 860de6018501
kernel: add mingw

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>
[yann.morin.1998@anciens.enib.fr: fix kernel headers comment, don't "return 0"]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
config/kernel.in
config/kernel/mingw32.in
config/libc.in
config/libc/eglibc.in
config/libc/glibc.in
config/libc/mingw.in
config/libc/uClibc.in
scripts/build/cc/gcc.sh
scripts/build/kernel/mingw32.sh
scripts/build/libc/mingw.sh
     1.1 --- a/config/kernel.in	Sun Jul 11 14:26:52 2010 +0200
     1.2 +++ b/config/kernel.in	Sun Jul 11 21:36:20 2010 +0200
     1.3 @@ -8,6 +8,10 @@
     1.4      bool
     1.5      default n
     1.6  
     1.7 +config MINGW32
     1.8 +    bool
     1.9 +    default n
    1.10 +
    1.11  # Each target OS (aka kernel) that support shared libraries can select
    1.12  # this, so the user can decide whether or not to build a shared library
    1.13  # enabled toolchain
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/config/kernel/mingw32.in	Sun Jul 11 21:36:20 2010 +0200
     2.3 @@ -0,0 +1,32 @@
     2.4 +# mingw32 config options
     2.5 +
     2.6 +config KERNEL_mingw32
     2.7 +    select MINGW32
     2.8 +    help
     2.9 +      Build a toolchain targeting systems running Windows as host
    2.10 +
    2.11 +choice
    2.12 +    bool
    2.13 +    prompt "Windows api version"
    2.14 +
    2.15 +# Don't remove next line
    2.16 +# CT_INSERT_VERSION_BELOW
    2.17 +config W32API_V_3_14
    2.18 +    bool
    2.19 +    prompt "3.14"
    2.20 +
    2.21 +config W32API_V_select
    2.22 +    bool
    2.23 +    prompt "Other version"
    2.24 +
    2.25 +endchoice
    2.26 +
    2.27 +config W32API_VERSION
    2.28 +    string
    2.29 +    prompt "W32 api version" if W32API_V_select
    2.30 +# Don't remove next line
    2.31 +# CT_INSERT_VERSION_STRING_BELOW
    2.32 +    default "3.14" if W32API_V_3_14
    2.33 +    help
    2.34 +      Enter the version number of the windows api files to use
    2.35 +
     3.1 --- a/config/libc.in	Sun Jul 11 14:26:52 2010 +0200
     3.2 +++ b/config/libc.in	Sun Jul 11 21:36:20 2010 +0200
     3.3 @@ -35,10 +35,16 @@
     3.4      default n
     3.5      select LIBC_SUPPORT_THREADS_ANY
     3.6  
     3.7 +config LIBC_SUPPORT_WIN32THREADS
     3.8 +    bool
     3.9 +    default n
    3.10 +    select LIBC_SUPPORT_THREADS_ANY
    3.11 +
    3.12  config THREADS
    3.13      string
    3.14      default "nptl"          if THREADS_NPTL
    3.15      default "linuxthreads"  if THREADS_LINUXTHREADS
    3.16 +    default "win32"         if THREADS_WIN32THREADS
    3.17      default "none"          if THREADS_NONE || LIBC_none
    3.18  #                              No C library, no threads!
    3.19  
    3.20 @@ -51,6 +57,7 @@
    3.21      prompt "Threading implementation to use:"
    3.22      default THREADS_NPTL           if LIBC_SUPPORT_NPTL
    3.23      default THREADS_LINUXTHREADS   if LIBC_SUPPORT_LINUXTHREADS && ! LIBC_SUPPORT_NPTL
    3.24 +    default THREADS_WIN32          if LIBC_SUPPORT_WIN32THREADS
    3.25      default THREADS_NONE           if ! LIBC_SUPPORT_THREADS_ANY
    3.26  
    3.27  config THREADS_NPTL
    3.28 @@ -63,6 +70,11 @@
    3.29      prompt "linuxthreads"
    3.30      depends on LIBC_SUPPORT_LINUXTHREADS
    3.31  
    3.32 +config THREADS_WIN32THREADS
    3.33 +    bool
    3.34 +    prompt "win32"
    3.35 +    depends on LIBC_SUPPORT_WIN32THREADS
    3.36 +
    3.37  config THREADS_NONE
    3.38      bool
    3.39      prompt "none"
     4.1 --- a/config/libc/eglibc.in	Sun Jul 11 14:26:52 2010 +0200
     4.2 +++ b/config/libc/eglibc.in	Sun Jul 11 21:36:20 2010 +0200
     4.3 @@ -1,5 +1,5 @@
     4.4  # eglibc options
     4.5 -# depends on ! BARE_METAL && ARCH_USE_MMU
     4.6 +# depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU
     4.7  
     4.8  config LIBC_eglibc
     4.9      select LIBC_SUPPORT_NPTL
     5.1 --- a/config/libc/glibc.in	Sun Jul 11 14:26:52 2010 +0200
     5.2 +++ b/config/libc/glibc.in	Sun Jul 11 21:36:20 2010 +0200
     5.3 @@ -1,5 +1,5 @@
     5.4  # glibc options
     5.5 -# depends on ! BARE_METAL && ARCH_USE_MMU
     5.6 +# depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU
     5.7  
     5.8  config LIBC_glibc
     5.9      select LIBC_SUPPORT_NPTL
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/config/libc/mingw.in	Sun Jul 11 21:36:20 2010 +0200
     6.3 @@ -0,0 +1,34 @@
     6.4 +# mingw options
     6.5 +# depends on MINGW32
     6.6 +
     6.7 +config LIBC_mingw
     6.8 +    bool
     6.9 +    select LIBC_SUPPORT_WIN32THREADS
    6.10 +    help
    6.11 +      The de-facto standard for Mingw distributions.
    6.12 +
    6.13 +choice
    6.14 +    bool
    6.15 +    prompt "Mingw runtime version"
    6.16 +
    6.17 +# Don't remove next line
    6.18 +# CT_INSERT_VERSION_BELOW
    6.19 +config MINGWRT_V_3_18
    6.20 +    bool
    6.21 +    prompt "3.18"
    6.22 +
    6.23 +config MINGWRT_V_select
    6.24 +    bool
    6.25 +    prompt "Other version"
    6.26 +
    6.27 +endchoice
    6.28 +
    6.29 +config MINGWRT_VERSION
    6.30 +    string
    6.31 +    prompt "Mingw runtime version" if MINGWRT_V_select
    6.32 +# Don't remove next line
    6.33 +# CT_INSERT_VERSION_STRING_BELOW
    6.34 +    default "3.18" if MINGWRT_V_3_18
    6.35 +    help
    6.36 +      Enter the version number of the mingw runtime files to use
    6.37 +
     7.1 --- a/config/libc/uClibc.in	Sun Jul 11 14:26:52 2010 +0200
     7.2 +++ b/config/libc/uClibc.in	Sun Jul 11 21:36:20 2010 +0200
     7.3 @@ -1,5 +1,5 @@
     7.4  # uClibc options
     7.5 -# depends on ! BARE_METAL
     7.6 +# depends on ! MINGW32 && ! BARE_METAL
     7.7  
     7.8  config LIBC_uClibc
     7.9      select LIBC_SUPPORT_LINUXTHREADS
     8.1 --- a/scripts/build/cc/gcc.sh	Sun Jul 11 14:26:52 2010 +0200
     8.2 +++ b/scripts/build/cc/gcc.sh	Sun Jul 11 21:36:20 2010 +0200
     8.3 @@ -68,6 +68,8 @@
     8.4          ,,nptl)
     8.5              do_cc_core mode=shared build_libgcc=yes
     8.6              ;;
     8.7 +        ,,win32) do_cc_core mode=static build_libgcc=yes
     8.8 +            ;;
     8.9          *)  if [ "${CT_CC_GCC_4_3_or_later}" = "y" ]; then
    8.10                  do_cc_core mode=static build_libgcc=yes
    8.11              else
    8.12 @@ -361,7 +363,12 @@
    8.13              extra_config+=("--disable-libgomp")
    8.14          fi
    8.15      else
    8.16 -        extra_config+=("--enable-threads=posix")
    8.17 +        if [ "${CT_THREADS}" = "win32" ]; then
    8.18 +            extra_config+=("--enable-threads=win32")
    8.19 +            extra_config+=("--disable-win32-registry")
    8.20 +        else
    8.21 +            extra_config+=("--enable-threads=posix")
    8.22 +        fi
    8.23      fi
    8.24  
    8.25      if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/scripts/build/kernel/mingw32.sh	Sun Jul 11 21:36:20 2010 +0200
     9.3 @@ -0,0 +1,27 @@
     9.4 +# This file declares functions to install the kernel headers for mingw
     9.5 +# Copyright 2009 Bart vdr. Meulen
     9.6 +# Licensed under the GPL v2. See COPYING in the root of this package
     9.7 +
     9.8 +CT_DoKernelTupleValues() {
     9.9 +    CT_TARGET_KERNEL="mingw32"
    9.10 +    CT_TARGET_SYS=
    9.11 +}
    9.12 +
    9.13 +do_kernel_get() {
    9.14 +    CT_GetFile "w32api-${CT_W32API_VERSION}-mingw32-src" \
    9.15 +        http://downloads.sourceforge.net/sourceforge/mingw
    9.16 +}
    9.17 +
    9.18 +do_kernel_extract() {
    9.19 +    CT_Extract "w32api-${CT_W32API_VERSION}-mingw32-src"
    9.20 +}
    9.21 +
    9.22 +do_kernel_headers() {
    9.23 +    CT_DoStep INFO "Installing kernel headers"
    9.24 +
    9.25 +    mkdir -p "${CT_SYSROOT_DIR}/include"
    9.26 +    cp -r ${CT_SRC_DIR}/w32api-${CT_W32API_VERSION}-mingw32/include \
    9.27 +          ${CT_SYSROOT_DIR}
    9.28 +
    9.29 +    CT_EndStep
    9.30 +}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/scripts/build/libc/mingw.sh	Sun Jul 11 21:36:20 2010 +0200
    10.3 @@ -0,0 +1,74 @@
    10.4 +do_libc_get() {
    10.5 +    CT_GetFile "mingwrt-${CT_MINGWRT_VERSION}-mingw32-src" \
    10.6 +        http://downloads.sourceforge.net/sourceforge/mingw
    10.7 +}
    10.8 +
    10.9 +do_libc_extract() {
   10.10 +    CT_Extract "mingwrt-${CT_MINGWRT_VERSION}-mingw32-src"
   10.11 +}
   10.12 +
   10.13 +do_libc_check_config() {
   10.14 +    :
   10.15 +}
   10.16 +
   10.17 +do_libc_headers() {
   10.18 +    CT_DoStep INFO "Installing C library headers"
   10.19 +
   10.20 +    CT_DoLog EXTRA "Installing MinGW Runtime headers"
   10.21 +    mkdir -p "${CT_SYSROOT_DIR}/include"
   10.22 +    cp -r ${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32/include \
   10.23 +          ${CT_SYSROOT_DIR}
   10.24 +
   10.25 +    CT_EndStep
   10.26 +}
   10.27 +
   10.28 +do_libc_start_files() {
   10.29 +    :
   10.30 +}
   10.31 +
   10.32 +do_libc() {
   10.33 +    CT_DoStep INFO "Building MinGW files"
   10.34 +
   10.35 +    CT_DoLog EXTRA "Configuring W32-API"
   10.36 +
   10.37 +    mkdir -p "${CT_BUILD_DIR}/build-w32api"
   10.38 +    cd "${CT_BUILD_DIR}/build-w32api"
   10.39 +
   10.40 +    CFLAGS="-I${CT_SYSROOT_DIR}/include"                          \
   10.41 +    LDFLAGS="-L${CT_SYSROOT_DIR}/lib"                             \
   10.42 +    CT_DoExecLog ALL                                              \
   10.43 +    "${CT_SRC_DIR}/w32api-${CT_W32API_VERSION}-mingw32/configure" \
   10.44 +        --prefix=${CT_SYSROOT_DIR}                                \
   10.45 +        --host=${CT_TARGET}
   10.46 +
   10.47 +    CT_DoLog EXTRA "Building W32-API"
   10.48 +    CT_DoExecLog ALL make ${PARALLELMFLAGS}
   10.49 +
   10.50 +    CT_DoLog EXTRA "Installing W32-API"
   10.51 +    CT_DoExecLog ALL make install
   10.52 +
   10.53 +    CT_DoLog EXTRA "Configuring MinGW Runtime"
   10.54 +
   10.55 +    mkdir -p "${CT_BUILD_DIR}/build-mingwrt"
   10.56 +    cd "${CT_BUILD_DIR}/build-mingwrt"
   10.57 +
   10.58 +    CFLAGS="-I${CT_SYSROOT_DIR}/include"                            \
   10.59 +    LDFLAGS="-L${CT_SYSROOT_DIR}/lib"                               \
   10.60 +    CT_DoExecLog ALL                                                \
   10.61 +    "${CT_SRC_DIR}/mingwrt-${CT_MINGWRT_VERSION}-mingw32/configure" \
   10.62 +        --prefix=${CT_SYSROOT_DIR}/                                 \
   10.63 +        --host=${CT_TARGET}
   10.64 +
   10.65 +    CT_DoLog EXTRA "Building MinGW Runtime"
   10.66 +    CT_DoExecLog ALL make ${PARALLELMFLAGS}
   10.67 +
   10.68 +    CT_DoLog EXTRA "Installing MinGW Runtime"
   10.69 +    CT_DoExecLog ALL make install
   10.70 +
   10.71 +    CT_EndStep
   10.72 +}
   10.73 +
   10.74 +do_libc_finish() {
   10.75 + :
   10.76 +}
   10.77 +