Răsfoiți Sursa

add some basic infrastructure for qemu-system-m68k

Qemu emulates a Coldfire Evaluation board without MMU.
As that is the first non-MMU platform in OpenADK I added
ADK_TARGET_UCLINUX. Mksh can not be used for non-MMU, because
it requires fork() for job control and other things.
We use hush here. non-MMU support in uClibc does not have
shared library support.

Kernel does not start yet. So no runtime testing, but at least
coldfire toolchain can be tested with uClibc-ng.

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Waldemar Brodkorb 10 ani în urmă
părinte
comite
c43854da4d

+ 4 - 0
mk/image.mk

@@ -6,6 +6,8 @@ ifeq (${ADK_BINSH_ASH},y)
 BINSH:=ash
 BINSH:=ash
 else ifeq (${ADK_BINSH_BASH},y)
 else ifeq (${ADK_BINSH_BASH},y)
 BINSH:=bash
 BINSH:=bash
+else ifeq (${ADK_BINSH_HUSH},y)
+BINSH:=hush
 else ifeq (${ADK_BINSH_MKSH},y)
 else ifeq (${ADK_BINSH_MKSH},y)
 BINSH:=mksh
 BINSH:=mksh
 else ifeq (${ADK_BINSH_ZSH},y)
 else ifeq (${ADK_BINSH_ZSH},y)
@@ -19,6 +21,8 @@ ifeq (${ADK_ROOTSH_ASH},y)
 ROOTSH:=/bin/ash
 ROOTSH:=/bin/ash
 else ifeq (${ADK_ROOTSH_BASH},y)
 else ifeq (${ADK_ROOTSH_BASH},y)
 ROOTSH:=/bin/bash
 ROOTSH:=/bin/bash
+else ifeq (${ADK_ROOTSH_HUSH},y)
+ROOTSH:=/bin/hush
 else ifeq (${ADK_ROOTSH_MKSH},y)
 else ifeq (${ADK_ROOTSH_MKSH},y)
 ROOTSH:=/bin/mksh
 ROOTSH:=/bin/mksh
 else ifeq (${ADK_ROOTSH_TCSH},y)
 else ifeq (${ADK_ROOTSH_TCSH},y)

+ 7 - 1
mk/vars.mk

@@ -57,7 +57,13 @@ else
 GCC_CHECK:=
 GCC_CHECK:=
 endif
 endif
 
 
-GNU_TARGET_NAME:=	$(ADK_TARGET_CPU_ARCH)-$(ADK_VENDOR)-linux-$(ADK_TARGET_SUFFIX)
+ifeq ($(ADK_TARGET_UCLINUX),y)
+ADK_TARGET_LINUXTYPE:=	uclinux
+else
+ADK_TARGET_LINUXTYPE:=	linux
+endif
+
+GNU_TARGET_NAME:=	$(ADK_TARGET_CPU_ARCH)-$(ADK_VENDOR)-$(ADK_TARGET_LINUXTYPE)-$(ADK_TARGET_SUFFIX)
 TARGET_CROSS:=		$(TOOLCHAIN_DIR)/usr/bin/$(GNU_TARGET_NAME)-
 TARGET_CROSS:=		$(TOOLCHAIN_DIR)/usr/bin/$(GNU_TARGET_NAME)-
 TARGET_COMPILER_PREFIX?=${TARGET_CROSS}
 TARGET_COMPILER_PREFIX?=${TARGET_CROSS}
 CONFIGURE_TRIPLE:=	--build=${GNU_HOST_NAME} \
 CONFIGURE_TRIPLE:=	--build=${GNU_HOST_NAME} \

+ 4 - 1
package/base-files/Makefile

@@ -6,7 +6,7 @@ include $(ADK_TOPDIR)/mk/rootfs.mk
 
 
 PKG_NAME:=		base-files
 PKG_NAME:=		base-files
 PKG_VERSION:=		1.1
 PKG_VERSION:=		1.1
