summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2015-12-13 17:18:40 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2015-12-13 17:18:44 +0100
commita94d74d9c875b4a1c07945bf9af282221d0178b3 (patch)
treedaa2be873d758ad77006696efde6e76982f24d20
parent74663fdbbd1dc92dd91f6f88dbc4f972df12c404 (diff)
rework prereq check
The new prereq check is completely implemented in POSIX shell in scripts/prereq.sh. It combines the old features from Makefile, scan-tools.sh, scan-pkgs.sh, reloc.sh and some wrappers for tools. The big benefit is to have all portability stuff in one place. Furthermore we can compile GNU make and bash on the fly, for systems lacking the required tools. All changes on the host are detected on the fly, no make prereq required anymore. The build process is separated in following three phases: 1. small wrapper Makefile is used for BSD make or GNU make 2. prereq.sh is called, doing all checking, calling Makefile.adk 3. old logic in Makefile.adk or mk/build.mk is used Tested successfully on Linux, MacOS X, Cygwin, FreeBSD, OpenBSD and NetBSD. An old depmaker bug was fixed, only optional host tools are compiled. For example, even when a host provides xz, a local xz was compiled in the past, because other packages had a build dependency on it. Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
-rw-r--r--.gitignore3
-rw-r--r--BSDmakefile27
-rw-r--r--Config.in8
-rw-r--r--GNUmakefile24
-rw-r--r--Makefile221
-rw-r--r--Makefile.adk179
-rw-r--r--Makefile.inc4
-rw-r--r--README11
-rw-r--r--adk/config/Makefile10
-rw-r--r--adk/tools/depmaker.c52
-rw-r--r--mk/build.mk116
-rw-r--r--mk/buildhlp.mk2
-rw-r--r--mk/fetch.mk6
-rw-r--r--mk/host-bottom.mk33
-rw-r--r--mk/image.mk5
-rw-r--r--mk/kernel-build.mk25
-rw-r--r--mk/kernel-vars.mk11
-rw-r--r--mk/os.mk16
-rw-r--r--mk/package.mk4
-rw-r--r--mk/pkg-bottom.mk20
-rw-r--r--mk/vars.mk4
-rw-r--r--package/Makefile10
-rw-r--r--package/adk-helper/src/makedevs.c2
-rw-r--r--package/busybox/Makefile2
-rw-r--r--package/glib/Makefile6
-rw-r--r--package/openssl/Makefile4
-rw-r--r--package/pkgconf/Makefile5
-rw-r--r--package/squashfs/Makefile1
-rw-r--r--package/xz/Makefile2
-rw-r--r--rules.mk5
-rwxr-xr-xscripts/adkprepare.sh67
-rwxr-xr-xscripts/bulk-qemu.sh33
-rwxr-xr-xscripts/bulk-toolchain.sh30
-rwxr-xr-xscripts/create-menu1
-rw-r--r--scripts/gcc-bisect.sh206
-rwxr-xr-xscripts/make9
-rwxr-xr-xscripts/prereq.sh643
-rwxr-xr-xscripts/reloc.sh18
-rw-r--r--scripts/scan-pkgs.sh91
-rwxr-xr-xscripts/sha256sum14
-rw-r--r--target/Makefile19
-rw-r--r--target/config/Config.in.adk25
-rw-r--r--target/config/Config.in.target1
-rw-r--r--target/config/Config.in.tools4
-rw-r--r--toolchain/Makefile28
-rw-r--r--toolchain/gcc/Makefile1
46 files changed, 1039 insertions, 969 deletions
diff --git a/.gitignore b/.gitignore
index 2a5c6bb3b..f5fa5dac6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,12 +30,11 @@
/toolchain_*/
/.ADK_HAVE_DOT_CONFIG
/.tmpconfig.h
-/.prereq_done
/.config*
/.busyboxcfg
/.rebuild.*
/.defconfig
-/.adkinit
+/.firstrun
/.menu
/all.config
/target_*/
diff --git a/BSDmakefile b/BSDmakefile
deleted file mode 100644
index ddf869106..000000000
--- a/BSDmakefile
+++ /dev/null
@@ -1,27 +0,0 @@
-# This file is part of the OpenADK project. OpenADK is copyrighted
-# material, please see the LICENCE file in the top-level directory.
-
-ADK_TOPDIR= ${.CURDIR}
-PWD= ${.CURDIR}
-
-.include "${.CURDIR}/Makefile.inc"
-
-.if defined(package) && !empty(package)
-subdir:= package/${package}
-. if !make(clean)
-_subdir_dep:= ${ADK_TOPDIR}/.config
-. endif
-.endif
-
-.if defined(subdir) && !empty(subdir)
-_subdir:= ${.TARGETS}
-${.TARGETS}: _subdir
-
-_subdir: ${_subdir_dep}
- cd ${.CURDIR}/${subdir} && ADK_TOPDIR=${.CURDIR} DEVELOPER=1 \
- ${GMAKE} ADK_VERBOSE=1 ${.MFLAGS} ${_subdir}
-
-. include "${.CURDIR}/prereq.mk"
-.else
-. include "${.CURDIR}/Makefile"
-.endif
diff --git a/Config.in b/Config.in
index 3eb25c58b..62838e64c 100644
--- a/Config.in
+++ b/Config.in
@@ -10,7 +10,7 @@ config ADK_MODULES
default y
config ADK_HAVE_DOT_CONFIG
- boolean
+ bool
default y
source "target/config/Config.in.appliances"
@@ -44,7 +44,7 @@ menu "Package options"
visible if !ADK_CHOOSE_APPLIANCE
config ADK_LEAVE_ETC_ALONE
- boolean "do not install anything into /etc"
+ bool "do not install anything into /etc"
default n
help
Enabling this option will prevent the ADK from installing anything
@@ -60,7 +60,7 @@ config ADK_LEAVE_ETC_ALONE
on will almost certainly render the resulting system unusable.
config ADK_INSTALL_PACKAGE_INIT_SCRIPTS
- boolean "ship custom init-scripts along with packages"
+ bool "ship custom init-scripts along with packages"
default y
depends on !ADK_LEAVE_ETC_ALONE
help
@@ -72,7 +72,7 @@ config ADK_INSTALL_PACKAGE_INIT_SCRIPTS
off will almost certainly render the resulting system unusable.
config ADK_INSTALL_PACKAGE_NETWORK_SCRIPTS
- boolean "ship custom network-scripts along with packages"
+ bool "ship custom network-scripts along with packages"
default y
depends on !ADK_LEAVE_ETC_ALONE
help
diff --git a/GNUmakefile b/GNUmakefile
deleted file mode 100644
index 1cd73044e..000000000
--- a/GNUmakefile
+++ /dev/null
@@ -1,24 +0,0 @@
-# This file is part of the OpenADK project. OpenADK is copyrighted
-# material, please see the LICENCE file in the top-level directory.
-
-ADK_TOPDIR:= $(shell pwd)
-PWD:= ${ADK_TOPDIR}
-
-include Makefile.inc
-
-ifneq (${package},)
-subdir:= package/${package}
-_subdir_dep:= ${ADK_TOPDIR}/.config
-endif
-
-ifneq (${subdir},)
-${MAKECMDGOALS}: _subdir
-
-_subdir: ${_subdir_dep}
- cd ${subdir} && ADK_TOPDIR=${ADK_TOPDIR} DEVELOPER=1 \
- make ADK_VERBOSE=1 ${MAKEFLAGS} ${MAKECMDGOALS}
-
-include prereq.mk
-else
-include Makefile
-endif
diff --git a/Makefile b/Makefile
index 5ee53356b..cce700bd8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,221 +1,8 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-_UNLIMIT= __limit=$$(ulimit -dH 2>/dev/null); \
- test -n "$$__limit" && ulimit -Sd $$__limit; ulimit -n 1024;
+# GNU make and BSD make compatible make file wrapper
+MAKECMDGOALS+= ${.TARGETS}
-all: .prereq_done checkreloc
- @${_UNLIMIT} ${GMAKE_INV} all
-
-v: .prereq_done
- @(echo; echo "Build started on $$(LC_ALL=C LANGUAGE=C date)"; \
- set -x; ${_UNLIMIT} ${GMAKE_FMK} ADK_VERBOSE=1 all) 2>&1 | tee -a make.log
-
-help:
- @echo 'Configuration targets:'
- @echo ' config - Update current config utilising a line-oriented program'
- @echo ' menuconfig - Update current config utilising a menu based program'
- @echo ' (default when .config does not exist)'
- @echo ' oldconfig - Update current config utilising a provided .configs base'
- @echo ' defconfig - New config with defaults'
- @echo ' allmodconfig - New config selecting all symbols with m'
- @echo ' allyesconfig - New config selecting all symbols with y'
- @echo ' allnoconfig - New config where all options are answered with no'
- @echo ''
- @echo 'Help targets:'
- @echo ' help - Print this help text'
- @echo ' pkg-help - Print help about selectively compiling single packages'
- @echo ' dev-help - Print help for developers / package maintainers'
- @echo ''
- @echo 'Common targets:'
- @echo ' download - fetches all needed distfiles'
- @echo ' kernelconfig - view the target kernel configuration'
- @echo ''
- @echo 'Cleaning targets:'
- @echo ' clean - Remove firmware and build directories'
- @echo ' cleandir - Same as "clean", but also remove all built toolchains'
- @echo ' cleansystem - Same as "cleandir", but only remove active system'
- @echo ' cleankernel - Remove kernel dir, useful if you changed any kernel patches'
- @echo ' distclean - Same as "cleandir", but also remove downloaded'
- @echo ' distfiles and .config'
- @echo ''
- @echo 'Other generic targets:'
- @echo ' all - Build everything as specified in .config'
- @echo ' (default if .config exists)'
- @echo ' v - Same as "all" but with logging to make.log enabled'
-
-pkg-help:
- @echo 'Package specific targets (use with "package=<pkg-name>" parameter):'
- @echo ' fetch - Download the necessary distfile'
- @echo ' extract - Same as "fetch", but also extract the distfile'
- @echo ' patch - Same as "extract", but also patch the source'
- @echo ' build - Same as "patch", but also build the binaries'
- @echo ' fake - Same as "build", but also install the binaries'
- @echo ' package - Same as "fake", but also create the package'
- @echo ' clean - Deinstall and remove the build area'
- @echo ' distclean - Same as "clean", but also remove the distfiles'
- @echo ''
- @echo 'Short package rebuilding guide:'
- @echo ' run "make package=<pkgname> clean" to remove all generated binaries'
- @echo ' run "make package=<pkgname> package" to build everything and create the package(s)'
- @echo ''
- @echo 'This does not automatically resolve package dependencies!'
-
-dev-help:
- @echo 'Fast way of updating package patches:'
- @echo ' run "make package=<pkgname> clean" to start with a good base'
- @echo ' run "make package=<pkgname> patch" to fetch, unpack and patch the source'
- @echo ' edit the package sources at build_dir/w-<pkgname>-*/<pkgname>-<version>'
- @echo ' run "make package=<pkgname> update-patches" to regenerate patch files'
- @echo ''
- @echo 'All changed patches will be opened with your $$EDITOR,'
- @echo 'so you can add a description and verify the modifications.'
- @echo ''
- @echo 'Adding a new package:'
- @echo 'make PKG=foo VER=1.0 newpackage'
- @echo 'Adding a new simple library package:'
- @echo 'make PKG=foo VER=1.0 TYPE=lib newpackage'
- @echo 'Adding a new simple program package:'
- @echo 'make PKG=foo VER=1.0 TYPE=prog newpackage'
-
-clean: .prereq_done
- -@rm -f nohup.out
- @${GMAKE_INV} clean
-
-config: .prereq_done
- @${GMAKE_INV} _config W=
-
-oldconfig: .prereq_done
- @${GMAKE_INV} _config W=--oldconfig
-
-download: .prereq_done
- @${GMAKE_INV} toolchain/download
- @${GMAKE_INV} dep
- @${GMAKE_INV} package/download
-
-cleankernel kernelclean: .prereq_done
- -@${GMAKE_INV} cleankernel
-
-cleandir dirclean: .prereq_done
- -@${GMAKE_INV} cleandir
- @-rm -f make.log .prereq_done
-
-cleansystem: .prereq_done
- -@${GMAKE_INV} cleansystem
- @-rm -f make.log .prereq_done
-
-distclean cleandist:
- -@${GMAKE_INV} distclean
- @-rm -f make.log .prereq_done
-
-image: .prereq_done
- @${GMAKE_INV} image
-
-targethelp: .prereq_done
- @${GMAKE_INV} targethelp
-
-kernelconfig: .prereq_done
- @${GMAKE_INV} kernelconfig
-
-newpackage: .prereq_done
- @${GMAKE_INV} newpackage
-
-image_clean imageclean cleanimage: .prereq_done
- @${GMAKE_INV} image_clean
-
-menuconfig: .prereq_done
- @${GMAKE_INV} menuconfig
-
-defconfig: .prereq_done
- @${GMAKE_INV} defconfig
-
-allnoconfig: .prereq_done
- @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allnoconfig
-
-allyesconfig: .prereq_done
- @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allyesconfig
-
-allmodconfig: .prereq_done
- @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allmodconfig
-
-package_index: .prereq_done
- @${GMAKE_INV} package_index
-
-buildall: .prereq_done
- @${GMAKE_INV} buildall
-
-check: .prereq_done
- @${GMAKE_INV} check
-
-check-gcc: .prereq_done
- @${GMAKE_INV} check-gcc
-
-check-g++: .prereq_done
- @${GMAKE_INV} check-g++
-
-menu: .prereq_done
- @${GMAKE_INV} menu
-
-dep: .prereq_done
- @${GMAKE_INV} dep
-
-world: .prereq_done
- @${GMAKE_INV} world
-
-prereq:
- @rm -f .prereq_done
- @${GMAKE} .prereq_done
-
-prereq-noerror:
- @rm -f .prereq_done
- @${GMAKE} .prereq_done NO_ERROR=1
-
-NO_ERROR=0
-.prereq_done:
- @-rm -rf .prereq_done
- @if ! bash --version 2>&1 | grep -F 'GNU bash' >/dev/null 2>&1; then \
- echo "GNU bash needs to be installed."; \
- exit 1; \
- fi
- @echo "ADK_TOPDIR:=$$(readlink -nf . 2>/dev/null || pwd -P)" >prereq.mk
- @echo "BASH:=$$(which bash)" >>prereq.mk
- @if [ -z "$$(which gmake 2>/dev/null )" ]; then \
- echo "GMAKE:=$$(which make)" >>prereq.mk ;\
- else \
- echo "GMAKE:=$$(which gmake)" >>prereq.mk ;\
- fi
- @echo "GNU_HOST_NAME:=$$(${CC} -dumpmachine)" >>prereq.mk
- @echo "ARCH_FOR_BUILD:=$$(${CC} -dumpmachine | sed \
- -e 's/x86_64-linux-gnux32/x32/' \
- -e s'/-.*//' \
- -e 's/sparc.*/sparc/' \
- -e 's/armeb.*/armeb/g' \
- -e 's/arm.*/arm/g' \
- -e 's/m68k.*/m68k/' \
- -e 's/sh[234]/sh/' \
- -e 's/mips-.*/mips/' \
- -e 's/mipsel-.*/mipsel/' \
- -e 's/i[3-9]86/x86/' \
- )" >>prereq.mk
- @echo 'HOST_CC:=${CC}' >>prereq.mk
- @echo 'HOST_CXX:=${CXX}' >>prereq.mk
- @echo 'LANGUAGE:=C' >>prereq.mk
- @echo 'LC_ALL:=C' >>prereq.mk
- @echo 'MAKE:=$${GMAKE}' >>prereq.mk
- @echo "OStype:=$$(env uname)" >>prereq.mk
- @echo "_PATH:=$$PATH" >>prereq.mk
- @echo "PATH:=\$${ADK_TOPDIR}/scripts:/usr/sbin:$$PATH" >>prereq.mk
- @echo "SHELL:=$$(which bash)" >>prereq.mk
- @echo "GIT:=$$(which git 2>/dev/null)" >>prereq.mk
- @env NO_ERROR=${NO_ERROR} BASH="$$(which bash)" \
- CC='${CC}' CPPFLAGS='${CPPFLAGS}' \
- bash scripts/scan-tools.sh
- @echo '===> Prerequisites checked successfully.'
- @touch .adkinit
- @touch $@
-
-checkreloc:
- @bash scripts/reloc.sh
-
-.PHONY: prereq prereq-noerror checkreloc
-# DO NOT DELETE
+all v help targethelp kernelconfig image menuconfig download clean cleankernel cleansystem cleandir distclean hostclean hostpackage fetch package extract patch dep menu:
+ @./scripts/prereq.sh ${MAKECMDGOALS}
diff --git a/Makefile.adk b/Makefile.adk
new file mode 100644
index 000000000..b8fe31e88
--- /dev/null
+++ b/Makefile.adk
@@ -0,0 +1,179 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+ADK_TOPDIR:= $(shell pwd)
+GMAKE_FMK= ${MAKE} -f $(PWD)/mk/build.mk
+GMAKE_INV= ${GMAKE_FMK} --no-print-directory
+
+_UNLIMIT= __limit=$$(ulimit -dH 2>/dev/null); \
+ test -n "$$__limit" && ulimit -Sd $$__limit; ulimit -n 1024;
+
+ifneq (${package},)
+subdir:= package/${package}
+_subdir_dep:= ${ADK_TOPDIR}/.config
+endif
+
+ifneq (${subdir},)
+${MAKECMDGOALS}: _subdir
+
+_subdir: ${_subdir_dep}
+ cd ${subdir} && ADK_TOPDIR=${ADK_TOPDIR} DEVELOPER=1 \
+ $(MAKE) ADK_VERBOSE=1 ${MAKECMDGOALS}
+
+endif
+
+all:
+ @${_UNLIMIT} $(GMAKE_INV) world
+
+v:
+ @(echo; echo "Build started on $$(LC_ALL=C LANGUAGE=C date)"; \
+ set -x; ${_UNLIMIT} ${GMAKE_FMK} ADK_VERBOSE=1 all) 2>&1 | tee -a make.log
+
+help:
+ @echo 'Configuration targets:'
+ @echo ' config - Update current config utilising a line-oriented program'
+ @echo ' menuconfig - Update current config utilising a menu based program'
+ @echo ' (default when .config does not exist)'
+ @echo ' oldconfig - Update current config utilising a provided .configs base'
+ @echo ' defconfig - New config with defaults'
+ @echo ' allmodconfig - New config selecting all symbols with m'
+ @echo ' allyesconfig - New config selecting all symbols with y'
+ @echo ' allnoconfig - New config where all options are answered with no'
+ @echo ''
+ @echo 'Help targets:'
+ @echo ' help - Print this help text'
+ @echo ' pkg-help - Print help about selectively compiling single packages'
+ @echo ' dev-help - Print help for developers / package maintainers'
+ @echo ''
+ @echo 'Common targets:'
+ @echo ' download - fetches all needed distfiles'
+ @echo ' kernelconfig - view the target kernel configuration'
+ @echo ''
+ @echo 'Cleaning targets:'
+ @echo ' clean - Remove firmware and build directories'
+ @echo ' cleandir - Same as "clean", but also remove all built toolchains'
+ @echo ' cleansystem - Same as "cleandir", but only remove active system'
+ @echo ' cleankernel - Remove kernel dir, useful if you changed any kernel patches'
+ @echo ' distclean - Same as "cleandir", but also remove downloaded'
+ @echo ' distfiles and .config'
+ @echo ''
+ @echo 'Other generic targets:'
+ @echo ' all - Build everything as specified in .config'
+ @echo ' (default if .config exists)'
+ @echo ' v - Same as "all" but with logging to make.log enabled'
+
+pkg-help:
+ @echo 'Package specific targets (use with "package=<pkg-name>" parameter):'
+ @echo ' fetch - Download the necessary distfile'
+ @echo ' extract - Same as "fetch", but also extract the distfile'
+ @echo ' patch - Same as "extract", but also patch the source'
+ @echo ' build - Same as "patch", but also build the binaries'
+ @echo ' fake - Same as "build", but also install the binaries'
+ @echo ' package - Same as "fake", but also create the package'
+ @echo ' clean - Deinstall and remove the build area'
+ @echo ' distclean - Same as "clean", but also remove the distfiles'
+ @echo ''
+ @echo 'Short package rebuilding guide:'
+ @echo ' run "make package=<pkgname> clean" to remove all generated binaries'
+ @echo ' run "make package=<pkgname> package" to build everything and create the package(s)'
+ @echo ''
+ @echo 'This does not automatically resolve package dependencies!'
+
+dev-help:
+ @echo 'Fast way of updating package patches:'
+ @echo ' run "make package=<pkgname> clean" to start with a good base'
+ @echo ' run "make package=<pkgname> patch" to fetch, unpack and patch the source'
+ @echo ' edit the package sources at build_dir/w-<pkgname>-*/<pkgname>-<version>'
+ @echo ' run "make package=<pkgname> update-patches" to regenerate patch files'
+ @echo ''
+ @echo 'All changed patches will be opened with your $$EDITOR,'
+ @echo 'so you can add a description and verify the modifications.'
+ @echo ''
+ @echo 'Adding a new package:'
+ @echo 'make PKG=foo VER=1.0 newpackage'
+ @echo 'Adding a new simple library package:'
+ @echo 'make PKG=foo VER=1.0 TYPE=lib newpackage'
+ @echo 'Adding a new simple program package:'
+ @echo 'make PKG=foo VER=1.0 TYPE=prog newpackage'
+
+clean:
+ @${GMAKE_INV} clean
+
+config:
+ @${GMAKE_INV} _config W=
+
+oldconfig:
+ @${GMAKE_INV} _config W=--oldconfig
+
+download:
+ @${GMAKE_INV} toolchain/download
+ @${GMAKE_INV} dep
+ @${GMAKE_INV} package/download
+
+cleankernel:
+ -@${GMAKE_INV} cleankernel
+
+cleandir:
+ -@${GMAKE_INV} cleandir
+
+cleansystem:
+ -@${GMAKE_INV} cleansystem
+
+distclean:
+ -${GMAKE_INV} distclean
+
+image:
+ @${GMAKE_INV} image
+
+targethelp:
+ @${GMAKE_INV} targethelp
+
+kernelconfig:
+ @${GMAKE_INV} kernelconfig
+
+newpackage:
+ @${GMAKE_INV} newpackage
+
+image_clean imageclean cleanimage:
+ @${GMAKE_INV} image_clean
+
+menuconfig:
+ @${GMAKE_INV} menuconfig
+
+defconfig:
+ @${GMAKE_INV} defconfig
+
+allnoconfig:
+ @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allnoconfig
+
+allyesconfig:
+ @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allyesconfig
+
+allmodconfig:
+ @${GMAKE_INV} KCONFIG_ALLCONFIG=all.config _config W=--allmodconfig
+
+package_index:
+ @${GMAKE_INV} package_index
+
+buildall:
+ @${GMAKE_INV} buildall
+
+check:
+ @${GMAKE_INV} check
+
+check-gcc:
+ @${GMAKE_INV} check-gcc
+
+check-g++:
+ @${GMAKE_INV} check-g++
+
+menu:
+ @${GMAKE_INV} menu
+
+dep:
+ @${GMAKE_INV} dep
+
+world:
+ @${GMAKE_INV} world
+
+# DO NOT DELETE
diff --git a/Makefile.inc b/Makefile.inc
deleted file mode 100644
index 4cc06dfad..000000000
--- a/Makefile.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-CC?= gcc
-GMAKE?= env ${GMAKE_ENV} $(PWD)/scripts/make
-GMAKE_FMK= ${GMAKE} -f $(PWD)/mk/build.mk
-GMAKE_INV= ${GMAKE_FMK} --no-print-directory
diff --git a/README b/README
index 03ac4a48c..882b77747 100644
--- a/README
+++ b/README
@@ -4,26 +4,25 @@ OpenADK - An embedded Linux construction kit
This is a menu based buildsystem for your embedded Linux system.
Before you can start you need to install some software:
-- bash
- gcc or clang
- g++ or clang++
- binutils
-- GNU make
+- make
- tar
- gzip
-- wget
- perl
+- curl or wget
- c library headers
- ncurses library and header
-- zlib library and header
There is a check for the required versions of these software in advance, though.
-(to re-issue the checks, use "make prereq").
+Most of the needed software for the build process to succeed will
+be compiled before the target build starts.
Please use "make menuconfig" to choose your target architecture and
embedded system and configure like you want to.
-Simply running 'make' will build the firmware for your embedded system. The
+Simply running 'make' will build the firmware for your embedded system. The
buildsystem will download all sources, build the toolchain, the kernel and all
applications.
diff --git a/adk/config/Makefile b/adk/config/Makefile
index 8481e3bff..48e10983b 100644
--- a/adk/config/Makefile
+++ b/adk/config/Makefile
@@ -69,19 +69,19 @@ MCONF_OBJS=$(patsubst %.c,%.o, $(MCONF_SRC))
SHARED_OBJS=$(patsubst %.c,%.o, $(SHARED_SRC))
conf: $(CONF_OBJS) $(SHARED_OBJS)
- @$(HOST_CC) $(HOST_CFLAGS) $^ -o $@
+ @$(HOST_CC) $(HOST_CFLAGS) $^ -o $@ 2>/dev/null
mconf: $(MCONF_OBJS) $(SHARED_OBJS)
- @$(HOST_CC) $(HOST_CFLAGS) $^ -o $@ $(LIBS)
+ @$(HOST_CC) $(HOST_CFLAGS) $^ -o $@ $(LIBS) 2>/dev/null
$(CONF_OBJS): %.o : %.c $(SHARED_DEPS)
- @$(HOST_CC) $(HOST_CFLAGS) -I. -c $< -o $@
+ @$(HOST_CC) $(HOST_CFLAGS) -I. -c $< -o $@ 2>/dev/null
$(MCONF_OBJS): %.o : %.c $(SHARED_DEPS)
- @$(HOST_CC) $(HOST_CFLAGS) -I. -c $< -o $@
+ @$(HOST_CC) $(HOST_CFLAGS) -I. -c $< -o $@ 2>/dev/null
glob.o: glob.c $(SHARED_DEPS)
- @$(HOST_CC) $(HOST_CFLAGS) -I. -c glob.c -o $@
+ @$(HOST_CC) $(HOST_CFLAGS) -I. -c glob.c -o $@ 2>/dev/null
lkc_defs.h: lkc_proto.h
@sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
diff --git a/adk/tools/depmaker.c b/adk/tools/depmaker.c
index d5ef100a8..275fa4ed5 100644
--- a/adk/tools/depmaker.c
+++ b/adk/tools/depmaker.c
@@ -1,7 +1,7 @@
/*
* depmaker - create package/Depends.mk for OpenADK buildsystem
*
- * Copyright (C) 2010-2014 Waldemar Brodkorb <wbx@openadk.org>
+ * Copyright (C) 2010-2015 Waldemar Brodkorb <wbx@openadk.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -67,8 +67,9 @@ static int check_symbol(char *symbol) {
/*@null@*/
static char *parse_line(char *package, char *pkgvar, char *string, int checksym, int pprefix, int system, int *prefixp) {
- char *key, *value, *dep, *key_sym, *pkgdeps;
+ char *key, *value, *dep, *key_sym, *pkgdeps, *depvar;
char temp[MAXLINE];
+ int i;
string[strlen(string)-1] = '\0';
if ((key = strtok(string, ":=")) == NULL) {
@@ -121,6 +122,51 @@ static char *parse_line(char *package, char *pkgvar, char *string, int checksym,
value = strtok(NULL, "=\t");
dep = strtok(value, " ");
while (dep != NULL) {
+ /* check only for optional host tools, if they are required to build */
+ if (checksym == 2) {
+ if ((depvar = malloc(MAXLINE)) != NULL)
+ memset(depvar, 0, MAXLINE);
+ else {
+ perror("Can not allocate memory.");
+ exit(EXIT_FAILURE);
+ }
+ strncat(depvar, dep, strlen(dep)-5);
+ if ((strncmp(depvar, "bc", 2) == 0) ||
+ (strncmp(depvar, "file", 4) == 0) ||
+ (strncmp(depvar, "gawk", 4) == 0) ||
+ (strncmp(depvar, "grep", 4) == 0) ||
+ (strncmp(depvar, "patch", 5) == 0) ||
+ (strncmp(depvar, "sed", 3) == 0) ||
+ (strncmp(depvar, "xz", 2) == 0)) {
+
+ /* transform to uppercase variable name */
+ for (i=0; i<(int)strlen(depvar); i++) {
+ if (depvar[i] == '+')
+ depvar[i] = 'X';
+ if (depvar[i] == '-')
+ depvar[i] = '_';
+ depvar[i] = toupper(depvar[i]);
+ }
+
+ /* extract symbol */
+ if ((key_sym = malloc(MAXLINE)) != NULL)
+ memset(key_sym, 0, MAXLINE);
+ else {
+ perror("Can not allocate memory.");
+ exit(EXIT_FAILURE);
+ }
+ if (snprintf(key_sym, MAXLINE, "ADK_HOST_BUILD_%s", depvar) < 0)
+ perror("Can not create string variable.");
+
+ if (check_symbol(key_sym) != 0) {
+ free(key_sym);
+ free(depvar);
+ return(NULL);
+ }
+ free(key_sym);
+ free(depvar);
+ }
+ }
if (*prefixp == 0) {
*prefixp = 1;
if (snprintf(temp, MAXLINE, "%s-compile: %s-compile", package, dep) < 0)
@@ -295,7 +341,7 @@ int main() {
} else if (strncmp(buf, "HOST_BUILDDEP", 13) == 0) {
asprintf(&string, "%s-host", pkgdirp->d_name);
// check retval; string for NULL
- tmp = parse_line(string, NULL, buf, 0, 0, 0, &hprefix);
+ tmp = parse_line(string, NULL, buf, 2, 0, 0, &hprefix);
if (tmp && *tmp) {
asprintf(&string, "%s%s",
hpkgdeps ? hpkgdeps : "",
diff --git a/mk/build.mk b/mk/build.mk
index 3d0124cca..d7e32110c 100644
--- a/mk/build.mk
+++ b/mk/build.mk
@@ -1,9 +1,6 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-ADK_TOPDIR=$(shell pwd)
-export ADK_TOPDIR
-
CONFIG_CONFIG_IN = Config.in
CONFIG = adk/config
DEFCONFIG= ADK_DEBUG=n \
@@ -95,9 +92,7 @@ noconfig_targets:= menuconfig \
defconfig
POSTCONFIG= -@\
- if [ -f .adkinit ];then rm .adkinit;\
- else \
- if [ -f .config.old ];then \
+ if [ ! -f .firstrun ]; then \
$(ADK_TOPDIR)/adk/tools/pkgrebuild;\
rebuild=0; \
cleandir=0; \
@@ -133,22 +128,14 @@ POSTCONFIG= -@\
cleandir=1;\
rebuild=1;\
fi; \
- if [ "$$(grep ^ADK_TARGET_ARCH .config|md5sum)" != "$$(grep ^ADK_TARGET_ARCH .config.old|md5sum)" ];then \
- cleandir=1;\
- rebuild=1;\
- fi; \
- if [ "$$(grep ^ADK_TARGET_SYSTEM .config|md5sum)" != "$$(grep ^ADK_T