summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann E. MORIN" <yann.morin.1998@anciens.enib.fr>2010-07-11 19:36:20 (GMT)
committerBart vdr Meulen <bartvdrmeulen@gmail.com>2010-07-11 19:36:20 (GMT)
commitb81d232a9bae21ef1bc896f106a926b66dcae869 (patch)
treef7d5dc20946087204ba17bde901acc70911bbd70
parent7707f0fb542406fbfe8b1cf6f80ba488a135314a (diff)
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>
-rw-r--r--config/kernel.in4
-rw-r--r--config/kernel/mingw32.in32
-rw-r--r--config/libc.in12
-rw-r--r--config/libc/eglibc.in2
-rw-r--r--config/libc/glibc.in2
-rw-r--r--config/libc/mingw.in34
-rw-r--r--config/libc/uClibc.in2
-rw-r--r--scripts/build/cc/gcc.sh9
-rw-r--r--scripts/build/kernel/mingw32.sh27
-rw-r--r--scripts/build/libc/mingw.sh74
10 files changed, 194 insertions, 4 deletions
diff --git a/config/kernel.in b/config/kernel.in
index 630eae6..446bd6b 100644
--- a/config/kernel.in
+++ b/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
diff --git a/config/kernel/mingw32.in b/config/kernel/mingw32.in
new file mode 100644
index 0000000..1496d05
--- /dev/null
+++ b/config/kernel/mingw32.in
@@ -0,0 +1,32 @@
+# mingw32 config options
+
+config KERNEL_mingw32
+ select MINGW32
+ help
+ Build a toolchain targeting systems running Windows as host
+
+choice
+ bool
+ prompt "Windows api version"
+
+# Don't remove next line
+# CT_INSERT_VERSION_BELOW
+config W32API_V_3_14
+ bool
+ prompt "3.14"
+
+config W32API_V_select
+ bool
+ prompt "Other version"
+
+endchoice
+
+config W32API_VERSION
+ string
+ prompt "W32 api version" if W32API_V_select
+# Don't remove next line
+# CT_INSERT_VERSION_STRING_BELOW
+ default "3.14" if W32API_V_3_14
+ help
+ Enter the version number of the windows api files to use
+
diff --git a/config/libc.in b/config/libc.in
index 58bc320..2ee46ba 100644
--- a/config/libc.in
+++ b/config/libc.in
@@ -35,10 +35,16 @@ config LIBC_SUPPORT_LINUXTHREADS
default n
select LIBC_SUPPORT_THREADS_ANY
+config LIBC_SUPPORT_WIN32THREADS
+ bool
+ default n
+ select LIBC_SUPPORT_THREADS_ANY
+
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!
@@ -51,6 +57,7 @@ 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_WIN32 if LIBC_SUPPORT_WIN32THREADS
default THREADS_NONE if ! LIBC_SUPPORT_THREADS_ANY
config THREADS_NPTL
@@ -63,6 +70,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"
diff --git a/config/libc/eglibc.in b/config/libc/eglibc.in
index 0dc6848..b13571b 100644
--- a/config/libc/eglibc.in
+++ b/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
diff --git a/config/libc/glibc.in b/config/libc/glibc.in
index b2fc88c..3c904bc 100644
--- a/config/libc/glibc.in
+++ b/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
diff --git a/config/libc/mingw.in b/config/libc/mingw.in
new file mode 100644
index 0000000..2c7bb0f
--- /dev/null
+++ b/config/libc/mingw.in
@@ -0,0 +1,34 @@
+# 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"
+
+# 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
+
diff --git a/config/libc/uClibc.in b/config/libc/uClibc.in
index b63239d..aba8674 100644
--- a/config/libc/uClibc.in
+++ b/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
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index c4373c1..3fb6ca0 100644
--- a/scripts/build/cc/gcc.sh
+++ b/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
@@ -361,7 +363,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
if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
diff --git a/scripts/build/kernel/mingw32.sh b/scripts/build/kernel/mingw32.sh
new file mode 100644
index 0000000..d10442b
--- /dev/null
+++ b/scripts/build/kernel/mingw32.sh
@@ -0,0 +1,27 @@
+# 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
+}
+
+do_kernel_extract() {
+ CT_Extract "w32api-${CT_W32API_VERSION}-mingw32-src"
+}
+
+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
+}
diff --git a/scripts/build/libc/mingw.sh b/scripts/build/libc/mingw.sh
new file mode 100644
index 0000000..28d74d6
--- /dev/null
+++ b/scripts/build/libc/mingw.sh
@@ -0,0 +1,74 @@
+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}/build-w32api"
+ cd "${CT_BUILD_DIR}/build-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}/build-mingwrt"
+ cd "${CT_BUILD_DIR}/build-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() {
+ :
+}
+