aboutsummaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
authorGravatar Yann E. MORIN <yann.morin.1998@free.fr>2017-07-18 19:25:31 +0200
committerGravatar Thomas Petazzoni <thomas.petazzoni@free-electrons.com>2017-07-22 21:51:17 +0200
commit2de968f03a76c3feb5c7693cfc05a6342fcc12ae (patch)
tree4fc479a0519443fec5139db1fd5909a4bc359e6b /system
parent92d4b3e8ddaf54c7aa45c0b75293304fd740a20a (diff)
downloadbuildroot-2de968f03a76c3feb5c7693cfc05a6342fcc12ae.tar.gz
buildroot-2de968f03a76c3feb5c7693cfc05a6342fcc12ae.tar.bz2
system: provide package-wide system variables and macros
Some macros, soon some variables, currently defined in the skeleton are going to be used by other packages. Some of those variables will be used as Makefile conditions (e.g. in ifeq() conditions), so they *must* be defined before being used. Since the skeleton package, starting with an 's', is included quite late, those variables would not be available to most packages. Offload the existing macros into the new system/system.mk file, that is included early, before any package is. Rename the macros to appropriate names. Future commits will add new macros and variables in that file. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'system')
-rw-r--r--system/system.mk62
1 files changed, 62 insertions, 0 deletions
diff --git a/system/system.mk b/system/system.mk
new file mode 100644
index 0000000000..cab5c1df5d
--- /dev/null
+++ b/system/system.mk
@@ -0,0 +1,62 @@
+################################################################################
+#
+# system-related variables and macros
+#
+################################################################################
+
+# This file exists to define variables and macros that pertain to the system
+# settings, like rsyncing a directory for skeletons, or the /lib vs. /usr/lib
+# symlink handling.
+#
+# Some variables may be used as conditions in Makefile code, so they must be
+# defined properly before they are used; this file is included early, before
+# any package is.
+
+# - SYSTEM_USR_SYMLINKS_OR_DIRS
+# create /lib, /bin and /sbin, either as directories or as symlinks to
+# their /usr conterparts
+#
+# - SYSTEM_RSYNC
+# rsync $(1) to $(2), with proper exclusions and rights
+#
+# - SYSTEM_LIB_SYMLINK
+# create the appropriate /lib{32,64} symlinks
+#
+
+# This function handles the merged or non-merged /usr cases
+ifeq ($(BR2_ROOTFS_MERGED_USR),y)
+define SYSTEM_USR_SYMLINKS_OR_DIRS
+ ln -snf usr/bin $(1)/bin
+ ln -snf usr/sbin $(1)/sbin
+ ln -snf usr/lib $(1)/lib
+endef
+else
+define SYSTEM_USR_SYMLINKS_OR_DIRS
+ $(INSTALL) -d -m 0755 $(1)/bin
+ $(INSTALL) -d -m 0755 $(1)/sbin
+ $(INSTALL) -d -m 0755 $(1)/lib
+endef
+endif
+
+# This function rsyncs the skeleton directory in $(1) to the destination
+# in $(2), which should be either $(TARTGET_DIR) or $(STAGING_DIR)
+define SYSTEM_RSYNC
+ rsync -a --ignore-times $(RSYNC_VCS_EXCLUSIONS) \
+ --chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
+ $(1)/ $(2)/
+endef
+
+# Make a symlink lib32->lib or lib64->lib as appropriate.
+# MIPS64/n32 requires lib32 even though it's a 64-bit arch.
+# $(1): base dir (either staging or target)
+ifeq ($(BR2_ARCH_IS_64)$(BR2_MIPS_NABI32),y)
+define SYSTEM_LIB_SYMLINK
+ ln -snf lib $(1)/lib64
+ ln -snf lib $(1)/usr/lib64
+endef
+else
+define SYSTEM_LIB_SYMLINK
+ ln -snf lib $(1)/lib32
+ ln -snf lib $(1)/usr/lib32
+endef
+endif