-PKG_RELEASE:=		3
+PKG_RELEASE:=		4
 PKG_SECTION:=		base/apps
 PKG_SECTION:=		base/apps
 PKG_DESCR:=		basic files and scripts
 PKG_DESCR:=		basic files and scripts
 
 
@@ -40,6 +40,9 @@ endif
 ifneq (${ADK_PACKAGE_ASH},)
 ifneq (${ADK_PACKAGE_ASH},)
 	echo /bin/ash >>${IDIR_BASE_FILES}/etc/shells
 	echo /bin/ash >>${IDIR_BASE_FILES}/etc/shells
 endif
 endif
+ifneq (${ADK_PACKAGE_HUSH},)
+	echo /bin/hush >>${IDIR_BASE_FILES}/etc/shells
+endif
 ifneq (${ADK_PACKAGE_BASH},)
 ifneq (${ADK_PACKAGE_BASH},)
 	echo /bin/bash >>${IDIR_BASE_FILES}/etc/shells
 	echo /bin/bash >>${IDIR_BASE_FILES}/etc/shells
 endif
 endif

+ 4 - 1
package/busybox/Makefile

@@ -5,7 +5,7 @@ include $(ADK_TOPDIR)/rules.mk
 
 
 PKG_NAME:=		busybox
 PKG_NAME:=		busybox
 PKG_VERSION:=		1.22.1
 PKG_VERSION:=		1.22.1
-PKG_RELEASE:=		1
+PKG_RELEASE:=		2
 PKG_MD5SUM:=		337d1a15ab1cb1d4ed423168b1eb7d7e
 PKG_MD5SUM:=		337d1a15ab1cb1d4ed423168b1eb7d7e
 PKG_DESCR:=		core utilities for embedded systems
 PKG_DESCR:=		core utilities for embedded systems
 PKG_SECTION:=		base/apps
 PKG_SECTION:=		base/apps
@@ -41,6 +41,9 @@ do-configure:
 		${WRKBUILD}/.config.tmp; \
 		${WRKBUILD}/.config.tmp; \
 		cp ${WRKBUILD}/.config.tmp ${WRKBUILD}/.config; \
 		cp ${WRKBUILD}/.config.tmp ${WRKBUILD}/.config; \
 	done
 	done
+ifeq ($(ADK_TARGET_UCLINUX),y)
+	echo 'BUSYBOX_NOMMU=y' >> ${WRKBUILD}/.config
+endif
 	$(SED) 's;@IDIR@;${WRKINST};' ${WRKBUILD}/.config
 	$(SED) 's;@IDIR@;${WRKINST};' ${WRKBUILD}/.config
 	yes '' | PATH='$(HOST_PATH)' $(MAKE) ${BB_MAKE_FLAGS} -C ${WRKBUILD} oldconfig $(MAKE_TRACE)
 	yes '' | PATH='$(HOST_PATH)' $(MAKE) ${BB_MAKE_FLAGS} -C ${WRKBUILD} oldconfig $(MAKE_TRACE)
 
 

+ 2 - 0
package/libgcc/Makefile

@@ -34,6 +34,7 @@ INSTALL_STYLE:=		manual
 
 
 libgcc-install:
 libgcc-install:
 	$(INSTALL_DIR) ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
 	$(INSTALL_DIR) ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
+ifeq ($(ADK_TARGET_UCLINUX),)
 ifeq ($(ADK_LINUX_SH),y)
 ifeq ($(ADK_LINUX_SH),y)
 ifeq ($(ADK_TARGET_LIB_GLIBC),)
 ifeq ($(ADK_TARGET_LIB_GLIBC),)
 	${CP} ${STAGING_TARGET_DIR}/lib/m4-nofpu/libgcc*.so* ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
 	${CP} ${STAGING_TARGET_DIR}/lib/m4-nofpu/libgcc*.so* ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
@@ -41,5 +42,6 @@ endif
 else
 else
 	${CP} ${STAGING_TARGET_DIR}/lib/libgcc*.so* ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
 	${CP} ${STAGING_TARGET_DIR}/lib/libgcc*.so* ${IDIR_LIBGCC}/$(ADK_TARGET_LIBC_PATH)
 endif
 endif
