# x86_64 can be either 32/64. set BIACH=32 to get 32 bit libraries.
BIARCH = 64
+aarch64_libdir = 64
x86_64_libdir = $(BIARCH)
native_libdir = $($(NATIVE_ARCH)_libdir)
arch_lib_dir = lib$($(BASIC_ARCH)_libdir)
# OS to configure for. configure --host will be set to $(ARCH)-$(OS)
-OS = mu-linux
+# Allow per-platform overrides
+
+OS = $(strip $($(PLATFORM)_os))
+ifeq ($(OS),)
+ OS = mu-linux
+endif
spu_target = spu
native_target =
endif
export MARCH
+MTUNE = $(strip $($(PLATFORM)_mtune))
+ifeq ($(MTUNE),)
+ MTUNE = generic
+endif
+
######################################################################
# Generic build stuff
######################################################################
tag_var_with_added_space_fn = $(if $($(TAG)_TAG_$(1)),$($(TAG)_TAG_$(1)) )
# TAG=debug for debugging
-debug_TAG_CFLAGS = -g -O0 -DCLIB_DEBUG -march=$(MARCH)
-debug_TAG_LDFLAGS = -g -O0 -DCLIB_DEBUG -march=$(MARCH)
-
-# TAG=prof for profiling
-prof_TAG_CFLAGS = -g -pg -O2
-prof_TAG_LDFLAGS = -g -pg -O2
-
-# TAG=o0
-o0_TAG_CFLAGS = -g -O0
-o1_TAG_LDFLAGS = -g -O0
-
-# TAG=o1
-o1_TAG_CFLAGS = -g -O1
-o1_TAG_LDFLAGS = -g -O1
-
-# TAG=o2
-o2_TAG_CFLAGS = -g -O2
-o2_TAG_LDFLAGS = -g -O2
-
-# TAG=o3
-o3_TAG_CFLAGS = -g -O3
-o3_TAG_LDFLAGS = -g -O3
+debug_TAG_CFLAGS = -g -O0 -DCLIB_DEBUG -DFORTIFY_SOURCE=2 -march=$(MARCH) \
+ -fstack-protector-all -fPIC
+debug_TAG_CXXFLAGS = -g -O0 -DCLIB_DEBUG -DFORTIFY_SOURCE=2 -march=$(MARCH) \
+ -fstack-protector-all -fPIC
+debug_TAG_LDFLAGS = -g -O0 -DCLIB_DEBUG -DFORTIFY_SOURCE=2 -march=$(MARCH) \
+ -fstack-protector-all -fPIC
BUILD_PREFIX_package = build-$(TAG_PREFIX)
BUILD_PREFIX_tool = build-tool-$(TAG_PREFIX)
# Directory where packages are built & installed
BUILD_DIR = $(MU_BUILD_ROOT_DIR)/$(BUILD_PREFIX_$(call tool_or_package_fn))$(ARCH)
-
-## BURT
-# we will deprecate INSTALL_DIR shortly for DFLT_INSTALL_DIR
INSTALL_DIR = $(MU_BUILD_ROOT_DIR)/$(INSTALL_PREFIX)$(ARCH)
-# DFLT_INSTALL_DIR used in platforms.mk for $(PLATFORM)_DESTDIR_BASE
-DFLT_INSTALL_DIR := $(MU_BUILD_ROOT_DIR)/$(INSTALL_PREFIX)$(ARCH)
-## BURT
PLATFORM_IMAGE_DIR = $(MU_BUILD_ROOT_DIR)/$(IMAGES_PREFIX)$(PLATFORM)
# Message from build system itself (as opposed to make or shell commands)
build_msg_fn = echo "@@@@ $(1) @@@@"
+# Allow CCACHE_DIR to be overridden, e.g. in .../build-root/build-config.mk
+ifeq ($(CCACHE_DIR),)
+ CCACHE_DIR=$(MU_BUILD_ROOT_DIR)/.ccache
+endif
+
# Always prefer our own tools to those installed on system.
# Note: ccache-bin must be before tool bin.
+#
+# Removed LD_LIBRARY_PATH from BUILD_ENV (drb, 10/31/17):
+# export LD_LIBRARY_PATH=$(TOOL_INSTALL_DIR)/lib64:$(TOOL_INSTALL_DIR)/lib
+# Reported to cause trouble. Only of historical interest, since we no longer
+# build a full tool chain from source.
+
BUILD_ENV = \
- export CCACHE_DIR=$(MU_BUILD_ROOT_DIR)/.ccache ; \
- export PATH=$(TOOL_INSTALL_DIR)/ccache-bin:$(TOOL_INSTALL_DIR)/bin:$${PATH} ; \
+ export CCACHE_DIR=$(CCACHE_DIR) ; \
+ export PATH=$(wildcard /usr/lib*/ccache):$(TOOL_INSTALL_DIR)/bin:$${PATH} ; \
+ $(if $(call configure_var_fn,PATH), export PATH=$${PATH}:$(call configure_var_fn,PATH);,) \
export PATH="`echo $${PATH} | sed -e s/[.]://`" ; \
$(if $(not_native),export CONFIG_SITE=$(MU_BUILD_ROOT_DIR)/config.site ;,) \
- export LD_LIBRARY_PATH=$(TOOL_INSTALL_DIR)/lib64:$(TOOL_INSTALL_DIR)/lib ; \
set -eu$(BUILD_DEBUG) ; \
set -o pipefail
package_mk_fn = $(call package_dir_fn,$(1))/$(1).mk
-### BURT
-
-#next version
-#pkgPhaseDependMacro = $(foreach x,configure build install, \
- $(eval $(1)_$(x)_depend := $($(1)_depend:%=%-$(x))))
-#version equivalent to original code
-pkgPhaseDependMacro = $(eval $(1)_configure_depend := $($(1)_depend:%=%-install))
-
-### BURT
-
# Pick up built-root/pre-package-include.mk for all source directories
$(foreach d,$(SOURCE_PATH_BUILD_ROOT_DIRS), \
$(eval -include $(d)/pre-package-include.mk))
NATIVE_TOOLS = findutils make
# basic tools needed for build system
-NATIVE_TOOLS += git automake autoconf libtool texinfo bison flex tar
+NATIVE_TOOLS += git automake autoconf libtool texinfo tar
# needed to compile gcc
NATIVE_TOOLS += mpfr gmp mpc
lots_of_slashes_to_pad_names = "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
# When PLATFORM != native we *always* use our own versions of GLIBC and dynamic linker
-CROSS_LDFLAGS = \
- -Wl,--dynamic-linker=$(lots_of_slashes_to_pad_names)$(TOOL_INSTALL_LIB_DIR)/$(DYNAMIC_LINKER) \
- -Wl,-rpath -Wl,$(lots_of_slashes_to_pad_names)$(TOOL_INSTALL_LIB_DIR)
+# Allow per-platform overrides
+CROSS_LDFLAGS = $(strip $($(PLATFORM)_cross_ldflags))
+ifeq ($(CROSS_LDFLAGS),)
+ CROSS_LDFLAGS = \
+ -Wl,--dynamic-linker=$(lots_of_slashes_to_pad_names)$(TOOL_INSTALL_LIB_DIR)/$(DYNAMIC_LINKER) \
+ -Wl,-rpath -Wl,$(lots_of_slashes_to_pad_names)$(TOOL_INSTALL_LIB_DIR)
+endif
cross_ldflags = $(if $(is_native)$(is_build_tool),,$(CROSS_LDFLAGS) )
CONFIGURE_ENV = \
$(if $(call configure_var_fn,CPPFLAGS), \
CPPFLAGS="$(CPPFLAGS) $(call configure_var_fn,CPPFLAGS)") \
+ $(if $(call configure_var_fn,CXXFLAGS), \
+ CXXFLAGS="$(CXXFLAGS) $(call configure_var_fn,CXXFLAGS)") \
$(if $(call configure_var_fn,CFLAGS), \
CFLAGS="$(CFLAGS) $(call configure_var_fn,CFLAGS)") \
$(if $(call configure_var_fn,CCASFLAGS), \
LDFLAGS="$(LDFLAGS) $(call configure_ldflags_fn)") \
$(if $($(PACKAGE)_configure_env),$($(PACKAGE)_configure_env))
-### BURT
# only partially used now (used in a few .mk files)
ifeq ($(is_build_tool),yes)
prefix = $(PACKAGE_INSTALL_DIR)
destdirMacro = $($(PLATFORM)_DESTDIR_BASE)$(ppdMacro)
DESTDIR = $(call destdirMacro,$(PACKAGE))
endif
-### BURT
-### dbarach
-image_extra_dependencies = $($(PLATFORM)_image_extra_dependencies)
-### dbarach
configure_package_gnu = \
- s=$(call find_source_fn,$(PACKAGE_SOURCE)) ; \
+ s=$(call find_source_fn,$(PACKAGE_SOURCE))$(PACKAGE_SUBDIR) ; \
if [ ! -f $$s/configure ] ; then \
autoreconf -i -f $$s ; \
fi ; \
mkdir -p $(PACKAGE_INSTALL_DIR) ; \
conf="$(TIMESTAMP_DIR)/$(CONFIGURE_TIMESTAMP)" ; \
dirs="$(call package_mk_fn,$(PACKAGE)) \
- $(wildcard $(call find_source_fn,$(PACKAGE_SOURCE))/configure) \
+ $(wildcard $(call find_source_fn, \
+ $(PACKAGE_SOURCE))$(PACKAGE_SUBDIR)/configure) \
$(MU_BUILD_ROOT_DIR)/config.site" ; \
if [[ $(call find_newer_fn, $${conf}, $${dirs}, $?) ]]; then \
$(configure_package) ; \
# Package build
######################################################################
-linux_n_cpus = `grep '^processor' /proc/cpuinfo | wc -l`
-
-MAKE_PARALLEL_JOBS = \
- -j $(shell \
- if [ -f /proc/cpuinfo ] ; then \
- expr 4 '*' $(linux_n_cpus) ; \
- else \
- echo 1 ; \
- fi)
-
-MAKE_PARALLEL_FLAGS = $(if $($(PACKAGE)_make_parallel_fails),,$(MAKE_PARALLEL_JOBS))
+# /proc/cpuinfo does not exist on platforms without a /proc and on some
+# platforms, notably inside containers, it has no content. In those cases
+# we assume there's 1 processor; we use 2*ncpu for the -j option.
+# NB: GNU Make 4.2 will let us use '$(file </proc/cpuinfo)' to both test
+# for file presence and content; for now this will have to do.
+ifndef MAKE_PARALLEL_JOBS
+MAKE_PARALLEL_JOBS = -j $(if $(shell [ -f /proc/cpuinfo ] && head /proc/cpuinfo), \
+ $(shell grep -c ^processor /proc/cpuinfo), 2)
+else
+MAKE_PARALLEL_JOBS := -j $(MAKE_PARALLEL_JOBS)
+endif
+MAKE_PARALLEL_FLAGS ?= $(if $($(PACKAGE)_make_parallel_fails),,$(MAKE_PARALLEL_JOBS))
# Make command shorthand for packages & tools.
PACKAGE_MAKE = \
# Multiple packages may use a single source tree.
# For example, gcc-bootstrap package shares gcc source.
PACKAGE_SOURCE = $(if $($(PACKAGE)_source),$($(PACKAGE)_source),$(PACKAGE))
+PACKAGE_SUBDIR = $(if $($(PACKAGE)_configure_subdir),/$($(PACKAGE)_configure_subdir),)
# Use git to download source if directory is not found
find_source_for_package = \
$(call build_msg_fn,No source for $(PACKAGE) in $${g}); \
exit 1; \
fi ; \
- $(call build_msg_fn,Autowanking $${g}/$(PACKAGE_SOURCE)) ; \
+ $(call build_msg_fn,Fix file dates in $${g}/$(PACKAGE_SOURCE)) ; \
(cd $${s} ; $(MU_BUILD_ROOT_DIR)/autowank --touch) ; \
fi ; \
s=`cd $${s} && pwd` ; \
basic_system \
$(ROOT_PACKAGES)) || exit 1; \
$(call build_msg_fn, Relocating ELF executables to run in $${d}) ; \
- find $${d} -type f \
- -exec elftool quiet in '{}' out '{}' \
- set-interpreter \
- $${d}/$(arch_lib_dir)/$(DYNAMIC_LINKER) \
- set-rpath $${d}/$(arch_lib_dir):$${d}/lib ';' ; \
+ scripts/set-rpath $${d} $${d}/$(arch_lib_dir) ; \
: strip symbols from files ; \
if [ $${strip_symbols:-no} = 'yes' ] ; then \
$(call build_msg_fn, Stripping symbols from files) ; \
: make dev directory ; \
$(linuxrc_makedev) ; \
echo @@@@ Relocating ELF executables to run in / @@@@ ; \
- find $${d} -type f \
- -exec elftool quiet in '{}' out '{}' \
- set-interpreter \
- /$(arch_lib_dir)/$(DYNAMIC_LINKER) \
- set-rpath /$(arch_lib_dir):/lib ';' ; \
+ scripts/set-rpath /$(arch_lib_dir):/lib ; \
: strip symbols from files ; \
if [ '$${strip_symbols:-yes}' = 'yes' ] ; then \
echo @@@@ Stripping symbols from files @@@@ ; \
rm -rf $(MU_BUILD_ROOT_DIR)/$(IMAGES_PREFIX)*
rm -rf $(TOOL_INSTALL_DIR)
rm -rf $(MU_BUILD_ROOT_DIR)/*.deb
+ rm -rf $(MU_BUILD_ROOT_DIR)/*.rpm
rm -rf $(MU_BUILD_ROOT_DIR)/*.changes
- (cd $(MU_BUILD_ROOT_DIR)/deb/;debian/rules clean)
+ rm -rf $(MU_BUILD_ROOT_DIR)/python
+ if [ -e /usr/bin/dh ];then (cd $(MU_BUILD_ROOT_DIR)/deb/;debian/rules clean); fi
rm -f $(MU_BUILD_ROOT_DIR)/deb/debian/*.install
- rm -f $(MU_BUILD_ROOT_DIR)/deb/debian/*.dkms
rm -f $(MU_BUILD_ROOT_DIR)/deb/debian/changelog