From cb1e735f9ca5ec755d3a437b8d08f71e9388af6e Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 25 Dec 2016 13:45:12 +0000 Subject: [PATCH] make: Add projects.mk and prefixed win32 objects with win32- - Add new makefile projects.mk, which is the place to define the minimally required set of variables to get a project's makefile oriented about the build machinery itself, mostly its locations in the file system. This also includes querying other projects. It's been pushed into a seperate makefile includeable early in the Makefile hierarchy, so that other special build variables (i.e. TARGET) can be specialized from within the project later to define build characteristics. - Prefixed object files with $(FLAVOUR_PREFIX), to allow for building two targets from the same directory Signed-off-by: Jan Lindemann --- make/defs-dev.mk | 1 - make/defs-dist.mk | 1 - make/defs.mk | 33 +++++++++++---------------------- make/projects.mk | 21 +++++++++++++++++++++ make/rules.mk | 20 ++++++++++---------- 5 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 make/projects.mk diff --git a/make/defs-dev.mk b/make/defs-dev.mk index 96ac1570..15c568ba 100644 --- a/make/defs-dev.mk +++ b/make/defs-dev.mk @@ -6,7 +6,6 @@ # -- files #CONTRIBDIR ?= $(TOPDIR)/contrib PROJECT_DIRNAME ?= $(PROJECT) -PROJECTS_DIR ?= $(CVS_PROJ_DIR) PROJECT_DIRPATH ?= $(shell readlink -f $(TOPDIR)) PREFIX ?= $(ENV_PREFIX)$(HOME)/dat/test/$(FLAVOUR_PREFIX)$(PROJECT_DIRNAME)-$(VERSION) VAR_PREFIX ?= $(PREFIX)/var diff --git a/make/defs-dist.mk b/make/defs-dist.mk index ce33de38..24bd289b 100644 --- a/make/defs-dist.mk +++ b/make/defs-dist.mk @@ -6,7 +6,6 @@ # -- files #CONTRIBDIR ?= $(TOPDIR)/contrib PROJECT_DIRNAME ?= $(PROJECT) -PROJECTS_DIR ?= /opt PROJECT_DIRPATH ?= /opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME) PREFIX ?= $(ENV_PREFIX)$(PROJECT_DIRPATH) VAR_PREFIX ?= $(ENV_PREFIX)/var/$(FLAVOUR_PATH_PREFIX)lib diff --git a/make/defs.mk b/make/defs.mk index 6a2302d0..f13b0a20 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -4,28 +4,26 @@ ifndef YTOOLS_DEF_MK_INCLUDED YTOOLS_DEF_MK_INCLUDED = true + include $(MODDIR)/make/platform.mk +include $(MODDIR)/make/projects.mk ifeq ($(MAKE_BENCHMARK),true) -SHELL = $(MOD_SCRIPT_DIR)/timed-make-shell.sh + SHELL = $(MOD_SCRIPT_DIR)/timed-make-shell.sh endif -proj_query = $(shell python $(MOD_SCRIPT_DIR)/projects.py -p $(PROJECTS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_ARGS) $(1)) -proj_dir = $(call proj_query,proj-dir $(1)) -htdocs_dir = $(call proj_query,htdocs-dir $(1)) - # ----- pre-local.mk ifneq ($(wildcard $(MODDIR)/make/pre-local.mk),) -include $(MODDIR)/make/pre-local.mk + include $(MODDIR)/make/pre-local.mk endif ifneq ($(wildcard $(TOPDIR)/make/pre-local.mk),) -include $(TOPDIR)/make/pre-local.mk + include $(TOPDIR)/make/pre-local.mk endif ifneq ($(wildcard pre-local.mk),) -include pre-local.mk + include pre-local.mk endif # ----- executables @@ -35,14 +33,10 @@ SHELL ?= /bin/bash BROWSER ?= firefox # ----- standard variables -ifeq ($(PROJECT),) -PROJECT := $(patsubst $(FLAVOUR_PREFIX)%,%,$(notdir $(shell cd $(TOPDIR); pwd | $(SED) 's/.*\///; s/-[0-9].*//'))) -endif +CVSTOPDIR ?= $(CVS_PROJ_DIR)/.. -ifeq ($(PROJECT),ytools) -MOD_SCRIPT_DIR ?= $(MODDIR)/devutil/scripts -else -MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/devutil/scripts $(MODDIR)/bin)) +ifeq ($(PROJECT),) + PROJECT := $(patsubst $(FLAVOUR_PREFIX)%,%,$(notdir $(shell cd $(TOPDIR); pwd | $(SED) 's/.*\///; s/-[0-9].*//'))) endif OS ?= $(shell sh $(MOD_SCRIPT_DIR)/get_os.sh) @@ -81,9 +75,6 @@ ifeq ($(PKG_FORMAT),debian) export INCLUDE_REV_IN_VERSIONS = true endif -CVS_PROJ_DIR ?= $(TOPDIR)/.. -CVSTOPDIR ?= $(CVS_PROJ_DIR)/.. - PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf) PROJECT_SHORT_NAME ?= $(PROJECT) PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | $(SED) 's/-/_/g') @@ -97,7 +88,6 @@ CREATE_DEVEL = false endif endif -VERSION_FILE ?= $(firstword $(wildcard VERSION $(TOPDIR)/VERSION)) VERSION := $(shell $(CAT) $(VERSION_FILE)) DIST_VERSION ?= $(shell $(SED) -e "s/-dev//" $(VERSION_FILE)) HEX_VERSION = $(shell echo $(DIST_VERSION) | \ @@ -166,7 +156,6 @@ JANWARE_URL_DOC_PROJECT ?= https://janware.com/wiki/$(JANWARE_WIKI)/assets: PKG_VENDOR ?= janware GmbH FULL_NAME ?= $(shell id -nu | xargs getent passwd | cut -d: -f5) -DEVELOPMENT ?= $(shell echo $(VERSION) | grep -q 'dev' && echo true) USE_PROJECT_LIB ?= true EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB) USE_YTOOLS ?= true @@ -303,8 +292,8 @@ ALL_H += $(LOCAL_H) $(PREREQ_H) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) SRC_C += $(filter %.c, $(SRC_ALL_CPP)) SRC_CPP += $(filter %.cc %.cpp %.C, $(SRC_ALL_CPP)) -OBJ += $(patsubst %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP)))))) -OBJ += $(patsubst %.S,%.o,$(SFILES)) +OBJ += $(addprefix $(FLAVOUR_PREFIX),$(patsubst %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP))))))) +OBJ += $(addprefix $(FLAVOUR_PREFIX),$(patsubst %.S,%.o,$(SFILES))) #PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) #PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR)) diff --git a/make/projects.mk b/make/projects.mk new file mode 100644 index 00000000..fb38c8b2 --- /dev/null +++ b/make/projects.mk @@ -0,0 +1,21 @@ +# == Variables for inter-project-communication + +# -- What do I know about myself? +VERSION_FILE ?= $(firstword $(wildcard VERSION $(TOPDIR)/VERSION)) +DEVELOPMENT ?= $(shell grep -q 'dev' $(VERSION_FILE) && echo true) + +# -- Conclude the build system's location: +CVS_PROJ_DIR ?= $(TOPDIR)/.. +ifeq ($(DEVELOPMENT),true) + PROJECTS_DIR ?= $(CVS_PROJ_DIR) +else + PROJECTS_DIR ?= /opt +endif +MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/devutil/scripts $(MODDIR)/bin)) + +# -- Query the build system about other projects: +PYTHON ?= /usr/bin/python +proj_query = $(shell $(PYTHON) $(MOD_SCRIPT_DIR)/projects.py -p $(PROJECTS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_ARGS) $(1)) +proj_dir = $(call proj_query,proj-dir $(1)) +htdocs_dir = $(call proj_query,htdocs-dir $(1)) + diff --git a/make/rules.mk b/make/rules.mk index 830f53ee..ba53d30c 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -229,10 +229,10 @@ strip.done: $(EXE_ALL) ifeq ($(LIBTYPE),shared) $(SO_PREFIX)%.so: %.o - $(LD) -shared $(BUILD_LDFLAGS) $^ -o $@ + $(LD) -shared $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@ else $(SO_PREFIX)%.so: %.o - $(LD) $(BUILD_LDFLAGS) $^ -o $@ + $(LD) $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@ endif $(VERSION_SCRIPT): @@ -263,17 +263,17 @@ $(MSVCPP_IMPLIB): $(LIB_SO) $(MS_LD) /machine:i386 /def:$(LIB_DEF) endif -%.o: %.cpp - $(CPP) $(BUILD_CPPFLAGS) -c $< +$(FLAVOUR_PREFIX)%.o: %.cpp + $(CPP) $(BUILD_CPPFLAGS) -c $< -o $@ -%.o: %.cc - $(CPP) $(BUILD_CPPFLAGS) -c $< +$(FLAVOUR_PREFIX)%.o: %.cc + $(CPP) $(BUILD_CPPFLAGS) -c $< -o $@ -%.o: %.c - $(CC) $(BUILD_CFLAGS) -c $< +$(FLAVOUR_PREFIX)%.o: %.c + $(CC) $(BUILD_CFLAGS) -c $< -o $@ -%.o: %.S - $(CC) $(BUILD_CFLAGS) -c $< +$(FLAVOUR_PREFIX)%.o: %.S + $(CC) $(BUILD_CFLAGS) -c $< -o $@ timers_%.h: %.h $(GENERATE_FUNC_TIMERS) sh $(GENERATE_FUNC_TIMERS) $< $@