defs-cpp.mk, defs.mk, platform.mk: More cleanup to defs-cpp.mk

- Group more consistently into overall default choices, template cascade and
  compiler flags
- Add definitions for st-nucleo-f103rb (for now)

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2019-03-20 15:06:25 +00:00
commit 419d3b2a08
3 changed files with 196 additions and 180 deletions

View file

@ -1,141 +1,47 @@
# ----- compilation options
ifndef JW_BUILD_CPP_DEFS_MK_INCLUDED
JW_BUILD_CPP_DEFS_MK_INCLUDED := true
# -- default choices
#COMPILER_SUITE ?= clang
COMPILER_SUITE ?= gcc
CPP_STANDARD_VERSION ?= 17
C_STANDARD_VERSION ?= 11
ifeq ($(TARGET_TRIPLET),arm-none-eabi)
LIBTYPE ?= static
else
LIBTYPE ?= shared
endif
ifeq ($(COMPILER_SUITE),gcc)
DEBUGGER ?= gdb
BUILD_EXTRA_DEBUG_FLAGS += -ggdb
endif
ifeq ($(COMPILER_SUITE),clang)
DEBUGGER = lldb
endif
ifeq ($(TARGET_ARCH),$(ARCH_32))
PROJECT_CPPFLAGS += -m32
PROJECT_LDFLAGS += -m32
endif
ifeq ($(TARGET_ARCH),armv7hl)
PROJECT_CPPFLAGS += -fPIC
else ifeq ($(TARGET_ARCH),aarch64)
PROJECT_CPPFLAGS += -fPIC
endif
USE_PROJECT_LIB ?= true
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
USE_JW_BUILD ?= true
USE_EXCEPTIONS_IN_C ?= true
USE_COMPILER_OPTIMIZATION_OPTS ?= false
USE_COMPILER_DEBUG_OPTS ?= true
USE_VERSION_MACROS ?= true
COMPILE_DEBUG_CODE ?= true
ifeq ($(findstring $(TARGET_OS),linux),)
USE_SYSTEMD := false
endif
ifeq ($(DEVELOPMENT),true)
export G_SLICE = always-malloc
export G_DEBUG = gc-friendly,resident-modules
export MALLOC_CHECK_ = 2
endif
# -- build TAGGED_TMPL_TAGS cascade
USE_PROJECT_LIB ?= true
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
USE_JW_BUILD ?= true
USE_EXCEPTIONS_IN_C ?= true
USE_COMPILER_OPTIMIZATION_OPTS ?= false
USE_COMPILER_DEBUG_OPTS ?= true
COMPILE_DEBUG_CODE ?= true
BUILD_CFLAGS += $(CFLAGS)
BUILD_CXXFLAGS += $(CXXFLAGS)
BUILD_CPPFLAGS += $(CPPFLAGS)
BUILD_LDFLAGS += $(LDFLAGS)
BUILD_CPPFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -Wno-deprecated -DPROJECT_STR=\"$(PROJECT)\"
BUILD_LDFLAGS += -Wall
LOG_QUAL_PREFIX ?= $(LOGID):
ifneq ($(LOG_QUAL_PREFIX),)
PROJECT_CPPFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\"
endif
ifeq ($(CATCH_ONLY_YERROR),true)
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
endif
SYSCFG_DIR ?= /etc/sysconfig
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
USE_VERSION_MACROS ?= true
ifeq ($(USE_VERSION_MACROS),true)
BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\"
ifneq ($(findstring st-nucleo-f103rb,$(TAGGED_TMPL_TAGS)),)
TAGGED_TMPL_TAGS += cortex-m3
MCU_BOARD_MODEL ?= ST-NUCLEO-F103RB
MCU_FLASH_OFFSET ?= 0x0000000
MCU_FLASH_SIZE ?= 0x5000
MODM_BSPS += modm:nucleo-f103rb
endif
ifneq ($(findstring cortex-m3,$(TAGGED_TMPL_TAGS)),)
# -- set jw-build mcu choices
MCU_CPU ?= cortex-m3
# -- set flags
# don't wrap error message lines
#PROJECT_LDFLAGS += -fmessage-length=0
# don't know what kind of optimization that is
#PROJECT_LDFLAGS += -Og
# stick with what janware code tends to expect
PROJECT_LDFLAGS += -fsigned-char
# I have no clue which part would evaluate these names
PROJECT_LDFLAGS += -ffunction-sections
PROJECT_LDFLAGS += -fdata-sections
PROJECT_LDFLAGS += -ffreestanding
PROJECT_LDFLAGS += -fno-move-loop-invariants
# skip any automatic initialization
PROJECT_LDFLAGS += -nostartfiles
# garbage collect unused input sections
PROJECT_LDFLAGS += -Xlinker --gc-sections
# create map file
PROJECT_LDFLAGS += -Wl,-Map,"$(EXE_MAP)"
# use newlib-nano, provides symbols _write _close _fstat _isatty _lseek (at least)
# (TODO: No -Wl necessary?)
PROJECT_LDFLAGS += --specs=nano.specs
PROJECT_LDFLAGS += --specs=nosys.specs
TAGGED_TMPL_TAGS += cortex-m
endif
ifneq ($(findstring gnu-mcu-eclipse,$(TAGGED_TMPL_TAGS)),)
LD_DEFINE_SYMBOLS += _sbrk
ifneq ($(findstring cortex-m,$(TAGGED_TMPL_TAGS)),)
TAGGED_TMPL_TAGS += cortex
endif
# ----- build options based on product choices
ifneq ($(findstring $(MCU_CPU),cortex-m3),)
PROJECT_CPPFLAGS += -mcpu=cortex-m3 -mthumb
PROJECT_LDFLAGS += -mcpu=cortex-m3 -mthumb
ifneq ($(findstring cortex-m3,$(TAGGED_TMPL_TAGS)),)
TARGET_CPU = cortex-m3
endif
# ----- tagged templates
#MCU_LD_DIR = $(wildcard $(firstword $(call $(TAGGED_TMPL_DIRS),ld)))
#MCU_LD_DIR = $(firstword $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(wildcard $(repo)/$(tag)/ld))))
#MCU_LD_DIR = $(firstword $(wildcard $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))))
MCU_LD_CHECK_DIRS = $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))
MCU_LD_DIRS = $(wildcard $(MCU_LD_CHECK_DIRS))
MCU_LD_DIR = $(firstword $(MCU_LD_DIRS))
PROJECT_LDFLAGS += -L$(MCU_LD_DIR) $(addprefix -T ,$(sort $(notdir $(wildcard $(MCU_LD_DIR)/*.ld))))
# ----- tool chain
ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET)) # we're cross-compiling
@ -175,12 +81,161 @@ else # we're not cross-compiling
endif
ifeq ($(COMPILER_SUITE),gcc)
GCC ?= $(TC_BIN_PREFIX)gcc
GXX ?= $(TC_BIN_PREFIX)g++
CXX ?= $(GXX)
GNU_LD ?= $(TC_BIN_PREFIX)ld
CLANG ?= $(TC_BIN_PREFIX)clang
CLANGPP ?= $(TC_BIN_PREFIX)clang++
STRIP ?= $(TC_BIN_PREFIX)strip
RANLIB ?= $(TC_BIN_PREFIX)ranlib
AR ?= $(TC_BIN_PREFIX)ar
PKG_CONFIG_EXE ?= $(TC_BIN_PREFIX)pkg-config
CPP_FILT ?= $(TC_BIN_PREFIX)c++filt
OBJCOPY ?= $(TC_BIN_PREFIX)objcopy
OBJDUMP ?= $(TC_BIN_PREFIX)objdump
# compiler and linker
# gcc
GCC_VERSION := $(shell $(GCC) -v 2>&1 | $(SED) '/gcc.version/I !d; s/.*version *//I; s/ \+.*//')
GCC_VERSION_NUMBERS := $(subst ., ,$(GCC_VERSION))
GCC_MAJOR := $(word 1,$(GCC_VERSION_NUMBERS))
GCC_MINOR := $(word 2,$(GCC_VERSION_NUMBERS))
GCC_REV := $(word 3,$(GCC_VERSION_NUMBERS))
# Not needed anywhere
#GNU_LD_VERSION := $(shell $(LD) -V | $(SED) '/GNU ld/ !d; s/(.*)//; s/[^0-9.-]*//')
#GNU_LD_VERSION_NUMBERS := $(subst ., ,$(GNU_LD_VERSION))
#GNU_LD_MAJOR := $(word 1,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_MINOR := $(word 2,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_REV := $(word 3,$(GNU_LD_VERSION_NUMBERS))
CC = $(GCC)
CXX = $(GXX)
LD = $(GXX)
BUILD_CXXFLAGS += -std=c++$(CPP_STANDARD_VERSION)
BUILD_CFLAGS += -std=gnu$(C_STANDARD_VERSION)
ifeq ($(shell $(TEST) $(GCC_MAJOR) -ge 5; $(ECHO) $$?),0)
ifeq ($(USE_CPP_FORCE_OVERRIDE),true)
GCC_CXXFLAGS += -Werror=suggest-override
endif
endif
else ifeq ($(COMPILER_SUITE),clang)
# clang
CLANG_CXXFLAGS += -Wno-unused-private-field -Wno-self-assign-field -Wno-overloaded-virtual
CC = $(CLANG)
CXX = $(CLANGPP)
LD = $(CLANGPP)
ifeq ($(USE_CPP_WARN_INCONSISTENT_OVERRIDE),true)
CLANG_CXXFLAGS += -Winconsistent-missing-override
endif
endif # COMPILER_SUITE
# -- gather compiler options in BUILD_XXXFLAGS
BUILD_CFLAGS += $(CFLAGS)
BUILD_CXXFLAGS += $(CXXFLAGS)
BUILD_CPPFLAGS += $(CPPFLAGS)
BUILD_LDFLAGS += $(LDFLAGS)
BUILD_CPPFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -Wno-deprecated -DPROJECT_STR=\"$(PROJECT)\"
BUILD_LDFLAGS += -Wall
ifeq ($(TARGET_ARCH),$(ARCH_32))
PROJECT_CPPFLAGS += -m32
PROJECT_LDFLAGS += -m32
endif
ifeq ($(TARGET_ARCH),x86_64)
BUILD_CPPFLAGS += -fPIC
LIBFLAGS +=
endif
ifeq ($(TARGET_ARCH),armv7hl)
PROJECT_CPPFLAGS += -fPIC
else ifeq ($(TARGET_ARCH),aarch64)
PROJECT_CPPFLAGS += -fPIC
endif
ifeq ($(TARGET_TRIPLET),arm-none-eabi)
LIBTYPE ?= static
else
LIBTYPE ?= shared
endif
ifeq ($(COMPILER_SUITE),gcc)
DEBUGGER ?= gdb
BUILD_EXTRA_DEBUG_FLAGS += -ggdb
endif
ifeq ($(COMPILER_SUITE),clang)
DEBUGGER = lldb
endif
ifeq ($(DEVELOPMENT),true)
export G_SLICE = always-malloc
export G_DEBUG = gc-friendly,resident-modules
export MALLOC_CHECK_ = 2
endif
ifneq ($(LOG_QUAL_PREFIX),)
PROJECT_CPPFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\"
endif
ifeq ($(CATCH_ONLY_YERROR),true)
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
endif
ifeq ($(USE_VERSION_MACROS),true)
BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\"
endif
ifeq ($(TARGET_TRIPLET),arm-none-eabi)
ifneq ($(findstring $(TARGET_CPU),cortex-m3),)
PROJECT_CPPFLAGS += -mcpu=cortex-m3 -mthumb
PROJECT_LDFLAGS += -mcpu=cortex-m3 -mthumb
# don't wrap error message lines
#PROJECT_LDFLAGS += -fmessage-length=0
# don't know what kind of optimization that is
#PROJECT_LDFLAGS += -Og
# stick with what janware code tends to expect
PROJECT_LDFLAGS += -fsigned-char
# I have no clue which part would evaluate these names
PROJECT_LDFLAGS += -ffunction-sections
PROJECT_LDFLAGS += -fdata-sections
PROJECT_LDFLAGS += -ffreestanding
PROJECT_LDFLAGS += -fno-move-loop-invariants
# skip any automatic initialization
PROJECT_LDFLAGS += -nostartfiles
# garbage collect unused input sections
PROJECT_LDFLAGS += -Xlinker --gc-sections
# create map file
PROJECT_LDFLAGS += -Wl,-Map,"$(EXE_MAP)"
# use newlib-nano, provides symbols _write _close _fstat _isatty _lseek (at least)
# (TODO: No -Wl necessary?)
PROJECT_LDFLAGS += --specs=nano.specs
PROJECT_LDFLAGS += --specs=nosys.specs
endif
USE_DISABLE_COMPILER_OPTIMISATION_OPTS = false
USE_EXCEPTIONS_IN_C = false
ARM_NONE_EABI_ALLFLAGS += -fno-exceptions
@ -251,66 +306,23 @@ ifeq ($(TARGET_TRIPLET),arm-none-eabi)
#BUILD_CPPFLAGS += -fno-exceptions
#BUILD_CXXFLAGS += -fno-rtti
ifneq ($(findstring gnu-mcu-eclipse,$(TAGGED_TMPL_TAGS)),)
LD_DEFINE_SYMBOLS += _sbrk
endif
# ----- tagged templates
#MCU_LD_DIR = $(wildcard $(firstword $(call $(TAGGED_TMPL_DIRS),ld)))
#MCU_LD_DIR = $(firstword $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(wildcard $(repo)/$(tag)/ld))))
#MCU_LD_DIR = $(firstword $(wildcard $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))))
MCU_LD_CHECK_DIRS = $(foreach tag,$(TAGGED_TMPL_TAGS),$(foreach repo,$(TOPDIR)/tmpl/tagged $(MODDIR)/tmpl/tagged,$(repo)/$(tag)/ld))
MCU_LD_DIRS = $(wildcard $(MCU_LD_CHECK_DIRS))
MCU_LD_DIR = $(firstword $(MCU_LD_DIRS))
PROJECT_LDFLAGS += -L$(MCU_LD_DIR) $(addprefix -T ,$(sort $(notdir $(wildcard $(MCU_LD_DIR)/*.ld))))
endif
ifeq ($(COMPILER_SUITE),gcc)
GCC ?= $(TC_BIN_PREFIX)gcc
GXX ?= $(TC_BIN_PREFIX)g++
CXX ?= $(GXX)
GNU_LD ?= $(TC_BIN_PREFIX)ld
CLANG ?= $(TC_BIN_PREFIX)clang
CLANGPP ?= $(TC_BIN_PREFIX)clang++
STRIP ?= $(TC_BIN_PREFIX)strip
RANLIB ?= $(TC_BIN_PREFIX)ranlib
AR ?= $(TC_BIN_PREFIX)ar
PKG_CONFIG_EXE ?= $(TC_BIN_PREFIX)pkg-config
CPP_FILT ?= $(TC_BIN_PREFIX)c++filt
OBJCOPY ?= $(TC_BIN_PREFIX)objcopy
OBJDUMP ?= $(TC_BIN_PREFIX)objdump
# compiler and linker
# gcc
GCC_VERSION := $(shell $(GCC) -v 2>&1 | $(SED) '/gcc.version/I !d; s/.*version *//I; s/ \+.*//')
GCC_VERSION_NUMBERS := $(subst ., ,$(GCC_VERSION))
GCC_MAJOR := $(word 1,$(GCC_VERSION_NUMBERS))
GCC_MINOR := $(word 2,$(GCC_VERSION_NUMBERS))
GCC_REV := $(word 3,$(GCC_VERSION_NUMBERS))
# Not needed anywhere
#GNU_LD_VERSION := $(shell $(LD) -V | $(SED) '/GNU ld/ !d; s/(.*)//; s/[^0-9.-]*//')
#GNU_LD_VERSION_NUMBERS := $(subst ., ,$(GNU_LD_VERSION))
#GNU_LD_MAJOR := $(word 1,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_MINOR := $(word 2,$(GNU_LD_VERSION_NUMBERS))
#GNU_LD_REV := $(word 3,$(GNU_LD_VERSION_NUMBERS))
CC = $(GCC)
CXX = $(GXX)
LD = $(GXX)
BUILD_CXXFLAGS += -std=c++$(CPP_STANDARD_VERSION)
BUILD_CFLAGS += -std=gnu$(C_STANDARD_VERSION)
ifeq ($(shell $(TEST) $(GCC_MAJOR) -ge 5; $(ECHO) $$?),0)
ifeq ($(USE_CPP_FORCE_OVERRIDE),true)
GCC_CXXFLAGS += -Werror=suggest-override
endif
endif
else ifeq ($(COMPILER_SUITE),clang)
# clang
CLANG_CXXFLAGS += -Wno-unused-private-field -Wno-self-assign-field -Wno-overloaded-virtual
CC = $(CLANG)
CXX = $(CLANGPP)
LD = $(CLANGPP)
ifeq ($(USE_CPP_WARN_INCONSISTENT_OVERRIDE),true)
CLANG_CXXFLAGS += -Winconsistent-missing-override
endif
endif # COMPILER_SUITE
PROJECT_LDFLAGS += $(addprefix -u ,$(LD_DEFINE_SYMBOLS))
# -- target files and dirs
@ -701,3 +713,5 @@ INSTALLED_ALL_LIBS = $(addprefix $(INSTALL_LIBDIR)/,$(wildcard *.a))
INSTALLED_LIB += $(INSTALLED_LIB_SO) $(INSTALLED_SHOBJS) \
$(INSTALLED_LINKS_SO) $(sort $(INSTALLED_LIB_A) $(INSTALLED_ALL_LIBS)) \
$(INSTALLED_DEF)
endif # ifndef JW_BUILD_CPP_DEFS_MK_INCLUDED

View file

@ -246,8 +246,6 @@ endif
REV_SUBDIRS = $(call reverse $(SUBDIRS))
FRESH_CVSDIR = $(HOME)/local/src/cvs.fresh
IMAGE_DIR ?= $(CVS_ROOT_DIR)/images
PCKG_DEPS_DIR = $(MODDIR)/make/deps.d
PCKG_DEFS_DIR = $(MODDIR)/make/defs.d
HDRDIR_SCOPE_SUFFIX ?= $(PROJECT)
@ -268,11 +266,14 @@ endif
IMAGES += $(wildcard *.png *.jpg *.bmp *.gif *.ico *.svg)
FONTS += $(wildcard *.woff *.svg)
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
LOCAL_MKFILES ?= $(wildcard GNUmakefile makefile Makefile *.mk)
LOG_QUAL_PREFIX ?= $(LOGID):
# -- standard dirs and files for build and install
# -- CFG
SYSCFG_DIR ?= /etc/sysconfig
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
INSTALLATION_FILE_TYPES += CFG
CONFIG_FILE ?= $(CONFIG_DIR)/$(PROJECT).conf
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)

View file

@ -169,4 +169,5 @@ ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET))
endif
endif
TARGET_CPU ?= $(TARGET_ARCH)
endif # ifndef PLATFORM_MK_INCLUDED