+endif
 
 
 include ${ADK_TOPDIR}/mk/pkg-bottom.mk
 include ${ADK_TOPDIR}/mk/pkg-bottom.mk

+ 1 - 1
package/mksh/Makefile

@@ -12,7 +12,7 @@ PKG_SECTION:=		base/shells
 PKG_URL:=		http://www.mirbsd.org/
 PKG_URL:=		http://www.mirbsd.org/
 PKG_SITES:=		${MASTER_SITE_MIRBSD:distfiles/=dist/mir/mksh/}
 PKG_SITES:=		${MASTER_SITE_MIRBSD:distfiles/=dist/mir/mksh/}
 
 
-PKG_DFLT_MKSH:=		y if !ADK_TOOLCHAIN_ONLY
+PKG_DFLT_MKSH:=		y if !ADK_TOOLCHAIN_ONLY && !ADK_TARGET_UCLINUX
 
 
 DISTFILES=		${PKG_NAME}-R${PKG_VERSION}.tgz
 DISTFILES=		${PKG_NAME}-R${PKG_VERSION}.tgz
 WRKDIST=		${WRKDIR}/${PKG_NAME}
 WRKDIST=		${WRKDIR}/${PKG_NAME}

+ 4 - 0
target/config/Config.in

@@ -14,6 +14,10 @@ config ADK_TOOLCHAIN_ONLY
 config ADK_TARGET_TOOLCHAIN
 config ADK_TARGET_TOOLCHAIN
 	boolean
 	boolean
 
 
+config ADK_TARGET_UCLINUX
+	select ADK_TARGET_USE_STATIC_LIBS
+	boolean
+
 config ADK_TARGET_QEMU
 config ADK_TARGET_QEMU
 	boolean
 	boolean
 
 

+ 3 - 0
target/config/Config.in.cpu

@@ -107,6 +107,9 @@ config ADK_CPU_CORTEX_A9
 config ADK_CPU_ARMV8
 config ADK_CPU_ARMV8
 	boolean
 	boolean
 
 
+config ADK_CPU_CF_5208
+	boolean
+
 config ADK_TARGET_CPU_ARCH
 config ADK_TARGET_CPU_ARCH
 	string
 	string
 	default "aarch64" if ADK_LINUX_AARCH64 && ADK_little
 	default "aarch64" if ADK_LINUX_AARCH64 && ADK_little

+ 1 - 0
target/config/Config.in.kernel

@@ -52,6 +52,7 @@ config ADK_TARGET_KERNEL_MINICONFIG
 	default "qemu-x86_64" if ADK_TARGET_SYSTEM_QEMU_X86_64
 	default "qemu-x86_64" if ADK_TARGET_SYSTEM_QEMU_X86_64
 	default "qemu-xtensa" if ADK_TARGET_SYSTEM_QEMU_XTENSA
 	default "qemu-xtensa" if ADK_TARGET_SYSTEM_QEMU_XTENSA
 	default "qemu-alpha" if ADK_TARGET_SYSTEM_QEMU_ALPHA
 	default "qemu-alpha" if ADK_TARGET_SYSTEM_QEMU_ALPHA
+	default "qemu-m68k" if ADK_TARGET_SYSTEM_QEMU_M68K
 	default "aranym-m68k" if ADK_TARGET_SYSTEM_ARANYM_M68K
 	default "aranym-m68k" if ADK_TARGET_SYSTEM_ARANYM_M68K
 	default "vbox-x86" if ADK_TARGET_SYSTEM_VBOX_X86
 	default "vbox-x86" if ADK_TARGET_SYSTEM_VBOX_X86
 	default "ibm-x40" if ADK_TARGET_SYSTEM_IBM_X40
 	default "ibm-x40" if ADK_TARGET_SYSTEM_IBM_X40

+ 2 - 0
target/config/Config.in.libc.choice

@@ -23,6 +23,7 @@ config ADK_TARGET_LIB_MUSL
 	prompt "musl C library"
 	prompt "musl C library"
 	boolean
 	boolean
 	select ADK_musl
 	select ADK_musl
