################################################################################
# Copyright(C) 2013-2014 Abdoulaye Walsimou GAYE.
#
# 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
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
################################################################################
#
# \file openrc.mk
# \brief openrc.mk of Embtoolkit
# \author Abdoulaye Walsimou GAYE
# \date December 2013
################################################################################
OPENRC_NAME := openrc
OPENRC_VERSION := $(call embtk_get_pkgversion,openrc)
OPENRC_SITE := $(embtk_ftp/packages-mirror)
OPENRC_PACKAGE := openrc-$(OPENRC_VERSION).tar.bz2
OPENRC_SRC_DIR := $(embtk_pkgb)/openrc-$(OPENRC_VERSION)
OPENRC_BUILD_DIR := $(embtk_pkgb)/openrc-$(OPENRC_VERSION)
embtk_openrc_mk := $(EMBTK_ROOT)/packages/system/openrc
embtk_openrc_hostname := EmbToolkit-$(embtk_os)
# sysinit runlevel scripts
embtk_openrc_sysinit := devfs dmesg sysfs
# boot runlevel scripts
embtk_openrc_boot := bootmisc hostname localmount loopback modules mtab
embtk_openrc_boot += network procfs root staticroute swap sysctl urandom
# default runlevel scripts
embtk_openrc_default-y :=
embtk_openrc_default := netmount
embtk_openrc_default-$(CONFIG_KEMBTK_BUSYB_UDHCPC) += udhcpc
embtk_openrc_default += $(embtk_openrc_default-y)
# shutdown runlevel scripts
embtk_openrc_shutdown := killprocs
# Installed dir/files in sysroot
OPENRC_ETC := conf.d init.d.misc init.d local.d rc.conf runlevels
OPENRC_ETC += sysctl.d
OPENRC_LIBEXECS := rc
ifeq ($(embtk_os),linux)
OPENRC_MAKE_OPTS := OS=Linux
endif
OPENRC_MAKE_ENV := LIBNAME=$(LIBDIR) MKSTATICLIBS=no MKPKGCONFIG=no
OPENRC_MAKE_ENV += AR=$(TARGETAR) RANLIB=$(TARGETRANLIB)
OPENRC_MAKE_ENV += CC=$(TARGETCC_CACHED)
OPENRC_MAKE_ENV += CFLAGS="$(TARGET_CFLAGS) -D_DEFAULT_SOURCE"
OPENRC_MAKE_ENV += LIBEXECDIR=/usr/libexec/rc
OPENRC_MAKE_ENV += BRANDING="EmbToolkit v$(EMBTK_VERSION)"
OPENRC_MAKE_ENV += MKCONFD=no
OPENRC_MAKE_ENV += MKETC=no
OPENRC_MAKE_ENV += MKINITD=no
OPENRC_MAKE_ENV += MKLOCALD=no
OPENRC_MAKE_ENV += MKMAN=no
OPENRC_MAKE_ENV += MKSCRIPTS=no
OPENRC_MAKE_ENV += MKSYSCTLD=no
OPENRC_MAKE_ENV += MKRUNLEVELS=no
define embtk_install_openrc
$(call embtk_makeinstall_pkg,openrc)
endef
define __embtk_install_openrc_runlevel
install -d $(embtk_rootfs)/etc/runlevels/$(1) || exit $$?
for f in $(embtk_openrc_$(1)); do \
install -m 0755 $(embtk_openrc_mk)/etc/init.d/$$f \
$(embtk_rootfs)/etc/init.d/$$f || exit $$?; \
ln -snf /etc/init.d/$$f \
$(embtk_rootfs)/etc/runlevels/$(1)/$$f || exit $$?; \
done
endef
define __embtk_install_openrc_confd
install -d $(embtk_rootfs)/etc/conf.d || exit $$?
for f in $(embtk_openrc_mk)/etc/conf.d/*; do \
install -m 0644 $$f $(embtk_rootfs)/etc/conf.d || exit $$?; \
done
echo "hostname=\"$(embtk_openrc_hostname)\"" \
> $(embtk_rootfs)/etc/conf.d/hostname
echo "$(embtk_openrc_hostname)" \
> $(embtk_rootfs)/etc/hostname
endef
__embtk_rootfs_tty := $(call embtk_uquote,$(CONFIG_EMBTK_ROOTFS_TTY))
__embtk_rootfs_tty_baudrate := $(call embtk_uquote,$(CONFIG_EMBTK_ROOTFS_TTY_BAUDRATE))
define __embtk_install_openrc_inittab
cat $(embtk_openrc_mk)/etc/inittab.runlevel \
> $(embtk_rootfs)/etc/inittab
cat $(embtk_openrc_mk)/etc/inittab.tty | \
sed -e 's;{ROOTFS_TTY};$(__embtk_rootfs_tty);g' \
-e 's;{ROOTFS_TTY_BAUDRATE};$(__embtk_rootfs_tty_baudrate);g' \
>> $(embtk_rootfs)/etc/inittab
cat $(embtk_openrc_mk)/etc/inittab.logging \
>> $(embtk_rootfs)/etc/inittab
cat $(embtk_openrc_mk)/etc/inittab.reboot \
>> $(embtk_rootfs)/etc/inittab
endef
#
# issue banner
#
__embtk_rootfs_builder := $$USER@$$(uname -n) $$(date +%Y%m%d.%H%M%S.%Z)
__embtk_rootfs_archenv := $(call embtk_ucase,$(LINUX_ARCH)) ($(EMBTK_MCU_FLAG))
__embtk_rootfs_clibraryenv := $(call __embtk_pkg_name,$(embtk_clib)): {
__embtk_rootfs_clibraryenv += version: $(call __embtk_pkg_version,$(embtk_clib)),
__embtk_rootfs_clibraryenv += float: $(if $(CONFIG_EMBTK_SOFTFLOAT),Soft,Hard)
__embtk_rootfs_clibraryenv += $(if $(GCC_WITH_FPU-y),$(embtk_comma) fpu: $(GCC_WITH_FPU-y))
__embtk_rootfs_clibraryenv += $(if $(__xtools_env_abi),$(embtk_comma) abi: $(__xtools_env_abi))
__embtk_rootfs_clibraryenv := $(strip $(__embtk_rootfs_clibraryenv)) }
__embtk_rootfs_xcompileenv = $(embtk_targetcc_name-v) [$(embtk_host_uname)]
define __embtk_install_openrc_issue
cat $(embtk_openrc_mk)/etc/issue.linux | \
sed -e "s;{EMBTK_BUILDER};$(__embtk_rootfs_builder);" \
-e "s;{EMBTK_ARCH};$(__embtk_rootfs_archenv);" \
-e "s;{EMBTK_XCOMPILE_ENV};$(__embtk_rootfs_xcompileenv);" \
-e "s;{EMBTK_CLIBRARY_ENV};$(__embtk_rootfs_clibraryenv);" \
> $(embtk_rootfs)/etc/issue
chmod 0644 $(embtk_rootfs)/etc/issue
endef
define embtk_postinstall_openrc
$(__embtk_install_openrc_confd)
$(__embtk_install_openrc_inittab)
rm -rf $(embtk_rootfs)/etc/init.d
install -d $(embtk_rootfs)/etc/init.d || exit $$?
install -m 0644 $(embtk_openrc_mk)/etc/defaultdomain \
$(embtk_rootfs)/etc/defaultdomain || exit $$?
install -m 0644 $(embtk_openrc_mk)/etc/rc.conf \
$(embtk_rootfs)/etc/rc.conf || exit $$?
$(__embtk_install_openrc_issue)
$(call __embtk_install_openrc_runlevel,sysinit)
$(call __embtk_install_openrc_runlevel,boot)
$(call __embtk_install_openrc_runlevel,default)
$(call __embtk_install_openrc_runlevel,shutdown)
endef
define embtk_cleanup_openrc
rm -rf $(embtk_sysroot)/$(LIBDIR)/libeinfo.*
rm -rf $(embtk_sysroot)/$(LIBDIR)/librc.*
rm -rf $(embtk_sysroot)/bin/rc-status
rm -rf $(embtk_sysroot)/sbin/rc
rm -rf $(embtk_sysroot)/sbin/rc-service
rm -rf $(embtk_sysroot)/sbin/rc-update
rm -rf $(embtk_sysroot)/sbin/runscript
rm -rf $(embtk_sysroot)/sbin/service
rm -rf $(embtk_sysroot)/sbin/start-stop-daemon
rm -rf $(embtk_sysroot)/sbin/openrc
rm -rf $(embtk_sysroot)/sbin/openrc-run
endef