diff --git a/Makefile b/Makefile index 49d65468d..41f384c64 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,11 @@ # -# Top Level EPICS Makefile -# by Matthew Needes and Mike Bordua -# -# Notes: -# The build, clean, install, and depends "commands" do not have -# their own dependency lists; they are instead handled by -# the build.%, clean.%, etc. dependencies. -# -# However, the release dependencies DOES require a complete -# install because the release.% syntax is illegal. -# # $Id$ # -TOP=. +TOP = . include $(TOP)/configure/CONFIG -DIRS = configure -DIRS += config -DIRS += src +DIRS += config configure src include $(TOP)/configure/RULES_TOP diff --git a/config/CONFIG_COMMON b/config/CONFIG_COMMON index 6d973e2b7..5015e42a7 100644 --- a/config/CONFIG_COMMON +++ b/config/CONFIG_COMMON @@ -178,7 +178,9 @@ EPICS_INCLUDES = -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) -I$(INSTALL_INCLUDE) # (convenience for extensions and applications) ifneq ($(EPICS_BASE),$(TOP)) ifneq ($(EPICS_BASE),$(INSTALL_LOCATION)) -EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS) -I$(EPICS_BASE_INCLUDE) +EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) +EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS) +EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE)/generic endif endif diff --git a/config/CONFIG_SITE b/config/CONFIG_SITE index 8b89d5d74..106b4a527 100644 --- a/config/CONFIG_SITE +++ b/config/CONFIG_SITE @@ -41,7 +41,7 @@ endif # frc5ce # hkbaja47 # -CROSS_COMPILER_TARGET_ARCHS=mv167 +CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040 # If only a subset of the host architectures perform diff --git a/config/Makefile b/config/Makefile index 0b4635504..e3df5cfe3 100644 --- a/config/Makefile +++ b/config/Makefile @@ -6,36 +6,5 @@ TOP=.. include $(TOP)/configure/CONFIG -INSTALL_CONFIG = $(INSTALL_LOCATION)/config - -CONFIGS += CONFIG -CONFIGS += CONFIG_BASE -CONFIGS += CONFIG_BASE_VERSION -CONFIGS += CONFIG_COMMON -CONFIGS += CONFIG_ENV - -CONFIGS += CONFIG.Host.$(HOST_ARCH) -CONFIGS += CONFIG_HOST_ARCH.$(HOST_ARCH) -CONFIGS += CONFIG.Host.UnixCommon -CONFIGS += CONFIG_HOST_ARCH.UnixCommon - -CONFIGS += CONFIG.Vx -CONFIGS += $(subst ../,,$(wildcard ../CONFIG.Vx.*)) -#CONFIGS += $(CROSS_COMPILER_TARGET_ARCHS:%=CONFIG.Vx.%) - -CONFIGS += CONFIG_SITE -CONFIGS += CONFIG_SITE_ENV -CONFIGS += $(subst ../,,$(wildcard ../CONFIG_SITE*)) - -CONFIGS += RULES.Host -CONFIGS += RULES.Unix -CONFIGS += RULES.Vx -CONFIGS += RULES_ARCHS -CONFIGS += RULES_DIRS -CONFIGS += RULES_TOP - -BIN_INSTALLS += $(wildcard ../tools/*.pl) -BIN_INSTALLS += ../tools/installEpics - -include $(TOP)/configure/RULES_BUILD +include $(TOP)/configure/RULES_ARCHS diff --git a/config/Makefile.Host b/config/Makefile.Host new file mode 100644 index 000000000..0b4635504 --- /dev/null +++ b/config/Makefile.Host @@ -0,0 +1,41 @@ +# +# $Id$ +# + +TOP=.. + +include $(TOP)/configure/CONFIG + +INSTALL_CONFIG = $(INSTALL_LOCATION)/config + +CONFIGS += CONFIG +CONFIGS += CONFIG_BASE +CONFIGS += CONFIG_BASE_VERSION +CONFIGS += CONFIG_COMMON +CONFIGS += CONFIG_ENV + +CONFIGS += CONFIG.Host.$(HOST_ARCH) +CONFIGS += CONFIG_HOST_ARCH.$(HOST_ARCH) +CONFIGS += CONFIG.Host.UnixCommon +CONFIGS += CONFIG_HOST_ARCH.UnixCommon + +CONFIGS += CONFIG.Vx +CONFIGS += $(subst ../,,$(wildcard ../CONFIG.Vx.*)) +#CONFIGS += $(CROSS_COMPILER_TARGET_ARCHS:%=CONFIG.Vx.%) + +CONFIGS += CONFIG_SITE +CONFIGS += CONFIG_SITE_ENV +CONFIGS += $(subst ../,,$(wildcard ../CONFIG_SITE*)) + +CONFIGS += RULES.Host +CONFIGS += RULES.Unix +CONFIGS += RULES.Vx +CONFIGS += RULES_ARCHS +CONFIGS += RULES_DIRS +CONFIGS += RULES_TOP + +BIN_INSTALLS += $(wildcard ../tools/*.pl) +BIN_INSTALLS += ../tools/installEpics + +include $(TOP)/configure/RULES_BUILD + diff --git a/config/RULES.Vx b/config/RULES.Vx index a8019a0a0..e67613175 100644 --- a/config/RULES.Vx +++ b/config/RULES.Vx @@ -33,14 +33,6 @@ INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%) MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n)) -# if we are not building base add base includes -# -ifneq ($(EPICS_BASE),$(TOP)) -ifneq ($(EPICS_BASE),$(INSTALL_LOCATION)) -EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS) -endif -endif - all:: install rebuild:: clean install diff --git a/configure/CONFIG.CrossCommon b/configure/CONFIG.CrossCommon index f0b73562a..4fbdcf8fe 100644 --- a/configure/CONFIG.CrossCommon +++ b/configure/CONFIG.CrossCommon @@ -1,6 +1,6 @@ # Cross compiler default definitions -BUILD_TYPE = CROSS +BUILD_CLASS = CROSS ANSI = GCC CPLUSPLUS = G++ diff --git a/configure/CONFIG_BASE b/configure/CONFIG_BASE index dfd335dc8..56bba45b0 100644 --- a/configure/CONFIG_BASE +++ b/configure/CONFIG_BASE @@ -15,15 +15,20 @@ SNC = $(EPICS_BASE_HOST_BIN)/snc$(HOSTEXE) EPICS_BASE_INCLUDE = $(EPICS_BASE)/include +# build command line include directories ifneq ($(EPICS_BASE),$(TOP)) ifneq ($(EPICS_BASE),$(INSTALL_LOCATION)) INSTALL_INCLUDES += \ - -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)MT\ - -I$(EPICS_BASE_INCLUDE)/os/posixMT \ + -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)$(B_T_SUFFIX) \ + -I$(EPICS_BASE_INCLUDE)/os/posix$(B_T_SUFFIX) \ -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS) \ -I$(EPICS_BASE_INCLUDE)/os/posix \ + -I$(EPICS_BASE_INCLUDE)/generic$(B_T_SUFFIX) \ -I$(EPICS_BASE_INCLUDE)/generic \ -I$(EPICS_BASE_INCLUDE) + +INSTALL_DBDFLAGS += \ + -I$(EPICS_BASE)/dbd endif endif diff --git a/configure/CONFIG_COMMON b/configure/CONFIG_COMMON index 09b4ada8a..4bef6228d 100644 --- a/configure/CONFIG_COMMON +++ b/configure/CONFIG_COMMON @@ -6,8 +6,44 @@ # This file is to be maintained by the community. # -BUILD_TYPE = HOST +#------------------------------------------------------- +# Default valid build types and include directory suffixes +# +# Host means single-thread non-ioc +# HostMT means multi-thread non-ioc +# Ioc means multi-thread ioc +# IocST means single-thread ioc +VALID_BUILDS = Host Ioc HostMT IocST +Host_SUFFIX= +HostMT_SUFFIX=MT +Ioc_SUFFIX=Ioc +IocST_SUFFIX=IocST + +B_T_SUFFIX = $($(B_T)_SUFFIX) + +# vpath directories +OS_SRC_DIRS += $(foreach dir,$(SRC_DIRS), \ + $(dir)/os/$(OS_CLASS)$(B_T_SUFFIX) $(dir)/os/posix$(B_T_SUFFIX) \ + $(dir)/os/$(OS_CLASS) $(dir)/os/posix \ + $(dir)/generic$(B_T_SUFFIX) $(dir)/generic $(dir)) + +OS_DIRS += ../os/$(OS_CLASS)$(B_T_SUFFIX) ../os/posix$(B_T_SUFFIX) \ + ../os/$(OS_CLASS) ../os/posix \ + ../generic$(B_T_SUFFIX) ../generic + +# compile line include directories +SRC_INCLUDES += $(addprefix -I,$(OS_SRC_DIRS) $(OS_DIRS)) +INSTALL_INCLUDES += \ + -I$(INSTALL_INCLUDE)/os/$(OS_CLASS)$(B_T_SUFFIX) \ + -I$(INSTALL_INCLUDE)/os/posix$(B_T_SUFFIX) \ + -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \ + -I$(INSTALL_INCLUDE)/os/posix \ + -I$(INSTALL_INCLUDE)/generic$(B_T_SUFFIX) \ + -I$(INSTALL_INCLUDE)/generic \ + -I$(INSTALL_INCLUDE) + +#------------------------------------------------------- # Common Configuration Information # CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined @@ -107,15 +143,15 @@ G++_SHRLIB_LDFLAGS_YES = -shared #-------------------------------------------------- # C compiler -CC = $($(ANSI)_$(CMPLR)) $(GCC_CFLAGS_$(BUILD_TYPE)) +CC = $($(ANSI)_$(CMPLR)) $(GCC_CFLAGS_$(BUILD_CLASS)) AR = $($(ANSI)_AR) -CPP = $($(ANSI)_CPP) $(GCC_CPPFLAGS_$(BUILD_TYPE)) +CPP = $($(ANSI)_CPP) $(GCC_CPPFLAGS_$(BUILD_CLASS)) RANLIB = $($(ANSI)_RANLIB) LD = $($(ANSI)_LD) #-------------------------------------------------- # C++ compiler -CXX = $($(CPLUSPLUS)_$(CXXCMPLR)) $(GCC_CFLAGS_$(BUILD_TYPE)) +CXX = $($(CPLUSPLUS)_$(CXXCMPLR)) $(GCC_CFLAGS_$(BUILD_CLASS)) CXX_LD = $($(CPLUSPLUS)_LD) #--------------------------------------------------------------- @@ -176,13 +212,13 @@ INSTALL_DBDFLAGS = -I $(INSTALL_LOCATION)/dbd #-------------------------------------------------- # Warnings flags (CONFIG. will override) -WARN_CFLAGS = $($(ANSI)_WARN_$($(BUILD_TYPE)_WARN)) -WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$($(BUILD_TYPE)_WARN)) +WARN_CFLAGS = $($(ANSI)_WARN_$($(BUILD_CLASS)_WARN)) +WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$($(BUILD_CLASS)_WARN)) #-------------------------------------------------- # Optimization flags (CONFIG. will override) -OPT_CFLAGS = $($(ANSI)_OPT_$($(BUILD_TYPE)_OPT)) -OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$($(BUILD_TYPE)_OPT)) +OPT_CFLAGS = $($(ANSI)_OPT_$($(BUILD_CLASS)_OPT)) +OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$($(BUILD_CLASS)_OPT)) OPT_LDFLAGS = #-------------------------------------------------- @@ -203,7 +239,7 @@ DEPENDS_RULE = -$(COMPILE.cc) $(DEPENDS_FLAG) $^ > DEPENDS #-------------------------------------------------- # Include files -INCLUDES = -I. -I.. $(USR_INCLUDES) $(INSTALL_INCLUDES) $(TARGET_INCLUDES) $(OP_SYS_INCLUDES) +INCLUDES = -I. -I.. $(USR_INCLUDES) $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(TARGET_INCLUDES) $(OP_SYS_INCLUDES) #-------------------------------------------------- # Flags diff --git a/configure/CONFIG_SITE b/configure/CONFIG_SITE index 51124cb77..ddac1a402 100644 --- a/configure/CONFIG_SITE +++ b/configure/CONFIG_SITE @@ -43,7 +43,7 @@ endif # #CROSS_COMPILER_TARGET_ARCHS= vxWorks-68040 CROSS_COMPILER_TARGET_ARCHS= mv167 ppc604 - +CROSS_COMPILER_TARGET_ARCHS= vxWorks-68040 # If only a subset of the host architectures perform # the build for the CROSS_COMPILER_TARGET_ARCHS @@ -95,18 +95,18 @@ SHARED_LIBRARIES=NO # must be either YES or NO STATIC_BUILD=NO -# Unix Optimization +# Host build optimization # must be either YES or NO -HOST_OPT=YES +Host_OPT=YES -# VxWorks Optimization +# IOC build optimization # must be either YES or NO -CROSS_OPT=YES +IOC_OPT=YES -# Generate Verbose Compiler Warnings for Unix +# Generate Verbose Compiler Warnings for Host builds # must be either YES or NO -HOST_WARN=YES +Host_WARN=YES -# Generate Verbose Compiler Warnings for crosscompiles +# Generate Verbose Compiler Warnings for IOC builds # must be either YES or NO -CROSS_WARN=YES +IOC_WARN=YES diff --git a/configure/Makefile b/configure/Makefile index 5b1bca215..e3df5cfe3 100644 --- a/configure/Makefile +++ b/configure/Makefile @@ -6,27 +6,5 @@ TOP=.. include $(TOP)/configure/CONFIG -CONFIGS += CONFIG -CONFIGS += CONFIG_BASE -CONFIGS += CONFIG_BASE_VERSION -CONFIGS += CONFIG_COMMON -CONFIGS += CONFIG_ENV - -CONFIGS += CONFIG.CrossCommon -CONFIGS += $(subst ../,,$(wildcard ../CONFIG.Host.*)) -CONFIGS += $(subst ../,,$(wildcard ../CONFIG.Target.*)) - -CONFIGS += $(subst ../,,$(wildcard ../CONFIG_SITE*)) - -CONFIGS += RELEASE -CONFIGS += $(subst ../,,$(wildcard ../RELEASE.*)) -CONFIGS += RULES_ARCHS -CONFIGS += RULES_BUILD -CONFIGS += RULES_DIRS -CONFIGS += RULES_TOP - -CONFIGS += $(subst ../,,$(wildcard ../tools/*.pl)) -CONFIGS += tools/installEpics - -include $(TOP)/configure/RULES_BUILD +include $(TOP)/configure/RULES_ARCHS diff --git a/configure/RULES.Db b/configure/RULES.Db new file mode 100644 index 000000000..bc3e3d362 --- /dev/null +++ b/configure/RULES.Db @@ -0,0 +1,176 @@ +#RULES.Db + +include $(CONFIG)/RULES_ARCHS +ifdef T_A + +MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(EXE) +DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) +DBST = dbst +MAKEDBDEPENDS = $(PERL) $(TOP)/configure/makeDbDepends.pl +REPLACEVAR = $(PERL) $(TOP)/configure/replaceVAR.pl +ifndef WIN32 +TOUCH = touch +else +TOUCH = type NUL >> +endif + +INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%) +INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%) +INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%) +INSTALL_DATA=$(INSTALLDB:%=$(INSTALL_DB)/%) + +all: install + +inc: $(INSTALL_DBS) + +rebuild: clean install + +install: inc buildInstall + +buildInstall: build $(INSTALL_BPTS) $(INSTALL_DATA) + +clean:: + @echo "Cleaning" + @$(RM) $(DB) $(DBDNAME) *.template *.substitutions *.db.raw \ + *.db-stamp *.edf esiread.cnf + +depends: + +##################################################### "Foreign" templates + +TEMPLATE_LINKS = $(filter-out $(notdir $(USES_TEMPLATE)), $(USES_TEMPLATE)) +TEMPLATE_FILES = $(filter $(notdir $(USES_TEMPLATE)), $(USES_TEMPLATE)) +DB_STAMP = $(patsubst %.db, %.db-stamp, $(DB)) +DB_REALTARGET = $(patsubst %.db-stamp, %.db, $@) + +ifneq '$(TEMPLATE_LINKS)' '' +build: $(notdir $(TEMPLATE_LINKS)) +endif +build: $(INSTALL_DBDNAME) $(TEMPLATE_FILES) $(DB_STAMP) + +$(notdir $(TEMPLATE_LINKS)): %.template: +ifndef WIN32 + @$(RM) $(notdir $(TEMPLATE_LINKS)) + ln -s $(TEMPLATE_LINKS) . +else + @$(RM) $(notdir $(TEMPLATE_LINKS)) + $(CP) $(TEMPLATE_LINKS) . +endif + +##################################################### Inflated or plain databases + +$(INSTALL_DB)/%.db: %.db-stamp + @echo "Installing database $@" + @$(INSTALL) -d -m 644 $(patsubst %.db-stamp, %.db, $<) $(@D) + +# Must have DBDNAME defined to use dbst optimization +ifndef DBDNAME +DB_OPT = NO +endif + +# dbst based database optimization +ifeq '$(DB_OPT)' 'YES' +.PRECIOUS: %.db.raw +%.db-stamp: %.db.raw $(INSTALL_DBD)/$(DBDNAME) + @echo "Optimizing database $@" + $(DBST) $(INSTALL_DBD)/$(DBDNAME) $< -d > $(DB_REALTARGET) + @$(TOUCH) $@ +%.db-stamp: %.t.db.raw $(INSTALL_DBD)/$(DBDNAME) + @echo "Optimizing database $@" + $(DBST) $(INSTALL_DBD)/$(DBDNAME) $< -d > $(DB_REALTARGET) + @$(TOUCH) $@ +else +# NO optimization => move it and keep a stamp +%.db-stamp: %.db.raw + @$(MV) $< $(DB_REALTARGET) + @$(TOUCH) $@ + @$(TOUCH) $< +%.db-stamp: %.t.db.raw + @$(MV) $< $(DB_REALTARGET) + @$(TOUCH) $@ + @$(TOUCH) $< +endif + +%.t.db.raw: %.substitutions + @echo "Inflating database from $<" + @$(RM) $@ + @$(MSI) -S $< > $@ + +##################################################### CapFast filter + +%.edf: ../%.sch $(DEPSCHS) + @if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi + $(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $< + +##################################################### Substitution files + +$(INSTALL_DB)/%.substitutions: %.substitutions + @echo "Installing $@" + @$(INSTALL) -d -m 644 $(@F) $(@D) + +%.substitutions: ../%.substitutions + @$(CP) $< $@ + +ifdef CREATESUBSTITUTIONS +%.substitutions: + @$(CREATESUBSTITUTIONS) $* +endif + +# Better make it PRECIOUS (to get around make bug) +.PRECIOUS: %.substitutions + +##################################################### Template databases + +# Installed template files (dbLoadTemplate() on IOC side) +$(INSTALL_DB)/%.template: %.template + @echo "Installing $@" + @$(INSTALL) -d -m 644 $(@F) $(@D) + +%.template: ../%.template + @$(CP) $< $@ + +%.template: %.edf + $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $< + @$(REPLACEVAR) < $@.VAR > $@ + @$(RM) $@.VAR + +##################################################### Flat databases + +%.db.raw: ../%.db + $(CP) $< $@ + +%.db.raw: %.edf + $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $< + @$(REPLACEVAR) < $@.VAR > $@ + @$(RM) $@.VAR + +##################################################### DBD stuff + +$(INSTALL_DBD)/%: % + @echo "Installing $@" + @$(INSTALL) -d -m 644 $< $(@D) + +$(INSTALL_DBD)/%: ../% + @echo "Installing $@" + @$(INSTALL) -d -m 644 $< $(@D) + +bpt%.dbd: ../bpt%.data + $(RM) $@ + $(MAKEBPT) $< + +ifdef DBDEXPAND +$(DBDNAME): ../$(DBDEXPAND) + @echo "Expanding dbd" + @$(RM) $@ + $(DBEXPAND) $(USR_DBDFLAGS) $< > $@ +endif + +##################################################### Dependencies + +DEPENDS: $(filter $(patsubst %.db, %.substitutions, $(DB)), $(wildcard *.substitutions)) + @echo "Making template database dependencies" + @$(MAKEDBDEPENDS) $^ + +-include DEPENDS + +endif diff --git a/configure/RULES_ARCHS b/configure/RULES_ARCHS index 7f422b791..f3037fa14 100644 --- a/configure/RULES_ARCHS +++ b/configure/RULES_ARCHS @@ -3,8 +3,11 @@ # ifndef T_A + all: install +rebuild: clean all + ACTIONS += inc ACTIONS += build ACTIONS += install @@ -15,78 +18,34 @@ ACTIONS += rebuild actionPart = $(word 1, $(subst $(DIVIDER), ,$@)) archPart = $(word 2, $(subst $(DIVIDER), ,$@)) -# -# hostActionArchTargets -# -hostArchs = $(HOST_ARCH) -hostActionArchTargets = $(foreach x, $(ACTIONS),\ - $(foreach arch,$(hostArchs), $(x)$(DIVIDER)$(arch))) -ifeq (Makefile, $(wildcard Makefile)) -hostDirs = $(addprefix O.,$(hostArchs)) -$(hostActionArchTargets) : $(hostDirs) - $(MAKE) -C O.$(archPart) -f ../Makefile TOP=../$(TOP) T_A=$(archPart) $(actionPart) -$(hostArchs) : % : O.% - $(MAKE) -C O.$@ -f ../Makefile TOP=../$(TOP) T_A=$@ -else -$(hostActionArchTargets) : -$(hostArchs) : -endif - -# -# crossActionArchTargets -# -crossArchs = $(filter-out $(hostArchs),$(BUILD_ARCHS)) -crossActionArchTargets = $(foreach x, $(ACTIONS), \ - $(foreach arch, $(CROSS_COMPILER_TARGET_ARCHS), $(x)$(DIVIDER)$(arch))) -ifeq (Makefile, $(wildcard Makefile)) -crossDirs = $(addprefix O.,$(crossArchs)) -$(crossActionArchTargets) : $(crossDirs) - $(MAKE) -C O.$(archPart) -f ../Makefile TOP=../$(TOP) T_A=$(archPart) $(actionPart) -$(crossArchs) : % : O.% - $(MAKE) -C O.$@ -f ../Makefile TOP=../$(TOP) T_A=$@ -else -$(crossActionArchTargets) : -$(crossArchs) : -endif - -$(hostDirs) : - $(PERL) $(TOOLS)/makeMakefile.pl $@ $(TOP) - -$(crossDirs) : - $(PERL) $(TOOLS)/makeMakefile.pl $@ $(TOP) - -# -# host/cross action targets -# -$(ACTIONS) : % : %$(DIVIDER)host %$(DIVIDER)cross -HostActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)host) -CrossActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)cross) -$(HostActionTargets) : %$(DIVIDER)host : $(addprefix %$(DIVIDER), $(hostArchs)) -$(CrossActionTargets) : %$(DIVIDER)cross : $(addprefix %$(DIVIDER), $(crossArchs)) +actionArchTargets = $(foreach x, $(ACTIONS),\ + $(foreach arch,$(BUILD_ARCHS), $(x)$(DIVIDER)$(arch))) -% : %$(DIVIDER)host %$(DIVIDER)cross +$(actionArchTargets) : + $(MAKE) -f Makefile T_A=$(archPart) $(actionPart) -# -# arch targets -# -host : $(hostArchs) -cross : $(crossArchs) +$(BUILD_ARCHS) : % : + $(MAKE) -f Makefile T_A=$@ + +$(ACTIONS):%: $(foreach arch, $(BUILD_ARCHS), %$(DIVIDER)$(arch)) # # special clean rule # clean :: - $(RMDIR) $(hostDirs) $(crossDirs) + $(RMDIR) $(addsuffix *,$(addprefix O.,$(BUILD_ARCHS))) clean$(DIVIDER)% :: - $(RMDIR) O.$* + $(RMDIR) O.$** -.PHONY : $(HostActionTargets) -.PHONY : $(CrossActionTargets) -.PHONY : $(crossActionArchTargets) -.PHONY : $(hostActionArchTargets) -.PHONY : $(hostArchs) $(crossArchs) -.PHONY : $(ACTIONS) clean all host cross +.PHONY : $(buildActionTargets) +.PHONY : $(buildActionArchTargets) +.PHONY : $(buildArchs) +.PHONY : $(ACTIONS) clean all +else #T_A +ifndef B_T +include $(CONFIG)/RULES_BUILD_TYPE +endif endif diff --git a/configure/RULES_BUILD b/configure/RULES_BUILD index 38d2707ed..51b3f4bb5 100644 --- a/configure/RULES_BUILD +++ b/configure/RULES_BUILD @@ -28,64 +28,25 @@ # vpath, of course, has the disadvantage that we need explicit rules # for scripts or similar os-specific filed which have _no_ suffix... -include $(CONFIG)/RULES_ARCHS + ifdef T_A -BUILD=YES -ifneq ($(THREAD_TYPE),) -ifneq ($(OS_THREAD_TYPE),) -ifneq ($(THREAD_TYPE),$(findstring $(THREAD_TYPE),$(OS_THREAD_TYPE))) -BUILD=NO -endif -endif -endif -ifeq ($(BUILD),YES) - -ifneq ($(THREAD_TYPE),ST) -OS_SRC_DIRS += $(foreach dir,$(SRC_DIRS), \ - $(dir)/os/$(OS_CLASS)MT $(dir)/os/posixMT \ - $(dir)/os/$(OS_CLASS) $(dir)/os/posix \ - $(dir)/generic $(dir)) . .. -INSTALL_INCLUDES += $(foreach dir,$(SRC_DIRS) $(INSTALL_INCLUDE), \ - -I$(dir)/os/$(OS_CLASS)MT -I$(dir)/os/posixMT \ - -I$(dir)/os/$(OS_CLASS) -I$(dir)/os/posix \ - -I$(dir)/generic -I$(dir)) - -INSTALL_INC += $(subst generic/,,$(foreach inc,$(INC), \ - $(firstword $(foreach dir,$(SRC_DIRS) .., \ - $(subst $(dir),$(INSTALL_INCLUDE),$(firstword $(wildcard \ - $(dir)/os/$(OS_CLASS)MT/$(inc) \ - $(dir)/os/posixMT/$(inc) \ - $(dir)/os/$(OS_CLASS)/$(inc) \ - $(dir)/os/posix/$(inc)\ - $(dir)/generic/$(inc) \ - $(dir)/$(inc) \ - ../$(inc) \ - )))) $(INSTALL_INCLUDE)/$(inc)))) +ifdef B_T +ifneq ($(strip $(SRC_DIRS)),) +vpath %.c $(USER_VPATH) . .. $(OS_SRC_DIRS) +vpath %.cc $(USER_VPATH) . .. $(OS_SRC_DIRS) +vpath %.C $(USER_VPATH) . .. $(OS_SRC_DIRS) +vpath %.rc $(USER_VPATH) . .. $(OS_SRC_DIRS) +vpath %.h $(USER_VPATH) . .. $(OS_SRC_DIRS) else -OS_SRC_DIRS += $(foreach dir,$(SRC_DIRS), \ - $(dir)/os/$(OS_CLASS) $(dir)/os/posix $(dir)/generic $(dir)) . .. -INSTALL_INCLUDES += $(foreach dir,$(SRC_DIRS) $(INSTALL_INCLUDE), \ - -I$(dir)/os/$(OS_CLASS) -I$(dir)/os/posix -I$(dir)/generic -I$(dir)) -INSTALL_INC += $(subst generic/,,$(foreach inc,$(INC), \ - $(firstword $(foreach dir,$(SRC_DIRS) .., \ - $(subst $(dir),$(INSTALL_INCLUDE),$(firstword $(wildcard \ - $(dir)/os/$(OS_CLASS)/$(inc) \ - $(dir)/os/posix/$(inc)\ - $(dir)/generic/$(inc) \ - $(dir)/$(inc) \ - ../$(inc) \ - )))) $(INSTALL_INCLUDE)/$(inc)))) - +vpath %.c $(USER_VPATH) . .. $(OS_DIRS) +vpath %.cc $(USER_VPATH) . .. $(OS_DIRS) +vpath %.C $(USER_VPATH) . .. $(OS_DIRS) +vpath %.rc $(USER_VPATH) . .. $(OS_DIRS) +vpath %.h $(USER_VPATH) . .. endif - -vpath %.c $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic .. -vpath %.cc $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic .. -vpath %.C $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic .. -vpath %.rc $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic .. # This prevents base/src/include/*.h from being installed. Why?? -#vpath %.h ../os/$(OS_CLASS) ../os/generic .. -vpath %.h $(USER_VPATH) $(OS_SRC_DIRS) .. . +#vpath %.h ../os/$(OS_CLASS) # check for add-on CFLAGS and CXXFLAGS # @@ -193,19 +154,12 @@ endif ifneq ($(strip $(LIBRARY_$(OS_CLASS))),) LIBRARY+=$(subst -nil-,,$(LIBRARY_$(OS_CLASS))) else -ifdef LIBRARY_DEFAULT +ifneq (,$(LIBRARY_DEFAULT)) +#ifdef LIBRARY_DEFAULT LIBRARY+=$(LIBRARY_DEFAULT) endif endif -ifneq ($(strip $(SHARED_LIBRARIES_$(OS_CLASS))),) -SHARED_LIBRARIES+=$(subst -nil-,,$(SHARED_LIBRARIES_$(OS_CLASS))) -else -ifdef SHARED_LIBRARIES_DEFAULT -SHARED_LIBRARIES_+=$(SHARED_LIBRARIES_DEFAULT) -endif -endif - ifneq ($(strip $(PROD_LIBS_$(OS_CLASS))),) PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS))) else @@ -244,6 +198,14 @@ PROD += $(PROD_DEFAULT) endif endif +ifneq ($(strip $(PRODMT_$(OS_CLASS))),) +PRODMT += $(subst -nil-,,$(PRODMT_$(OS_CLASS))) +else +ifdef PRODMT_DEFAULT +PRODMT += $(PRODMT_DEFAULT) +endif +endif + # # concat specific scripts # @@ -267,33 +229,31 @@ endif endif #--------------------------------------------------------------- +## LIBSRCS and LIBOBJS for LIBRARY LIBSRCS += $($(addsuffix _SRCS,$(LIBRARY))) -###### The following stmt does not work ######### -ifneq ($($(addsuffix _SRCS_$(OS_CLASS),$(LIBRARY))),) -XXX=aaa +ifneq ($(foreach lib,$(LIBRARY),$($(lib)_SRCS_$(OS_CLASS))),) LIBSRCS += $(subst -nil-,,$($(addsuffix _SRCS_$(OS_CLASS),$(LIBRARY)))) else -XXX=bbb -LIBSRCS+=$($(addsuffix _SRCS_DEFAULT,$(LIBRARY))) +LIBSRCS += $($(addsuffix _SRCS_DEFAULT,$(LIBRARY))) endif # adjust object names for library contents # ifdef LIBSRCS -LIBOBJS+=$(addsuffix $(OBJ), $(basename $(LIBSRCS))) +LIBOBJS += $(addsuffix $(OBJ), $(basename $(LIBSRCS))) endif -# adjust executables -ifdef TESTPROD -TESTPROD := $(addsuffix $(EXE), $(TESTPROD)) -endif - -# adjust executables -ifdef PROD -PROD := $(addsuffix $(EXE), $(PROD)) -endif +#--------------------------------------------------------------- +PROD := $(addsuffix $(EXE),$(PROD)) +TESTPROD := $(addsuffix $(EXE),$(TESTPROD)) +TARGETS := $(addsuffix $(EXE),$(TARGETS)) + +LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) +ifeq ($(strip $(SHARED_LIBRARIES)),YES) +LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) $(INSTALL_DLL_LINK_LIBS) +endif # SHARED_LIBRARIES=YES #--------------------------------------------------------------- # ---------------------------------------------------- @@ -312,6 +272,7 @@ INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%) INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%) INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%) INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%) +INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%) INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%) MANLIST = 1 2 3 4 5 6 7 8 9 @@ -319,7 +280,6 @@ INSTALL_MANS = $(foreach n, \ $(MANLIST), $(MAN$(n):%= $(INSTALL_MAN)/man$(n)/%)) INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%) INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%) -INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%) ifdef TEMPLATES_DIR INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR) else @@ -336,9 +296,36 @@ INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\ INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%) +INSTALL_INC += $(foreach inc,$(INC), \ + $(addprefix $(INSTALL_INCLUDE)/, \ + $(firstword \ + $(foreach dir,$(SRC_DIRS), \ + $(subst $(dir)/, , \ + $(wildcard \ + $(dir)/os/$(OS_CLASS)$(B_T_SUFFIX)/$(inc) \ + $(dir)/os/posix$(B_T_SUFFIX)/$(inc) \ + $(dir)/os/$(OS_CLASS)/$(inc) \ + $(dir)/os/posix/$(inc) \ + $(dir)/generic$(B_T_SUFFIX)/$(inc) \ + $(dir)/generic/$(inc) \ + $(dir)/$(inc) \ + ))) $(subst ../, ,$(wildcard ../$(inc) ../os/$(OS_CLASS)/$(inc))) $(inc)) )) + +#INSTALL_INC += $(subst generic/,,$(foreach inc,$(INC), \ +# $(firstword $(foreach dir,$(SRC_DIRS) .., \ +# $(addprefix $(INSTALL_INCLUDE)/, \ +# $(subst $(dir)/, ,$(firstword $(wildcard \ +# $(dir)/os/$(OS_CLASS)$(B_T_SUFFIX)/$(inc) \ +# $(dir)/os/posix$(B_T_SUFFIX)/$(inc) \ +# $(dir)/os/$(OS_CLASS)/$(inc) \ +# $(dir)/os/posix/$(inc) \ +# $(dir)/generic$(B_T_SUFFIX)/$(inc) \ +# $(dir)/generic/$(inc) \ +# $(dir)/$(inc) \ +# ../$(inc) ) $(inc) ))) )))) + MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n)) #--------------------------------------------------------------- -#--------------------------------------------------------------- # must use c++ linker if linking to shared libs with c++ code #ifeq ($(strip $(SHARED_LIBRARIES)),YES) ifneq ($(strip $(CPLUSPLUS)),) @@ -353,9 +340,19 @@ endif # CPLUSPLUS # in this library (may be for e.g. base/src/libCompat # on some archs), don't define (and build) any library! +# LIBRARY + ifdef LIBRARY +CFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES) +CXXFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES) +SHRLIB_LINKER = $(CXX) +LIB_SRCS=$(LIBRARY_SRCS) $($(basename $(LIBRARY))_SRCS) +LIBRARY_OBJS+=$(addsuffix $(OBJ), $(basename $(LIB_SRCS))) +endif # LIBRARY + + +ifdef LIBNAME ifdef LIBOBJS -LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) CFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES) CXXFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES) @@ -368,48 +365,38 @@ SHRLIB_LINKER = $(CXX) else SHRLIB_LINKER = $(CC) endif -LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) $(INSTALL_DLL_LINK_LIBS) endif # SHARED_LIBRARIES=YES endif # LIBOBJS -endif # LIBRARY +endif # LIBNAME #--------------------------------------------------------------- # Main targets all: install +install: buildInstall + buildInstall : build build : inc -build: $(LIBTARGETS) $(PROD) $(TESTPROD) +rebuild: clean install -buildInstall : $(TARGETS) \ - $(INSTALL_SCRIPTS) $(INSTALL_PROD) \ - $(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) +inc: $(INSTALL_INC) -build: $(MENUS) $(RECTYPES) $(BPTS) +build: $(LIBTARGETS) $(PROD) $(TESTPROD) $(TARGETS) \ + $(MENUS) $(RECTYPES) $(BPTS) ifdef DBDEXPAND build: $(DBDNAME) endif -inc: $(INSTALL_INC) - -# WIN95/NT source browser -#ifdef BAF -PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD))) -LIB_BAF = $(addsuffix $(BAF), $(basename $(LIBRARY))) -browse: $(LIB_BAF) $(PROD_BAF) -#endif - -rebuild: clean install - -install: inc buildInstall - -buildInstall : $(INSTALL_MANS) \ +buildInstall : \ + $(INSTALL_SCRIPTS) $(INSTALL_PROD) \ + $(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \ + $(INSTALL_MANS) \ $(INSTALL_DOCS) \ $(INSTALL_HTMLS) \ $(INSTALL_TEMPLATE) \ @@ -424,8 +411,8 @@ endif clean:: @echo "Cleaning" @$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) \ - $(INC) *$(RES) $(TARGETS) \ - $(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME) *.out + $(INC) *$(RES) $(TARGETS) $(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) \ + $(DBDNAME) *.out ifdef BAF @$(RM) $(PROD_BAF) $(LIB_BAF) *$(BOF) endif @@ -433,6 +420,22 @@ ifdef DBDEXPAND @$(RM) $(DBDNAME) endif +#--------------------------------------------------------------- + +# WIN95/NT source browser +#ifdef BAF +PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD))) +LIB_BAF = $(addsuffix $(BAF), $(basename $(LIBRARY))) +browse: $(LIB_BAF) $(PROD_BAF) +#endif + +#--------------------------------------------------------------- + +DIRECTORY_TARGETS += $(INSTALL_DBD) $(INSTALL_INCLUDE) + +$(DIRECTORY_TARGETS) : + $(MKDIR) -p $@ + #--------------------------------------------------------------- # Products # @@ -480,11 +483,11 @@ $(PRODNAME): $(PRODNAME_OBJS) $(PRODNAME_RESS) @$(RM) $@ $(PRODNAME_LINKER) $(PRODNAME_OBJS) $(PRODNAME_RESS) $(LDLIBS) -else # ifdef PRODNAME_SRCS +else # PRODNAME_SRCS notdefined BROWSE_OBJECTS = $(addsuffix $(BOF), $(basename $(PRODNAME))) -endif # ifdef PRODNAME_SRCS +endif # PRODNAME_SRCS notdefined # WIN95/NT source browser ifdef BAF @@ -494,7 +497,7 @@ $(addsuffix $(BAF), $(basename $(PRODNAME))): $(BROWSE_OBJECTS) $(BAFCMD) $^ endif -else # PRODNAME not defined +else # PRODNAME notdefined # We have to use the product's true dependancies and # call make again to determine if product should be rebuilt @@ -504,7 +507,7 @@ PROD_OBJS=$(addsuffix $(OBJ), $(basename $(SRCS) $(COND_PROD_SRCS))) PROD_RESS=$(addsuffix $(RES), $(basename $(RCS) $(COND_PROD_RCS))) -PROD_MAKE_COMMAND=$(MAKE) -f ../Makefile $@\ +PROD_MAKE_COMMAND=$(MAKE) -f ../Makefile.$(B_T) T_A=$(T_A) B_T=$(B_T) $@\ PRODNAME=$(addsuffix $(EXE), $(basename $@))\ PRODNAME_SRCS="$(SRCS) $($(basename $@)_SRCS)"\ PRODNAME_SRCS_DEFAULT="$($(basename $@)_SRCS_DEFAULT)"\ @@ -515,6 +518,9 @@ PROD_MAKE_COMMAND=$(MAKE) -f ../Makefile $@\ PRODNAME_LIBS="$($(basename $@)_LIBS)" $(PROD): $(SRCS) $(COND_PROD_SRCS) $(PROD_RESS) $(PROD_DEPLIBS) $(COND_PROD_DEPLIBS) + + +$(PROD): @$(PROD_MAKE_COMMAND) ifdef BAF @@ -523,9 +529,8 @@ $(PROD_BAF): $(PROD) endif endif -endif #ifdef PRODNAME - -endif #ifdef PROD +endif # PRODNAME notdefined +endif # PROD defined #--------------------------------------------------------------- # Java classes and packages @@ -599,7 +604,7 @@ endif #ifdef JAVA # The order of the following rules is # VERY IMPORTANT !!!! -depends: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS) +depends: $(LIBSRCS) $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS) $(RM) DEPENDS touch DEPENDS $(DEPENDS_RULE) @@ -614,7 +619,7 @@ depends: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS) $(COMPILE.cc) $< $(LINK.cc) $(notdir $(basename $<))$(OBJ) $(LDLIBS) -%$(EXE): %.C +%$(EXE): %.3 @$(RM) $@ $(COMPILE.cc) $< $(LINK.cc) $(notdir ,$(basename $<))$(OBJ) $(LDLIBS) @@ -713,8 +718,8 @@ endif $(MV) $( $makefile" or die "Cannot create $makefile"; print OUT "#This Makefile created by makeMakefiles.pl\n\n\n"; print OUT "all :\n"; -print OUT " \$(MAKE) -f ../Makefile TOP=../$top T_A=$t_a \$@\n\n"; +print OUT " \$(MAKE) -f ../Makefile.$b_t TOP=../$top T_A=$t_a B_T=$b_t \$@\n\n"; print OUT ".DEFAULT: force\n"; -print OUT " \$(MAKE) -f ../Makefile TOP=../$top T_A=$t_a \$@\n\n"; +print OUT " \$(MAKE) -f ../Makefile.$b_t TOP=../$top T_A=$t_a B_T=$b_t \$@\n\n"; print OUT "force: ;\n"; close OUT; diff --git a/src/Makefile b/src/Makefile index b7f6c8d5d..0da08bffa 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,20 +21,15 @@ DIRS += bpt DIRS += ca DIRS += util DIRS += misc -DIRS += sequencer DIRS += dbtools DIRS += rsrv DIRS += rec DIRS += as DIRS += dev -#FOR NOW JUST BUILD vxWorks dependent stuff +#Following are optional DIRS += vxWorks - -# -# if CPLUSPLUS isnt empty then include C++ src codes -# -DIRS += $(patsubst %,gdd,$(strip $(CPLUSPLUS))) -DIRS += $(patsubst %,cas,$(strip $(CPLUSPLUS))) +#DIRS += gdd +#DIRS += cas include $(TOP)/configure/RULES_DIRS diff --git a/src/libCom/test/Makefile b/src/libCom/test/Makefile index a904e01b8..cb0865897 100644 --- a/src/libCom/test/Makefile +++ b/src/libCom/test/Makefile @@ -3,10 +3,5 @@ TOP=../../.. include $(TOP)/configure/CONFIG -osiTimeTest_LIBS += Com -osiTimeTest_SRCS += osiTimeTest.cc -PROD_DEFAULT = osiTimeTest -PROD_vxWorks = -nil- - -include $(TOP)/configure/RULES_BUILD +include $(TOP)/configure/RULES_ARCHS diff --git a/src/libCom/test/Makefile.Host b/src/libCom/test/Makefile.Host new file mode 100644 index 000000000..e670b5c37 --- /dev/null +++ b/src/libCom/test/Makefile.Host @@ -0,0 +1,11 @@ + +TOP=../../.. + +include $(TOP)/configure/CONFIG + +osiTimeTest_LIBS += Com +osiTimeTest_SRCS += osiTimeTest.cc +PROD= osiTimeTest + +include $(TOP)/configure/RULES_BUILD +