+	depends on !ADK_TARGET_UCLINUX
 	depends on \
 	depends on \
 		ADK_LINUX_ARM || \
 		ADK_LINUX_ARM || \
 		ADK_LINUX_MICROBLAZE || \
 		ADK_LINUX_MICROBLAZE || \
@@ -39,6 +40,7 @@ config ADK_TARGET_LIB_GLIBC
 	boolean
 	boolean
 	select ADK_glibc
 	select ADK_glibc
 	depends on !ADK_LINUX_XTENSA
 	depends on !ADK_LINUX_XTENSA
+	depends on !ADK_TARGET_UCLINUX
 	help
 	help
 	  http://www.gnu.org/libc
 	  http://www.gnu.org/libc
 
 

+ 0 - 2
target/config/Config.in.libc.default

@@ -23,9 +23,7 @@ config ADK_TARGET_LIBC
 config ADK_TARGET_WITH_NPTL
 config ADK_TARGET_WITH_NPTL
 	boolean
 	boolean
 	default n if ADK_TARGET_LIB_UCLIBC_NG && ADK_LINUX_M68K
 	default n if ADK_TARGET_LIB_UCLIBC_NG && ADK_LINUX_M68K
-	default n if ADK_TARGET_LIB_UCLIBC_NG && ADK_LINUX_MICROBLAZE
 	default n if ADK_TARGET_LIB_UCLIBC && ADK_LINUX_M68K
 	default n if ADK_TARGET_LIB_UCLIBC && ADK_LINUX_M68K
-	default n if ADK_TARGET_LIB_UCLIBC && ADK_LINUX_MICROBLAZE
 	default y
 	default y
 
 
 config ADK_TARGET_SUFFIX
 config ADK_TARGET_SUFFIX

+ 14 - 0
target/config/Config.in.runtime

@@ -150,6 +150,7 @@ config ADK_RUNTIME_KBD_LAYOUT
 
 
 choice
 choice
 prompt "initial login shell for the root user"
 prompt "initial login shell for the root user"
+default ADK_ROOTSH_HUSH if ADK_TARGET_UCLINUX
 default ADK_ROOTSH_MKSH
 default ADK_ROOTSH_MKSH
 
 
 config ADK_ROOTSH_MKSH
 config ADK_ROOTSH_MKSH
@@ -159,6 +160,12 @@ config ADK_ROOTSH_MKSH
 	  Use mksh (a Korn Shell variant) as standard login shell
 	  Use mksh (a Korn Shell variant) as standard login shell
 	  for the superuser.
 	  for the superuser.
 
 
+config ADK_ROOTSH_HUSH
+	select ADK_PACKAGE_HUSH if !ADK_TOOLCHAIN_ONLY
+	bool "hush (Shell compatible with non-MMU systems)"
+	help
+	  hush shell from busybox.
+
 config ADK_ROOTSH_ASH
 config ADK_ROOTSH_ASH
 	select BUSYBOX_ASH
 	select BUSYBOX_ASH
 	bool "ash (busybox)"
 	bool "ash (busybox)"
@@ -190,6 +197,7 @@ endchoice
 
 
 choice
 choice
 prompt "system /bin/sh (POSIX script shell)"
 prompt "system /bin/sh (POSIX script shell)"
+default ADK_BINSH_HUSH if ADK_TARGET_UCLINUX
 default ADK_BINSH_MKSH
 default ADK_BINSH_MKSH
 
 
 config ADK_BINSH_MKSH
 config ADK_BINSH_MKSH
@@ -199,6 +207,12 @@ config ADK_BINSH_MKSH
 	  Use mksh (a Korn Shell variant) as system shell, which is
 	  Use mksh (a Korn Shell variant) as system shell, which is
 	  both small and powerful, so quite suited for this task.
 	  both small and powerful, so quite suited for this task.
 
 
