jw-pkg/make/platform.mk
Jan Lindemann e93338872f defs.mk: Move PKG_FORMAT definition into platform.mk
PKG_FORMAT is now more straightforward to get with from the revised
jw-pkg.py distro info --format '%{cascade}', so do that, and do it in
the context where all the other variables are set from the output of
that command.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-02 12:55:36 +00:00

218 lines
7.1 KiB
Makefile

# ----- host and target variables
ifndef PLATFORM_MK_INCLUDED
PLATFORM_MK_INCLUDED = true
# "-include" tries search path, we don't want that
define try_include
ifneq ($$(wildcard $(1)),)
include $(1)
endif
endef
CACHE_PROJECTS_MK := $(JWBDIR)/cache-projects.mk
$(eval $(call try_include,$(CACHE_PROJECTS_MK)))
$(eval $(call try_include,$(TOPDIR)/make/.cache-project.mk))
$(eval $(call try_include,$(JWBDIR)/make/pre-local.mk))
$(eval $(call try_include,$(TOPDIR)/make/pre-local.mk))
$(eval $(call try_include,pre-local.mk))
# -- What do I know about myself?
VERSION_FILE ?= $(firstword $(wildcard VERSION) $(TOPDIR)/VERSION)
ifndef DEVELOPMENT
ifeq ($(wildcard $(VERSION_FILE)),)
DEVELOPMENT := true
else
DEVELOPMENT := $(shell grep -q 'dev' $(VERSION_FILE) && echo true)
endif
endif
# -- Conclude the build system's location:
ifeq ($(PROJECTS_DIR),)
ifeq ($(DEVELOPMENT),true)
PROJECTS_DIR ?= $(TOPDIR)/..
else
PROJECTS_DIR ?= /opt
endif
endif
ifeq ($(MAKE_BENCHMARK),true)
export SHELL := /bin/bash $(JWB_SCRIPT_DIR)/timed-make-shell.sh
else
export SHELL := /bin/bash
endif
JWB_SCRIPT_DIR := $(firstword $(wildcard $(JWBDIR)/scripts $(JWBDIR)/bin))
include $(JWBDIR)/make/py-version.mk
JW_PKG_PY = $(PYTHON) $(JWB_SCRIPT_DIR)/jw-pkg.py -p $(PROJECTS_DIR) -t $(TOPDIR) --topdir-format absolute $(JW_PKG_PY_EXTRA_OPTS)
# -- product
TARGET_PRODUCTS_ARM_NONE_EABI = \
st-nucleo-f103rb \
st-disc1-f429i \
st-disco-f769i
TAGGED_TMPL_TAGS_ARM_NONE_EABI ?= $(TARGET_PRODUCTS_ARM_NONE_EABI)
TARGET_PRODUCTS += \
$(TARGET_PRODUCTS_ARM_NONE_EABI)
TARGET_PRODUCT = $(firstword $(foreach t,$(TAGGED_TMPL_TAGS),$(filter $(t),$(TARGET_PRODUCTS))))
TAGGED_TMPL_MAKEFILES = $(wildcard $(addsuffix .mk,$(foreach t,$(TAGGED_TMPL_DIRS),$(addprefix $(t)/,$(TAGGED_TMPL_TAGS)))))
ifneq ($(foreach t,$(TAGGED_TMPL_TAGS),$(filter $(t),$(TAGGED_TMPL_TAGS_ARM_NONE_EABI))),)
TARGET_TRIPLET ?= arm-none-eabi
endif
# -- arch, vendor, os, libc
ifeq ($(HOST_TUPLE),)
HOST_TUPLE := $(shell $(JW_PKG_PY) distro info --format '%{gnu-triplet} %{cascade}')
endif
HOST_TUPLE_WORDS := $(subst -, ,$(HOST_TUPLE))
HOST_ARCH := $(word 1,$(HOST_TUPLE_WORDS))
HOST_VENDOR := $(word 2,$(HOST_TUPLE_WORDS))
HOST_OS := $(word 3,$(HOST_TUPLE_WORDS))
HOST_ABI := $(word 4,$(HOST_TUPLE_WORDS))
HOST_TRIPLET := $(HOST_ARCH)-$(HOST_OS)-$(HOST_ABI)
HOST_OS_CASCADE := $(wordlist 2,$(words $(HOST_TUPLE)),$(HOST_TUPLE))
PKG_FORMAT ?= $(patsubst pkg-%,%,$(filter pkg-%,$(HOST_OS_CASCADE)))
ifndef TARGET
ifneq ($(subst mingw,,$(CWD)),$(CWD))
TARGET := mingw
endif
endif
DEFINE_FROM_TARGET := false
ifdef TARGET
ifndef TARGET_TUPLE
ifndef TARGET_TRIPLET
DEFINE_FROM_TARGET := true
endif
else ifndef TARGET_TRIPLET
ifndef TARGET_TUPLE
DEFINE_FROM_TARGET := true
endif
endif
ifeq ($(DEFINE_FROM_TARGET),true)
ifeq ($(TARGET),mingw)
TARGET_ARCH ?= i686
TARGET_ABI := mingw32
TARGET_OS ?= w64
else ifeq ($(TARGET),mingw32)
TARGET_ARCH ?= i686
TARGET_ABI := mingw32
TARGET_OS ?= w64
else ifeq ($(TARGET),mingw64)
TARGET_ARCH ?= x86_64
TARGET_ABI := mingw64
TARGET_OS := w64
else ifeq ($(TARGET),linux)
endif
# -- fall back on defaults
TARGET_ARCH ?= $(HOST_ARCH)
TARGET_VENDOR ?= $(HOST_VENDOR)
TARGET_OS ?= $(HOST_OS)
TARGET_ABI ?= $(HOST_ABI)
endif
TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI)
endif
ifneq ($(TARGET_TUPLE),)
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
else ifneq ($(TARGET_TRIPLET),)
TARGET_TRIPLET_WORDS ?= $(subst -, ,$(TARGET_TRIPLET))
TARGET_ARCH ?= $(word 1,$(TARGET_TRIPLET_WORDS))
TARGET_VENDOR ?= unknown
TARGET_OS ?= $(word 2,$(TARGET_TRIPLET_WORDS))
TARGET_ABI ?= $(word 3,$(TARGET_TRIPLET_WORDS))
TARGET_TUPLE ?= $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
else
TARGET_TUPLE ?= $(HOST_TUPLE)
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TRIPLET_WORDS ?= $(subst -, ,$(TARGET_TRIPLET))
endif
ifeq ($(TARGET_TUPLE),)
$(error TARGET_TUPLE is empty)
endif
ifeq ($(TARGET_ARCH),armv7l)
SYSTEM_LIBDIR_NAME = lib
else ifeq ($(TARGET_ARCH),armv6l)
SYSTEM_LIBDIR_NAME = lib
else ifeq ($(TARGET_ARCH),aarch64)
SYSTEM_LIBDIR_NAME = lib
else ifeq ($(TARGET_ARCH),x86_64)
SYSTEM_LIBDIR_NAME = lib64
else
SYSTEM_LIBDIR_NAME = lib
endif
SYSTEM_LIBDIR = /usr/$(SYSTEM_LIBDIR_NAME)
# - support legacy jw-pkg target variables
ifneq ($(findstring $(TARGET_ABI),mingw mingw32 mingw64),)
TARGET ?= mingw
else
TARGET ?= $(TARGET_OS)
endif
ifeq ($(OS_NAME_VERSION),)
OS_NAME_VERSION := $(shell $(JW_PKG_PY) distro info --format '%{id}-%{codename}')
endif
ifeq ($(OS_NAME),)
OS_NAME := $(word 1,$(subst -, ,$(OS_NAME_VERSION)))
endif
ARCH ?= $(TARGET_ARCH)
ARCH_32 = i586
ifndef ARCH
# TODO unreached code, test and fix this
ifeq ($(shell uname -m),armv7l)
ARCH = armv7hl
else ifeq ($(shell uname -m),armv6l)
ARCH = armv6hl
else ifeq ($(shell uname -m),aarch64)
ARCH = aarch64
else ifeq ($(shell uname -m),x86_64)
ARCH = x86_64
else
ARCH = $(ARCH_32)
endif
endif
ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET))
ifeq ($(TARGET),mingw)
FLAVOUR_PREFIX ?= win32-
FLAVOUR_SUFFIX ?= -win32
FLAVOUR_PATH_PREFIX ?= win32/
FLAVOUR_PATH_SUFFIX ?= /win32
else
FLAVOUR_PREFIX ?= $(TARGET_TRIPLET)-
FLAVOUR_SUFFIX ?= -$(TARGET_TRIPLET)
FLAVOUR_PATH_PREFIX ?= $(TARGET_TRIPLET)/
FLAVOUR_PATH_SUFFIX ?= /$(TARGET_TRIPLET)
endif
endif
TARGET_CPU ?= $(TARGET_ARCH)
endif # ifndef PLATFORM_MK_INCLUDED