mirror of
https://github.com/andrew-d/static-binaries.git
synced 2025-01-13 15:58:31 +08:00
New extensible build system - initial work
This commit is contained in:
parent
f57e57f7b2
commit
93267dc075
0
make/build/clear_vars.mk
Normal file
0
make/build/clear_vars.mk
Normal file
55
make/build/config.mk
Normal file
55
make/build/config.mk
Normal file
@ -0,0 +1,55 @@
|
||||
# This file is included by the top-level Makefile. It sets up
|
||||
# standard variables based on the current configuration and
|
||||
# platform that are not specific to what is being built.
|
||||
|
||||
# Always use bash, not whatever is installed as /bin/sh
|
||||
SHELL := /bin/bash
|
||||
|
||||
# Utility variables
|
||||
|
||||
empty :=
|
||||
space := $(empty) $(empty)
|
||||
comma := ,
|
||||
|
||||
# Note: make removes the newline immediately prior to `endef`
|
||||
define newline
|
||||
|
||||
|
||||
endef
|
||||
|
||||
backslash := \a
|
||||
backslash := $(patsubst %a,%,$(backslash))
|
||||
|
||||
|
||||
# ###############################################################
|
||||
# Build system internal files
|
||||
# ###############################################################
|
||||
|
||||
BUILD_COMBOS:= $(BUILD_SYSTEM)/combo
|
||||
|
||||
CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
|
||||
# TODO: BUILD_STATIC_LIBRARY := $(BUILD_SYSTEM)/static_library.mk
|
||||
# TODO: BUILD_HOST_EXECUTABLE := $(BUILD_SYSTEM)/host_executable.mk
|
||||
# TODO: BUILD_TARGET_EXECUTABLE := $(BUILD_SYSTEM)/target_executable.mk
|
||||
|
||||
|
||||
# ###############################################################
|
||||
# Include sub-configuration files
|
||||
# ###############################################################
|
||||
|
||||
# This sets up most of the global variables that are specific to the
|
||||
# user's build configuration.
|
||||
include $(BUILD_SYSTEM)/envsetup.mk
|
||||
|
||||
# ###############################################################
|
||||
# Generic tools
|
||||
# ###############################################################
|
||||
|
||||
COLUMN := column
|
||||
|
||||
# It's called md5 on Mac OS and md5sum on Linux
|
||||
ifeq ($(HOST_OS),darwin)
|
||||
MD5SUM:=md5 -q
|
||||
else
|
||||
MD5SUM:=md5sum
|
||||
endif
|
80
make/build/definitions.mk
Normal file
80
make/build/definitions.mk
Normal file
@ -0,0 +1,80 @@
|
||||
# Common build system definitions. Mostly helpful shortcuts or
|
||||
# functions, since we don't actually compile code here.
|
||||
|
||||
# The names of all packages in the system.
|
||||
ALL_PACKAGES :=
|
||||
|
||||
|
||||
###########################################################
|
||||
## Debugging; prints a variable list to stdout
|
||||
###########################################################
|
||||
|
||||
# $(1): variable name list, not variable values
|
||||
define print-vars
|
||||
$(foreach var,$(1), \
|
||||
$(info $(var):) \
|
||||
$(foreach word,$($(var)), \
|
||||
$(info $(space)$(space)$(word)) \
|
||||
) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
||||
###########################################################
|
||||
## Retrieve the directory of the current makefile
|
||||
## Must be called before including any other makefile!!
|
||||
###########################################################
|
||||
|
||||
# Figure out where we are.
|
||||
define my-dir
|
||||
$(strip \
|
||||
$(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
|
||||
$(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
|
||||
$(error my-dir must be called before including any other makefile.) \
|
||||
, \
|
||||
$(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
|
||||
) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
||||
###########################################################
|
||||
## Function we can evaluate to introduce a dynamic dependency
|
||||
###########################################################
|
||||
|
||||
define add-dependency
|
||||
$(1): $(2)
|
||||
endef
|
||||
|
||||
|
||||
###########################################################
|
||||
## Run rot13 on a string
|
||||
## $(1): the string. Must be one line.
|
||||
###########################################################
|
||||
|
||||
define rot13
|
||||
$(shell echo $(1) | tr 'a-zA-Z' 'n-za-mN-ZA-M')
|
||||
endef
|
||||
|
||||
|
||||
###########################################################
|
||||
## 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
|
||||
|
||||
|
||||
###########################################################
|
||||
## TODO: Command for running 'make' to build an output
|
||||
## TODO: Command for running ./configure to prepare a build
|
||||
###########################################################
|
43
make/build/envsetup.mk
Normal file
43
make/build/envsetup.mk
Normal file
@ -0,0 +1,43 @@
|
||||
# ---------------------------------------------------------------
|
||||
# Set up configuration for the host machine.
|
||||
UNAME := $(shell uname -sm)
|
||||
|
||||
ifneq (,$(findstring Linux,$(UNAME)))
|
||||
HOST_OS := linux
|
||||
endif
|
||||
ifneq (,$(findstring Darwin,$(UNAME)))
|
||||
HOST_OS := darwin
|
||||
endif
|
||||
ifneq (,$(findstring Macintosh,$(UNAME)))
|
||||
HOST_OS := darwin
|
||||
endif
|
||||
ifneq (,$(findstring CYGWIN,$(UNAME)))
|
||||
HOST_OS := windows
|
||||
endif
|
||||
|
||||
ifeq ($(HOST_OS),)
|
||||
$(error Unable to determine HOST_OS from uname -sm: $(UNAME)!)
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring x86_64,$(UNAME)))
|
||||
HOST_ARCH := x86_64
|
||||
else
|
||||
ifneq (,$(findstring x86,$(UNAME)))
|
||||
$(error Building on a 32-bit x86 host is not supported: $(UNAME)!)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(HOST_ARCH),)
|
||||
$(error Unable to determine HOST_ARCH from uname -sm: $(UNAME)!)
|
||||
endif
|
||||
|
||||
|
||||
# ---------------------------------------------------------------
|
||||
# Figure out the output directory
|
||||
ifeq (,$(strip $(OUT_DIR)))
|
||||
OUT_DIR := $(TOPDIR)out
|
||||
endif
|
||||
|
||||
|
||||
# ---------------------------------------------------------------
|
||||
# TODO: figure out the target output dir, etc...
|
76
make/build/main.mk
Normal file
76
make/build/main.mk
Normal file
@ -0,0 +1,76 @@
|
||||
# Always use bash, not whatever is installed as /bin/sh
|
||||
SHELL := /bin/bash
|
||||
|
||||
# Disable built-in suffix rules.
|
||||
.SUFFIXES:
|
||||
|
||||
# Turn off the RCS / SCCS implicit rules of GNU Make
|
||||
% : RCS/%,v
|
||||
% : RCS/%
|
||||
% : %,v
|
||||
% : s.%
|
||||
% : SCCS/s.%
|
||||
|
||||
# If a rule fails, delete $@.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
# Check for broken versions of make.
|
||||
# (Allow any version under Cygwin since we don't actually build the platform there.)
|
||||
ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81)))
|
||||
$(warning ********************************************************************************)
|
||||
$(warning * You are using version $(MAKE_VERSION) of make.)
|
||||
$(warning * Android can only be built by versions 3.81 and higher.)
|
||||
$(warning * see https://source.android.com/source/download.html)
|
||||
$(warning ********************************************************************************)
|
||||
$(error stopping)
|
||||
endif
|
||||
|
||||
# Absolute path of the present working direcotry.
|
||||
# This overrides the shell variable $PWD, which does not necessarily point to
|
||||
# the top of the source tree, for example when "make -C" is used.
|
||||
PWD := $(shell pwd)
|
||||
|
||||
TOP := .
|
||||
TOPDIR :=
|
||||
|
||||
# This is the default target. It must be the first declared target.
|
||||
.PHONY: all
|
||||
DEFAULT_GOAL := all
|
||||
$(DEFAULT_GOAL):
|
||||
|
||||
# The path to the directory containing our build system's Makefiles.
|
||||
BUILD_SYSTEM := $(TOPDIR)build
|
||||
|
||||
# Set up standard variables based on configuration.
|
||||
include $(BUILD_SYSTEM)/config.mk
|
||||
|
||||
# Check the sanity of the build tools.
|
||||
VERSION_CHECK_SEQUENCE_NUMBER := 5
|
||||
-include $(OUT_DIR)/versions_checked.mk
|
||||
ifneq ($(VERSION_CHECK_SEQUENCE_NUMBER),$(VERSIONS_CHECKED))
|
||||
|
||||
$(info Checking build tools versions...)
|
||||
|
||||
# Make sure that there are no spaces in the absolute path; the
|
||||
# build system can't deal with them.
|
||||
ifneq ($(words $(shell pwd)),1)
|
||||
$(warning ************************************************************)
|
||||
$(warning You are building in a directory whose absolute path contains)
|
||||
$(warning a space character:)
|
||||
$(warning $(space))
|
||||
$(warning "$(shell pwd)")
|
||||
$(warning $(space))
|
||||
$(warning Please move your source tree to a path that does not contain)
|
||||
$(warning any spaces.)
|
||||
$(warning ************************************************************)
|
||||
$(error Directory names containing spaces not supported)
|
||||
endif
|
||||
|
||||
# Now that we've checked all our build tools, write the include file that we
|
||||
# load next time.
|
||||
$(shell echo 'VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)' \
|
||||
> $(OUT_DIR)/versions_checked.mk)
|
||||
endif
|
||||
|
||||
# Bring in standard build system definitions
|
||||
include $(BUILD_SYSTEM)/definitions.mk
|
2
make/out/.gitignore
vendored
Normal file
2
make/out/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
Loading…
x
Reference in New Issue
Block a user