+config ADK_BINSH_HUSH
+	select ADK_PACKAGE_HUSH if !ADK_TOOLCHAIN_ONLY
+	bool "hush (busybox)"
+	help
+	  hush shell.
+
 config ADK_BINSH_ASH
 config ADK_BINSH_ASH
 	select BUSYBOX_ASH
 	select BUSYBOX_ASH
 	bool "ash (busybox)"
 	bool "ash (busybox)"

+ 1 - 0
target/config/Config.in.target

@@ -3,6 +3,7 @@
 
 
 config ADK_TARGET_CFLAGS
 config ADK_TARGET_CFLAGS
 	string
 	string
+	default "-march=isaaplus -mcpu=5208" if ADK_CPU_CF_5208
 	default "-mcpu=v7.10.d" if ADK_CPU_MICROBLAZE
 	default "-mcpu=v7.10.d" if ADK_CPU_MICROBLAZE
 	default "-m4 -ml" if ADK_CPU_SH4 && ADK_little
 	default "-m4 -ml" if ADK_CPU_SH4 && ADK_little
 	default "-m4 -mb" if ADK_CPU_SH4 && ADK_big
 	default "-m4 -mb" if ADK_CPU_SH4 && ADK_big

+ 1 - 0
target/config/Config.in.toolchain

@@ -128,6 +128,7 @@ config ADK_DEBUG_STRIP
 config ADK_TARGET_USE_STATIC_LIBS
 config ADK_TARGET_USE_STATIC_LIBS
 	bool "Link applications statically by default"
 	bool "Link applications statically by default"
 	default n
 	default n
+	default y if ADK_TARGET_UCLINUX
 	select BUSYBOX_STATIC
 	select BUSYBOX_STATIC
 	help
 	help
 	  Useful for debugging of dynamic linker problems. Be aware of the fact, that uClibc and glibc
 	  Useful for debugging of dynamic linker problems. Be aware of the fact, that uClibc and glibc

+ 28 - 1
target/m68k/Makefile

@@ -7,9 +7,22 @@ include $(ADK_TOPDIR)/mk/modules.mk
 include $(ADK_TOPDIR)/mk/kernel-build.mk
 include $(ADK_TOPDIR)/mk/kernel-build.mk
 include $(ADK_TOPDIR)/mk/image.mk
 include $(ADK_TOPDIR)/mk/image.mk
 
 
-KERNEL:=$(LINUX_DIR)/vmlinux.gz
+KERNEL:=$(LINUX_DIR)/vmlinux
+QEMU_ARGS:=${ADK_QEMU_ARGS}
+QEMU_ARGS+=-M mcf5208evb -cpu m5206
 
 
 # target helper text
 # target helper text
+ifeq ($(ADK_TARGET_FS),archive)
+targethelp:
+	@echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSTARBALL)"
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
+	@echo "Use following command to create a QEMU Image:"
+	@echo "./scripts/create.sh qemu-${ADK_TARGET_CPU_ARCH}.img $(FW_DIR)/$(ROOTFSTARBALL)"
+	@echo "Start qemu with following options:"
+	@echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${ADK_TARGET_CPU_ARCH}.img'
+endif
+endif
 ifeq ($(ADK_TARGET_FS),initramfs)
 ifeq ($(ADK_TARGET_FS),initramfs)
 targethelp:
 targethelp:
 	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
 	@echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}'
@@ -23,6 +36,14 @@ ifeq ($(ADK_TARGET_SYSTEM_ARANYM_M68K),y)
 	@echo 'Ungrab mouse with middle mouse click'
 	@echo 'Ungrab mouse with middle mouse click'
 endif
 endif
 endif
 endif
+ifeq ($(ADK_TARGET_FS),initramfspiggyback)
+targethelp:
+	@echo 'The kernel+initramfs file is: $(FW_DIR)/${TARGET_KERNEL}'
+ifeq ($(ADK_TARGET_QEMU),y)
+	@echo "Start qemu with following command line:"
+	@echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL)'
+endif
+endif
 
 
 kernel-strip:
 kernel-strip:
 
 
