diff --git a/core/config.mk b/core/config.mk
index aeb8aee..5491234 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -17,36 +17,10 @@
 $(error done)
 endif
 
-# Only use ANDROID_BUILD_SHELL to wrap around bash.
-# DO NOT use other shells such as zsh.
-ifdef ANDROID_BUILD_SHELL
-SHELL := $(ANDROID_BUILD_SHELL)
-else
-# Use bash, not whatever shell somebody has installed as /bin/sh
-# This is repeated from main.mk, since envsetup.sh runs this file
-# directly.
-SHELL := /bin/bash
-endif
+BUILD_SYSTEM :=$= build/make/core
+BUILD_SYSTEM_COMMON :=$= build/make/common
 
-# Utility variables.
-empty :=
-space := $(empty) $(empty)
-comma := ,
-# Note that make will eat the newline just before endef.
-define newline
-
-
-endef
-# The pound character "#"
-define pound
-#
-endef
-# Unfortunately you can't simply define backslash as \ or \\.
-backslash := \a
-backslash := $(patsubst %a,%,$(backslash))
-
-# Prevent accidentally changing these variables
-.KATI_READONLY := SHELL empty space comma newline pound backslash
+include $(BUILD_SYSTEM_COMMON)/core.mk
 
 # Mark variables that should be coming as environment variables from soong_ui
 # as readonly
@@ -138,9 +112,9 @@
 
 # Set up efficient math functions which are used in make.
 # Here since this file is included by envsetup as well as during build.
-include $(BUILD_SYSTEM)/math.mk
+include $(BUILD_SYSTEM_COMMON)/math.mk
 
-include $(BUILD_SYSTEM)/strings.mk
+include $(BUILD_SYSTEM_COMMON)/strings.mk
 
 # Various mappings to avoid hard-coding paths all over the place
 include $(BUILD_SYSTEM)/pathmap.mk
diff --git a/core/definitions.mk b/core/definitions.mk
index 3538166..43a2189 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -806,29 +806,13 @@
 echo -e "$(ESC_BOLD)$(1): $(ESC_ERROR)error:$(ESC_RESET)$(ESC_BOLD)" $(2) "$(ESC_RESET)" >&2
 endef
 
-# $(1): message to print
-define pretty-warning
-$(shell $(call echo-warning,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1)))
-endef
-
-# $(1): message to print
-define pretty-error
-$(shell $(call echo-error,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1)))
-$(error done)
-endef
-
 ###########################################################
-## Output the command lines, or not
+## Legacy showcommands compatibility
 ###########################################################
 
-ifeq ($(strip $(SHOW_COMMANDS)),)
 define pretty
 @echo $1
 endef
-else
-define pretty
-endef
-endif
 
 ###########################################################
 ## Commands for including the dependency files the compiler generates
diff --git a/core/main.mk b/core/main.mk
index ecb8c0d..967f52b 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -36,8 +36,6 @@
 TOP := .
 TOPDIR :=
 
-BUILD_SYSTEM := $(TOPDIR)build/make/core
-
 # This is the default target.  It must be the first declared target.
 .PHONY: droid
 DEFAULT_GOAL := droid
@@ -48,7 +46,7 @@
 
 # Set up various standard variables based on configuration
 # and host information.
-include $(BUILD_SYSTEM)/config.mk
+include build/make/core/config.mk
 
 ifneq ($(filter $(dont_bother_goals), $(MAKECMDGOALS)),)
 dont_bother := true
@@ -419,6 +417,19 @@
 ENFORCE_RRO_SOURCES :=
 endif
 
+# Color-coded warnings including current module info
+# $(1): message to print
+define pretty-warning
+$(shell $(call echo-warning,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1)))
+endef
+
+# Color-coded errors including current module info
+# $(1): message to print
+define pretty-error
+$(shell $(call echo-error,$(LOCAL_MODULE_MAKEFILE),$(LOCAL_MODULE): $(1)))
+$(error done)
+endef
+
 subdir_makefiles_inc := .
 FULL_BUILD :=
 
@@ -493,6 +504,18 @@
 # -------------------------------------------------------------------
 
 # -------------------------------------------------------------------
