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 <jan@janware.com>
This commit is contained in:
Jan Lindemann 2016-12-25 13:45:12 +00:00
commit cb1e735f9c
5 changed files with 42 additions and 34 deletions

View file

@ -6,7 +6,6 @@
# -- files # -- files
#CONTRIBDIR ?= $(TOPDIR)/contrib #CONTRIBDIR ?= $(TOPDIR)/contrib
PROJECT_DIRNAME ?= $(PROJECT) PROJECT_DIRNAME ?= $(PROJECT)
PROJECTS_DIR ?= $(CVS_PROJ_DIR)
PROJECT_DIRPATH ?= $(shell readlink -f $(TOPDIR)) PROJECT_DIRPATH ?= $(shell readlink -f $(TOPDIR))
PREFIX ?= $(ENV_PREFIX)$(HOME)/dat/test/$(FLAVOUR_PREFIX)$(PROJECT_DIRNAME)-$(VERSION) PREFIX ?= $(ENV_PREFIX)$(HOME)/dat/test/$(FLAVOUR_PREFIX)$(PROJECT_DIRNAME)-$(VERSION)
VAR_PREFIX ?= $(PREFIX)/var VAR_PREFIX ?= $(PREFIX)/var

View file

@ -6,7 +6,6 @@
# -- files # -- files
#CONTRIBDIR ?= $(TOPDIR)/contrib #CONTRIBDIR ?= $(TOPDIR)/contrib
PROJECT_DIRNAME ?= $(PROJECT) PROJECT_DIRNAME ?= $(PROJECT)
PROJECTS_DIR ?= /opt
PROJECT_DIRPATH ?= /opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME) PROJECT_DIRPATH ?= /opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME)
PREFIX ?= $(ENV_PREFIX)$(PROJECT_DIRPATH) PREFIX ?= $(ENV_PREFIX)$(PROJECT_DIRPATH)
VAR_PREFIX ?= $(ENV_PREFIX)/var/$(FLAVOUR_PATH_PREFIX)lib VAR_PREFIX ?= $(ENV_PREFIX)/var/$(FLAVOUR_PATH_PREFIX)lib

View file