@@ -30,6 +51,12 @@ kernel-install: kernel-strip
 	@cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL)
 	@cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL)
 
 
 # filesystem specific targets
 # filesystem specific targets
+ifeq ($(ADK_TARGET_FS),archive)
+imageinstall: kernel-install $(FW_DIR)/$(ROOTFSUSERTARBALL) targethelp
+endif
 ifeq ($(ADK_TARGET_FS),initramfs)
 ifeq ($(ADK_TARGET_FS),initramfs)
 imageinstall: kernel-install $(FW_DIR)/$(INITRAMFS) targethelp
 imageinstall: kernel-install $(FW_DIR)/$(INITRAMFS) targethelp
 endif
 endif
+ifeq ($(ADK_TARGET_FS),initramfspiggyback)
+imageinstall: createinitramfs targethelp
+endif

+ 16 - 0
target/m68k/kernel/qemu-m68k

@@ -0,0 +1,16 @@
+CONFIG_M68K=y
+CONFIG_COLDFIRE=y
+CONFIG_M520x=y
+# CONFIG_MMU is not set
+CONFIG_CLOCK_SET=y
+CONFIG_CLOCK_FREQ=166666666
+CONFIG_M5208EVB=y
+CONFIG_RAMBASE=0x40000000
+CONFIG_RAMSIZE=0x2000000
+CONFIG_VECTORBASE=0x40000000
+CONFIG_KERNELBASE=0x40020000
+CONFIG_BINFMT_FLAT=y
+CONFIG_SERIAL_MCF=y
+CONFIG_SERIAL_MCF_BAUDRATE=115200
+CONFIG_SERIAL_MCF_CONSOLE=y
+

+ 11 - 0
target/m68k/systems/qemu-m68k

@@ -0,0 +1,11 @@
+config ADK_TARGET_SYSTEM_QEMU_M68K
+	bool "Qemu M68K"
+	select ADK_m68k
+	select ADK_qemu_m68k
+	select ADK_CPU_CF_5208
+	select ADK_TARGET_QEMU
+	select ADK_TARGET_UCLINUX
+	select ADK_TARGET_KERNEL_ZIMAGE
+	help
+	 Support for Qemu Emulator M68K/Coldfire without MMU.
+

+ 2 - 2
target/m68k/uclibc-ng.config

@@ -34,9 +34,9 @@ ARCH_BIG_ENDIAN=y
 # Using Big Endian
 # Using Big Endian
 #
 #
 ARCH_HAS_MMU=y
 ARCH_HAS_MMU=y
-ARCH_USE_MMU=y
+# ARCH_USE_MMU is not set
 UCLIBC_HAS_FLOATS=y
 UCLIBC_HAS_FLOATS=y
-UCLIBC_HAS_FPU=y
+# UCLIBC_HAS_FPU is not set
 DO_C99_MATH=y
 DO_C99_MATH=y
 DO_XSI_MATH=y
 DO_XSI_MATH=y
 UCLIBC_HAS_FENV=y
 UCLIBC_HAS_FENV=y

+ 222 - 0
target/m68k/uclibc.config