+# Use basic warning/error messages now that LOCAL_MODULE_MAKEFILE
+# and LOCAL_MODULE aren't useful anymore.
+# -------------------------------------------------------------------
+define pretty-warning
+$(warning $(1))
+endef
+
+define pretty-error
+$(error $(1))
+endef
+
+# -------------------------------------------------------------------
 # Enforce to generate all RRO packages for modules having resource
 # overlays.
 # -------------------------------------------------------------------
diff --git a/core/math.mk b/core/math.mk
deleted file mode 100644
index ac3151e..0000000
--- a/core/math.mk
+++ /dev/null
@@ -1,270 +0,0 @@
-#
-# Copyright (C) 2017 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-###########################################################
-# Basic math functions for non-negative integers <= 100
-#
-# (SDK versions for example)
-###########################################################
-__MATH_POS_NUMBERS :=  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 \
-                      21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
-                      41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
-                      61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 \
-                      81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
-__MATH_NUMBERS := 0 $(__MATH_POS_NUMBERS)
-
-math-error = $(call pretty-error,$(1))
-math-expect :=
-math-expect-true :=
-math-expect :=
-math-expect-error :=
-
-# Run the math tests with:
-#  make -f ${ANDROID_BUILD_TOP}/build/make/core/math.mk RUN_MATH_TESTS=true
-#  $(get_build_var CKATI) -f ${ANDROID_BUILD_TOP}//build/make/core/math.mk RUN_MATH_TESTS=true
-ifdef RUN_MATH_TESTS
-  MATH_TEST_FAILURE :=
-  MATH_TEST_ERROR :=
-  math-error = $(if $(MATH_TEST_ERROR),,$(eval MATH_TEST_ERROR:=$(1)))
-  define math-expect
-    $(eval got:=$$$1) \
-    $(if $(subst $(got),,$(2))$(subst $(2),,$(got))$(MATH_TEST_ERROR), \
-      $(if $(MATH_TEST_ERROR),$(warning $(MATH_TEST_ERROR)),$(warning $$$1 '$(got)' != '$(2)')) \
-      $(eval MATH_TEST_FAILURE := true)) \
-    $(eval MATH_TEST_ERROR :=) \
-    $(eval got:=)
-  endef
-  math-expect-true = $(call math-expect,$(1),true)
-  math-expect-false = $(call math-expect,$(1),)
-
-  define math-expect-error
-    $(eval got:=$$$1) \
-    $(if $(subst $(MATH_TEST_ERROR),,$(2))$(subst $(2),,$(MATH_TEST_ERROR)), \
-      $(warning '$(MATH_TEST_ERROR)' != '$(2)') \
-      $(eval MATH_TEST_FAILURE := true)) \
-    $(eval MATH_TEST_ERROR :=) \
-    $(eval got:=)
-  endef
-endif
-
-# Returns true if $(1) is a non-negative integer <= 100, otherwise returns nothing.
-define math_is_number
-$(strip \
-  $(if $(1),,$(call math-error,Argument missing)) \
-  $(if $(word 2,$(1)),$(call math-error,Multiple words in a single argument: $(1))) \
-  $(if $(filter $(1),$(__MATH_NUMBERS)),true))
-endef
-
-define math_is_zero
-$(strip \
-  $(if $(word 2,$(1)),$(call math-error,Multiple words in a single argument: $(1))) \
-  $(if $(filter 0,$(1)),true))
-endef
-
-$(call math-expect-true,(call math_is_number,0))
-$(call math-expect-true,(call math_is_number,2))
-$(call math-expect-false,(call math_is_number,foo))
-$(call math-expect-false,(call math_is_number,-1))
-$(call math-expect-error,(call math_is_number,1 2),Multiple words in a single argument: 1 2)
-$(call math-expect-error,(call math_is_number,no 2),Multiple words in a single argument: no 2)
-
-$(call math-expect-true,(call math_is_zero,0))
-$(call math-expect-false,(call math_is_zero,1))
-$(call math-expect-false,(call math_is_zero,foo))
-$(call math-expect-error,(call math_is_zero,1 2),Multiple words in a single argument: 1 2)
-$(call math-expect-error,(call math_is_zero,no 2),Multiple words in a single argument: no 2)
-
-define _math_check_valid
-$(if $(call math_is_number,$(1)),,$(call math-error,Only non-negative integers <= 100 are supported (not $(1))))
-endef
-
-$(call math-expect,(call _math_check_valid,0))
-$(call math-expect,(call _math_check_valid,1))
-$(call math-expect,(call _math_check_valid,100))
-$(call math-expect-error,(call _math_check_valid,-1),Only non-negative integers <= 100 are supported (not -1))
-$(call math-expect-error,(call _math_check_valid,101),Only non-negative integers <= 100 are supported (not 101))
-$(call math-expect-error,(call _math_check_valid,),Argument missing)
-$(call math-expect-error,(call _math_check_valid,1 2),Multiple words in a single argument: 1 2)
-
-# return a list containing integers ranging from [$(1),$(2)]
-define int_range_list
-$(strip \
-  $(call _math_check_valid,$(1))$(call _math_check_valid,$(2)) \
-  $(if $(call math_is_zero,$(1)),0)\
-  $(wordlist $(if $(call math_is_zero,$(1)),1,$(1)),$(2),$(__MATH_POS_NUMBERS)))
-endef
-
-$(call math-expect,(call int_range_list,0,1),0 1)
-$(call math-expect,(call int_range_list,1,1),1)
-$(call math-expect,(call int_range_list,1,2),1 2)
-$(call math-expect,(call int_range_list,2,1),)
-$(call math-expect-error,(call int_range_list,1,101),Only non-negative integers <= 100 are supported (not 101))
-
-
-# Returns the greater of $1 or $2.
-# If $1 or $2 is not a positive integer <= 100, then an error is generated.
-define math_max
-$(strip $(call _math_check_valid,$(1)) $(call _math_check_valid,$(2)) \
-  $(lastword $(filter $(1) $(2),$(__MATH_NUMBERS))))
-endef
-
-$(call math-expect-error,(call math_max),Argument missing)
-$(call math-expect-error,(call math_max,1),Argument missing)
-$(call math-expect-error,(call math_max,1 2,3),Multiple words in a single argument: 1 2)
-$(call math-expect,(call math_max,0,1),1)
-$(call math-expect,(call math_max,1,0),1)
-$(call math-expect,(call math_max,1,1),1)
-$(call math-expect,(call math_max,5,42),42)
-$(call math-expect,(call math_max,42,5),42)
-
-define math_gt_or_eq
-$(if $(filter $(1),$(call math_max,$(1),$(2))),true)
-endef
-
-define math_lt
-$(if $(call math_gt_or_eq,$(1),$(2)),,true)
-endef
-
-$(call math-expect-true,(call math_gt_or_eq, 2, 1))
-$(call math-expect-true,(call math_gt_or_eq, 1, 1))
-$(call math-expect-false,(call math_gt_or_eq, 1, 2))
-
-# $1 is the variable name to increment
-define inc_and_print
-$(strip $(eval $(1) := $($(1)) .)$(words $($(1))))
-endef
-
-ifdef RUN_MATH_TESTS
-a :=
-$(call math-expect,(call inc_and_print,a),1)
-$(call math-expect,(call inc_and_print,a),2)
-$(call math-expect,(call inc_and_print,a),3)
-$(call math-expect,(call inc_and_print,a),4)
-endif
-
-# Returns the words in $2 that are numbers and are less than $1
-define numbers_less_than
-$(strip \
-  $(foreach n,$2, \
-    $(if $(call math_is_number,$(n)), \
-      $(if $(call math_lt,$(n),$(1)), \
-        $(n)))))
-endef
-
-$(call math-expect,(call numbers_less_than,0,0 1 2 3),)
-$(call math-expect,(call numbers_less_than,1,0 2 1 3),0)
-$(call math-expect,(call numbers_less_than,2,0 2 1 3),0 1)
-$(call math-expect,(call numbers_less_than,3,0 2 1 3),0 2 1)
-$(call math-expect,(call numbers_less_than,4,0 2 1 3),0 2 1 3)
-$(call math-expect,(call numbers_less_than,3,0 2 1 3 2),0 2 1 2)
-
-_INT_LIMIT_WORDS := $(foreach a,x x,$(foreach b,x x x x x x x x x x x x x x x x,\
-  $(foreach c,x x x x x x x x x x x x x x x x,x x x x x x x x x x x x x x x x)))
-
-define _int_encode
-$(if $(filter $(words x $(_INT_LIMIT_WORDS)),$(words $(wordlist 1,$(1),x $(_INT_LIMIT_WORDS)))),\
-  $(call math-error,integer greater than $(words $(_INT_LIMIT_WORDS)) is not supported!),\
-    $(wordlist 1,$(1),$(_INT_LIMIT_WORDS)))
-endef
-
-# _int_max returns the maximum of the two arguments
-# input: two (x) lists; output: one (x) list
-# integer cannot be passed in directly. It has to be converted using _int_encode.
-define _int_max
-$(subst xx,x,$(join $(1),$(2)))
-endef
-
-# first argument is greater than second argument
-# output: non-empty if true
-# integer cannot be passed in directly. It has to be converted using _int_encode.
-define _int_greater-than
-$(filter-out $(words $(2)),$(words $(call _int_max,$(1),$(2))))
-endef
-
-# first argument equals to second argument
-# output: non-empty if true
-# integer cannot be passed in directly. It has to be converted using _int_encode.
-define _int_equal
-$(filter $(words $(1)),$(words $(2)))
-endef
-
-# first argument is greater than or equal to second argument
-# output: non-empty if true
-# integer cannot be passed in directly. It has to be converted using _int_encode.
-define _int_greater-or-equal
-$(call _int_greater-than,$(1),$(2))$(call _int_equal,$(1),$(2))
-endef
-
-define int_plus
-$(words $(call _int_encode,$(1)) $(call _int_encode,$(2)))
-endef
-
-$(call math-expect,(call int_plus,0,0),0)
-$(call math-expect,(call int_plus,0,1),1)
-$(call math-expect,(call int_plus,1,0),1)
-$(call math-expect,(call int_plus,1,100),101)
-$(call math-expect,(call int_plus,100,100),200)
-
-define int_subtract
-$(strip \
-  $(if $(call _int_greater-or-equal,$(call _int_encode,$(1)),$(call _int_encode,$(2))),\
-  $(words $(filter-out xx,$(join $(call _int_encode,$(1)),$(call _int_encode,$(2))))),\
-    $(call math-error,subtract underflow $(1) - $(2))))
-endef
-
-$(call math-expect,(call int_subtract,0,0),0)
-$(call math-expect,(call int_subtract,1,0),1)
-$(call math-expect,(call int_subtract,1,1),0)
-$(call math-expect,(call int_subtract,100,1),99)
-$(call math-expect,(call int_subtract,200,100),100)
-$(call math-expect-error,(call int_subtract,0,1),subtract underflow 0 - 1)
-
-define int_multiply
-$(words $(foreach a,$(call _int_encode,$(1)),$(call _int_encode,$(2))))
-endef
-
-$(call math-expect,(call int_multiply,0,0),0)
-$(call math-expect,(call int_multiply,1,0),0)
-$(call math-expect,(call int_multiply,1,1),1)
-$(call math-expect,(call int_multiply,100,1),100)
-$(call math-expect,(call int_multiply,1,100),100)
-$(call math-expect,(call int_multiply,4,100),400)
-$(call math-expect,(call int_multiply,100,4),400)
-
-define int_divide
-$(if $(filter 0,$(2)),$(call math-error,division by zero is not allowed!),$(strip \
-  $(if $(call _int_greater-or-equal,$(call _int_encode,$(1)),$(call _int_encode,$(2))), \
-    $(call int_plus,$(call int_divide,$(call int_subtract,$(1),$(2)),$(2)),1),0)))
-endef
-
-$(call math-expect,(call int_divide,1,1),1)
-$(call math-expect,(call int_divide,200,1),200)
-$(call math-expect,(call int_divide,200,3),66)
-$(call math-expect,(call int_divide,1,2),0)
-$(call math-expect-error,(call int_divide,0,0),division by zero is not allowed!)
-$(call math-expect-error,(call int_divide,1,0),division by zero is not allowed!)
-
-ifdef RUN_MATH_TESTS
-  ifdef MATH_TEST_FAILURE
-    math-tests:
-	@echo FAIL
-	@false
-  else
-    math-tests:
-	@echo PASS
-  endif
-  .PHONY: math-tests
-endif
diff --git a/core/strings.mk b/core/strings.mk
deleted file mode 100644
index ce6d6fb..0000000
--- a/core/strings.mk
+++ /dev/null
@@ -1,117 +0,0 @@
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-###########################################################
-## Convert to lower case without requiring a shell, which isn't cacheable.
-##
-## $(1): string
-###########################################################
-to-lower=$(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
-
-###########################################################
-## Convert to upper case without requiring a shell, which isn't cacheable.
-##
-## $(1): string
-###########################################################
-to-upper=$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,$(subst y,Y,$(subst z,Z,$1))))))))))))))))))))))))))
-
-# Sanity-check to-lower and to-upper
-lower := abcdefghijklmnopqrstuvwxyz-_
-upper := ABCDEFGHIJKLMNOPQRSTUVWXYZ-_
-
-ifneq ($(lower),$(call to-lower,$(upper)))
-  $(error to-lower sanity check failure)
-endif
-
-ifneq ($(upper),$(call to-upper,$(lower)))
-  $(error to-upper sanity check failure)
-endif
-
-lower :=
-upper :=
-
-###########################################################
-## Returns true if $(1) and $(2) are equal.  Returns
-## the empty string if they are not equal.
-###########################################################
-define streq
-$(strip $(if $(strip $(1)),\
-  $(if $(strip $(2)),\
-    $(if $(filter-out __,_$(subst $(strip $(1)),,$(strip $(2)))$(subst $(strip $(2)),,$(strip $(1)))_),,true), \
-    ),\
-  $(if $(strip $(2)),\
-    ,\
-    true)\
- ))
-endef
-
-###########################################################
-## Convert "a b c" into "a:b:c"
-###########################################################
-define normalize-path-list
-$(subst $(space),:,$(strip $(1)))
-endef
-
-###########################################################
-## Convert "a b c" into "a,b,c"
-###########################################################
-define normalize-comma-list
-$(subst $(space),$(comma),$(strip $(1)))
-endef
-
-###########################################################
-## Read the word out of a colon-separated list of words.
-## This has the same behavior as the built-in function
-## $(word n,str).
-##
-## The individual words may not contain spaces.
-##
-## $(1): 1 based index
-## $(2): value of the form a:b:c...
-###########################################################
-
-define word-colon
-$(word $(1),$(subst :,$(space),$(2)))
-endef
-
-###########################################################
-## Convert "a=b c= d e = f" into "a=b c=d e=f"
-##
-## $(1): list to collapse
-## $(2): if set, separator word; usually "=", ":", or ":="
-##       Defaults to "=" if not set.
-###########################################################
-
-define collapse-pairs
-$(eval _cpSEP := $(strip $(if $(2),$(2),=)))\
-$(strip $(subst $(space)$(_cpSEP)$(space),$(_cpSEP),$(strip \
-    $(subst $(_cpSEP), $(_cpSEP) ,$(1)))$(space)))
-endef
-
-###########################################################
-## Given a list of pairs, if multiple pairs have the same
-## first components, keep only the first pair.
-##
-## $(1): list of pairs
-## $(2): the separator word, such as ":", "=", etc.
-define uniq-pairs-by-first-component
-$(eval _upbfc_fc_set :=)\
-$(strip $(foreach w,$(1), $(eval _first := $(word 1,$(subst $(2),$(space),$(w))))\
-    $(if $(filter $(_upbfc_fc_set),$(_first)),,$(w)\
-        $(eval _upbfc_fc_set += $(_first)))))\
-$(eval _upbfc_fc_set :=)\
-$(eval _first:=)
-endef