@ -4,28 +4,26 @@
ifndef YTOOLS_DEF_MK_INCLUDED ifndef YTOOLS_DEF_MK_INCLUDED
YTOOLS_DEF_MK_INCLUDED = true YTOOLS_DEF_MK_INCLUDED = true
include $(MODDIR)/make/platform.mk include $(MODDIR)/make/platform.mk
include $(MODDIR)/make/projects.mk
ifeq ($(MAKE_BENCHMARK),true) ifeq ($(MAKE_BENCHMARK),true)
SHELL = $(MOD_SCRIPT_DIR)/timed-make-shell.sh SHELL = $(MOD_SCRIPT_DIR)/timed-make-shell.sh
endif 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 # ----- pre-local.mk
ifneq ($(wildcard $(MODDIR)/make/pre-local.mk),) ifneq ($(wildcard $(MODDIR)/make/pre-local.mk),)
include $(MODDIR)/make/pre-local.mk include $(MODDIR)/make/pre-local.mk
endif endif
ifneq ($(wildcard $(TOPDIR)/make/pre-local.mk),) ifneq ($(wildcard $(TOPDIR)/make/pre-local.mk),)
include $(TOPDIR)/make/pre-local.mk include $(TOPDIR)/make/pre-local.mk
endif endif
ifneq ($(wildcard pre-local.mk),) ifneq ($(wildcard pre-local.mk),)
include pre-local.mk include pre-local.mk
endif endif
# ----- executables # ----- executables
@ -35,14 +33,10 @@ SHELL ?= /bin/bash
BROWSER ?= firefox BROWSER ?= firefox
# ----- standard variables # ----- standard variables
ifeq ($(PROJECT),) CVSTOPDIR ?= $(CVS_PROJ_DIR)/..
PROJECT := $(patsubst $(FLAVOUR_PREFIX)%,%,$(notdir $(shell cd $(TOPDIR); pwd | $(SED) 's/.*\///; s/-[0-9].*//')))
endif
ifeq ($(PROJECT),ytools) ifeq ($(PROJECT),)
MOD_SCRIPT_DIR ?= $(MODDIR)/devutil/scripts PROJECT := $(patsubst $(FLAVOUR_PREFIX)%,%,$(notdir $(shell cd $(TOPDIR); pwd | $(SED) 's/.*\///; s/-[0-9].*//')))
else
MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/devutil/scripts $(MODDIR)/bin))
endif endif
OS ?= $(shell sh $(MOD_SCRIPT_DIR)/get_os.sh) OS ?= $(shell sh $(MOD_SCRIPT_DIR)/get_os.sh)
@ -81,9 +75,6 @@ ifeq ($(PKG_FORMAT),debian)
export INCLUDE_REV_IN_VERSIONS = true export INCLUDE_REV_IN_VERSIONS = true
endif endif
CVS_PROJ_DIR ?= $(TOPDIR)/..
CVSTOPDIR ?= $(CVS_PROJ_DIR)/..
PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf) PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf)
PROJECT_SHORT_NAME ?= $(PROJECT) PROJECT_SHORT_NAME ?= $(PROJECT)
PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | $(SED) 's/-/_/g') PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | $(SED) 's/-/_/g')
@ -97,7 +88,6 @@ CREATE_DEVEL = false
endif endif
endif endif
VERSION_FILE ?= $(firstword $(wildcard VERSION $(TOPDIR)/VERSION))
VERSION := $(shell $(CAT) $(VERSION_FILE)) VERSION := $(shell $(CAT) $(VERSION_FILE))
DIST_VERSION ?= $(shell $(SED) -e "s/-dev//" $(VERSION_FILE)) DIST_VERSION ?= $(shell $(SED) -e "s/-dev//" $(VERSION_FILE))
HEX_VERSION = $(shell echo $(DIST_VERSION) | \ 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 PKG_VENDOR ?= janware GmbH
FULL_NAME ?= $(shell id -nu | xargs getent passwd | cut -d: -f5) FULL_NAME ?= $(shell id -nu | xargs getent passwd | cut -d: -f5)
DEVELOPMENT ?= $(shell echo $(VERSION) | grep -q 'dev' && echo true)
USE_PROJECT_LIB ?= true USE_PROJECT_LIB ?= true
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB) EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
USE_YTOOLS ?= true USE_YTOOLS ?= true
@ -303,8 +292,8 @@ ALL_H += $(LOCAL_H) $(PREREQ_H)
SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H)
SRC_C += $(filter %.c, $(SRC_ALL_CPP)) SRC_C += $(filter %.c, $(SRC_ALL_CPP))
SRC_CPP += $(filter %.cc %.cpp %.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 += $(addprefix $(FLAVOUR_PREFIX),$(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 %.S,%.o,$(SFILES)))
#PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) #PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ))
#PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR)) #PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR))

21
make/projects.mk Normal file
View file

@ -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))

View file

@ -229,10 +229,10 @@ strip.done: $(EXE_ALL)
ifeq ($(LIBTYPE),shared) ifeq ($(LIBTYPE),shared)
$(SO_PREFIX)%.so: %.o $(SO_PREFIX)%.so: %.o
$(LD) -shared $(BUILD_LDFLAGS) $^ -o $@ $(LD) -shared $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
else else
$(SO_PREFIX)%.so: %.o $(SO_PREFIX)%.so: %.o
$(LD) $(BUILD_LDFLAGS) $^ -o $@ $(LD) $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
endif endif
$(VERSION_SCRIPT): $(VERSION_SCRIPT):
@ -263,17 +263,17 @@ $(MSVCPP_IMPLIB): $(LIB_SO)
$(MS_LD) /machine:i386 /def:$(LIB_DEF) $(MS_LD) /machine:i386 /def:$(LIB_DEF)
endif endif
%.o: %.cpp $(FLAVOUR_PREFIX)%.o: %.cpp
$(CPP) $(BUILD_CPPFLAGS) -c $< $(CPP) $(BUILD_CPPFLAGS) -c $< -o $@
%.o: %.cc $(FLAVOUR_PREFIX)%.o: %.cc
$(CPP) $(BUILD_CPPFLAGS) -c $< $(CPP) $(BUILD_CPPFLAGS) -c $< -o $@
%.o: %.c $(FLAVOUR_PREFIX)%.o: %.c
$(CC) $(BUILD_CFLAGS) -c $< $(CC) $(BUILD_CFLAGS) -c $< -o $@
%.o: %.S $(FLAVOUR_PREFIX)%.o: %.S
$(CC) $(BUILD_CFLAGS) -c $< $(CC) $(BUILD_CFLAGS) -c $< -o $@
timers_%.h: %.h $(GENERATE_FUNC_TIMERS) timers_%.h: %.h $(GENERATE_FUNC_TIMERS)
sh $(GENERATE_FUNC_TIMERS) $< $@ sh $(GENERATE_FUNC_TIMERS) $< $@