@@ -0,0 +1,222 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# uClibc-ng 1.0.0 C Library Configuration
+#
+# TARGET_alpha is not set
+# TARGET_arc is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_i386 is not set
+TARGET_m68k=y
+# TARGET_metag is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sparc is not set
+# TARGET_x86_64 is not set
+# TARGET_xtensa is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="m68k"
+FORCE_OPTIONS_FOR_ARCH=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_HAS_DEPRECATED_SYSCALLS=y
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+DO_XSI_MATH=y
+UCLIBC_HAS_FENV=y
+UCLIBC_HAS_LONG_DOUBLE_MATH=y
+KERNEL_HEADERS=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+DOPIC=y
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+LDSO_PRELOAD_ENV_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# LDSO_STANDALONE_SUPPORT is not set
+# LDSO_PRELINK_SUPPORT is not set
+UCLIBC_STATIC_LDCONFIG=y
+LDSO_RUNPATH=y
+LDSO_SAFE_RUNPATH=y
+LDSO_SEARCH_INTERP_PATH=y
+LDSO_LD_LIBRARY_PATH=y
+# LDSO_NO_CLEANUP is not set
+# LDSO_GNU_HASH_SUPPORT is not set
+HAS_NO_THREADS=y
+# UCLIBC_HAS_THREADS_NATIVE is not set
+UCLIBC_HAS_SYSLOG=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_HAS_OBSTACK=y
+UCLIBC_DYNAMIC_ATEXIT=y
+UCLIBC_SUSV2_LEGACY=y
+UCLIBC_SUSV3_LEGACY=y
+# UCLIBC_SUSV3_LEGACY_MACROS is not set
+UCLIBC_SUSV4_LEGACY=y
+# UCLIBC_STRICT_HEADERS is not set
+# UCLIBC_HAS_STUBS is not set
+UCLIBC_HAS_SHADOW=y
+UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
+UCLIBC_HAS___PROGNAME=y
+UCLIBC_HAS_PTY=y
+ASSUME_DEVPTS=y
+UNIX98PTY_ONLY=y
+UCLIBC_HAS_GETPT=y
+UCLIBC_HAS_LIBUTIL=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+UCLIBC_FALLBACK_TO_ETC_LOCALTIME=y
+
+#
+# Advanced Library Settings
+#
+UCLIBC_PWD_BUFFER_SIZE=256
+UCLIBC_GRP_BUFFER_SIZE=256
+
+#
+# Support various families of functions
+#
+UCLIBC_LINUX_SPECIFIC=y
+UCLIBC_HAS_GNU_ERROR=y
+UCLIBC_BSD_SPECIFIC=y
+UCLIBC_HAS_BSD_ERR=y
+UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
+# UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL is not set
+# UCLIBC_NTP_LEGACY is not set
+UCLIBC_SV4_DEPRECATED=y
+UCLIBC_HAS_REALTIME=y
+UCLIBC_HAS_ADVANCED_REALTIME=y
+UCLIBC_HAS_EPOLL=y
+UCLIBC_HAS_XATTR=y
+# UCLIBC_HAS_PROFILING is not set
+UCLIBC_HAS_CRYPT_IMPL=y
+# UCLIBC_HAS_SHA256_CRYPT_IMPL is not set
+# UCLIBC_HAS_SHA512_CRYPT_IMPL is not set
+UCLIBC_HAS_CRYPT=y
+UCLIBC_HAS_NETWORK_SUPPORT=y
+UCLIBC_HAS_SOCKET=y
+UCLIBC_HAS_IPV4=y
+UCLIBC_HAS_IPV6=y
+UCLIBC_USE_NETLINK=y
+UCLIBC_SUPPORT_AI_ADDRCONFIG=y
+UCLIBC_HAS_BSD_RES_CLOSE=y
+UCLIBC_HAS_COMPAT_RES_STATE=y
+# UCLIBC_HAS_EXTRA_COMPAT_RES_STATE is not set
+UCLIBC_HAS_RESOLVER_SUPPORT=y
+UCLIBC_HAS_LIBRESOLV_STUB=y
+UCLIBC_HAS_LIBNSL_STUB=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+# UCLIBC_HAS_FOPEN_CLOSEEXEC_MODE is not set
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+UCLIBC_HAS_GNU_GETSUBOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_FNMATCH=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_NFTW=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_FTS=y
+UCLIBC_HAS_GLOB=y
+UCLIBC_HAS_GNU_GLOB=y
+UCLIBC_HAS_UTMPX=y
+
+#
+# Library Installation Options
+#
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="/usr/"
+MULTILIB_DIR="lib"
+HARDWIRED_ABSPATH=y
+
+#
+# Security options
+#
+UCLIBC_HAS_ARC4RANDOM=y
+# ARC4RANDOM_USES_NODEV is not set
+# UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+# UCLIBC_BUILD_NOW is not set
+UCLIBC_BUILD_NOEXECSTACK=y
+
+#
+# Development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+UCLIBC_EXTRA_CFLAGS=""
+# DODEBUG is not set
+# DOSTRIP is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MALLOC_DEBUGGING is not set
+# UCLIBC_HAS_BACKTRACE is not set
+WARNINGS="-Wall"
+EXTRA_WARNINGS=y
+# DOMULTI is not set

+ 9 - 2
toolchain/gcc/Makefile

@@ -55,7 +55,7 @@ else
 GCC_FINAL_CONFOPTS+=	--enable-shared='libstdc++,libgcc'
 GCC_FINAL_CONFOPTS+=	--enable-shared='libstdc++,libgcc'
 endif
 endif
 
 
-ifeq ($(ADK_LINUX_SH)$(ADK_LINUX_X86_64)$(ADK_LINUX_X86),)
+ifeq ($(ADK_LINUX_M68K)$(ADK_LINUX_SH)$(ADK_LINUX_X86_64)$(ADK_LINUX_X86),)
 GCC_FINAL_CONFOPTS+=	--disable-biarch --disable-multilib
 GCC_FINAL_CONFOPTS+=	--disable-biarch --disable-multilib
 endif
 endif
 
 
@@ -136,6 +136,10 @@ ifeq ($(ADK_CPU_SPARC_V9),y)
 GCC_CONFOPTS+=		--with-cpu=ultrasparc
 GCC_CONFOPTS+=		--with-cpu=ultrasparc
 endif
 endif
 
 
+ifeq ($(ADK_CPU_CF_5208),y)
+GCC_CONFOPTS+=		--enable-multilib --with-arch=cf --with-cpu=5208
+endif
+
 ifneq ($(ADK_TARGET_MIPS_ABI),)
 ifneq ($(ADK_TARGET_MIPS_ABI),)
 GCC_CONFOPTS+=		--with-abi=${ADK_TARGET_MIPS_ABI}
 GCC_CONFOPTS+=		--with-abi=${ADK_TARGET_MIPS_ABI}
 endif
 endif
@@ -144,7 +148,11 @@ ifeq (${ADK_MAKE_PARALLEL},y)
 GCC_MAKEOPTS+=		-j${ADK_MAKE_JOBS}
 GCC_MAKEOPTS+=		-j${ADK_MAKE_JOBS}
 endif
 endif
 
 
+ifeq ($(ADK_TARGET_UCLINUX),y)
+LANGUAGES:=c
+else
 LANGUAGES:=c,c++
 LANGUAGES:=c,c++
+endif
 
 
 include ${ADK_TOPDIR}/mk/buildhlp.mk
 include ${ADK_TOPDIR}/mk/buildhlp.mk
 
 
@@ -177,7 +185,6 @@ endif
 		$(WRKBUILD)/configure \
 		$(WRKBUILD)/configure \
 			${GCC_CONFOPTS} \
 			${GCC_CONFOPTS} \
 			--enable-languages=c \
 			--enable-languages=c \
-			--disable-multilib \
 			--disable-libssp \
 			--disable-libssp \
 			--disable-shared \
 			--disable-shared \
 			--without-headers
 			--without-headers

+ 12 - 0
toolchain/gcc/patches/4.8.3/disable-atomics.m68k

@@ -0,0 +1,12 @@
+diff -Nur gcc-4.8.3.orig/libgcc/config.host gcc-4.8.3/libgcc/config.host
+--- gcc-4.8.3.orig/libgcc/config.host	2014-03-20 17:12:30.000000000 +0100
++++ gcc-4.8.3/libgcc/config.host	2014-07-26 13:15:06.359463368 +0200
+@@ -689,7 +689,7 @@
+ m68k*-*-openbsd*)
+ 	;;
+ m68k-*-uclinux*)	# Motorola m68k/ColdFire running uClinux with uClibc
+-	tmake_file="$tmake_file m68k/t-floatlib m68k/t-linux"
++	tmake_file="$tmake_file m68k/t-floatlib"
+ 	md_unwind_header=m68k/linux-unwind.h
+ 	;;
+ m68k-*-linux*)			# Motorola m68k's running GNU/Linux