# # $Id$ # # CONFIG_COMMON # # This file is to be maintained by the community. # # Common Configuration Information #------------------------------------------------------- # Build architectures # CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS))) # CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined # and EPICS_HOST_ARCH is one of it's words CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS))))) BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2) #------------------------------------------------------- # Build class default, HOST or CROSS, CONFIG will override BUILD_CLASS = HOST #------------------------------------------------------- # Divider and suffix DIVIDER = . OBJ = . RES = . #------------------------------------------------------- # Default for perl if it's on the PATH, # otherwise override this in os/CONFIG_SITE.Host. PERL=perl #------------------------------------------------------- # tools for installing libraries and products INSTALL = $(PERL) $(TOOLS)/installEpics.pl INSTALL_PRODUCT = $(INSTALL) INSTALL_LIBRARY = $(INSTALL) #------------------------------------------------------- # Directories INSTALL_LOCATION = $(TOP) TOOLS = $(CONFIG)/tools INSTALL_LOCATION_LIB = $(INSTALL_LOCATION)/lib INSTALL_LOCATION_BIN = $(INSTALL_LOCATION)/bin INSTALL_HOST_BIN = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH) INSTALL_HOST_LIB = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH) INSTALL_INCLUDE = $(INSTALL_LOCATION)/include INSTALL_DOC = $(INSTALL_LOCATION)/doc INSTALL_HTML = $(INSTALL_LOCATION)/html INSTALL_TEMPLATES = $(INSTALL_LOCATION)/templates INSTALL_DBD = $(INSTALL_LOCATION)/dbd INSTALL_CONFIG = $(INSTALL_LOCATION)/configure INSTALL_JAVA = $(INSTALL_LOCATION)/javalib ifdef T_A INSTALL_LIB = $(INSTALL_LOCATION_LIB)/$(T_A) INSTALL_SHRLIB = $(INSTALL_LOCATION_LIB)/$(T_A) INSTALL_TCLLIB = $(INSTALL_LOCATION_LIB)/$(T_A) INSTALL_BIN = $(INSTALL_LOCATION_BIN)/$(T_A) # vpath directories GENERIC_SRC_DIRS = .. $(SRC_DIRS) OS_SRC_DIRS += . $(foreach dir, $(SRC_DIRS) .., \ $(dir)/os/$(OS_CLASS) $(dir)/os/posix $(dir)/os/default ) ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS) # compile line include directories INSTALL_INCLUDES += \ -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \ -I$(INSTALL_INCLUDE) GENERIC_SRC_INCLUDES = $(addprefix -I, $(GENERIC_SRC_DIRS)) #-------------------------------------------------- # GNU compiler defaults GNU_BIN = $(GNU_DIR)/bin GNU_LIB = $(GNU_DIR)/lib export GCC_EXEC_PREFIX = $(GNU_LIB)/gcc-lib/ GCC_AR = $(GNU_BIN)/$(CMPLR_PREFIX)ar$(CMPLR_SUFFIX) -rc GCC_CPP = $(GCC) -x c -E GCC_RANLIB = $(GNU_BIN)/$(CMPLR_PREFIX)ranlib$(CMPLR_SUFFIX) GCC = $(GNU_BIN)/$(CMPLR_PREFIX)cc$(CMPLR_SUFFIX) GCC_CONFORM_CFLAGS_ANSI = -ansi GCC_CONFORM_CFLAGS_STRICT = -ansi -pedantic GCC_CONFORM_CFLAGS_TRAD = -traditional GCC_WARN_YES = -Wall GCC_WARN_NO = -w GCC_OPT_YES = -g -O3 GCC_OPT_NO = -g GCC_STATIC_CFLAGS_YES = -static GCC_STATIC_CFLAGS_NO = GCC_BUILD_CFLAGS_CROSS = -B$(GNU_LIB)/gcc-lib/ -nostdinc GCC_BUILD_CPPFLAGS_CROSS = -nostdinc GCC_SHRLIB_LDFLAGS_YES = -shared GCC_CODE_CPPFLAGS = -D_REENTRANT GCC_POSIX_CPPFLAGS = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS G++ = $(GNU_BIN)/$(CMPLR_PREFIX)cc$(CMPLR_SUFFIX) G++_CONFORM_CFLAGS_NORMAL = -ansi -pedantic G++_CONFORM_CFLAGS_STRICT = -ansi -pedantic G++_WARN_YES = -Wall G++_WARN_NO = -w G++_OPT_YES = -g -O3 G++_OPT_NO = -g G++_STATIC_CFLAGS_YES = -static G++_STATIC_CFLAGS_NO = G++_SHRLIB_LDFLAGS_YES = -shared G++_CODE_CPPFLAGS = -D_REENTRANT G++_POSIX_CPPFLAGS = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS G++_TEMPL_INST_FLAG = -DEXPL_TEMPL G++_DEPENDS_FLAG = -MM #-------------------------------------------------- # Target filename definitions OBJSNAME = $(addsuffix $(OBJ),$(OBJS)) PRODNAME = $(addsuffix $(EXE),$(PROD)) TESTPRODNAME = $(addsuffix $(EXE),$(TESTPROD)) #--------------------------------------------------------------- # Directory targets DIRECTORY_TARGETS += $(INSTALL_DBD) $(INSTALL_INCLUDE) #-------------------------------------------------- # obj files TARGET_OBJS = $(addsuffix $(OBJ),$(basename $($*_OBJS))) PROD_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(PROD_SRCS))) PROD_LD_OBJS = $(TARGET_OBJS) $(PROD_OBJS) LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(LIBSRCS))) LIBRARY_LD_OBJS = $(TARGET_OBJS) $(LIBRARY_OBJS) #-------------------------------------------------- # resource(WIN32) files TARGET_RESS = $(addsuffix $(RES),$(basename $($*_RESS))) PROD_RESS = $(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))) PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS) LIBRARY_RESS = $(addsuffix $(RES),$(basename $(RCS) $(LIBRARY_RCS))) LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS) #-------------------------------------------------- # WIN95/NT source browser PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD))) LIB_BAF_IOC=$(addsuffix $(BAF),$(basename $(LIBRARY_IOC))) LIB_BAF_HOST=$(addsuffix $(BAF),$(basename $(LIBRARY_HOST))) #-------------------------------------------------- # dbExpand flags INSTALL_DBDFLAGS = -I $(INSTALL_LOCATION)/dbd #-------------------------------------------------- # C preprocessor, compiler, and linker flag defaults # Build class (CROSS,HOST) flags BUILD_CLASS_CFLAGS = $($(ANSI)_BUILD_CFLAGS_$(BUILD_CLASS)) BUILD_CLASS_CPPFLAGS = $($(ANSI)_BUILD_CPPFLAGS_$(BUILD_CLASS)) # C++ template flag TEMPL_INST_CXXFLAG = $($(CPLUSPLUS)_TEMPL_INST_FLAG) # Code (position independant and reentrant) flags CODE_CFLAGS = $($(ANSI)_CODE_CFLAGS) CODE_CXXFLAGS = $($(CPLUSPLUS)_CODE_CFLAGS) # Target architecture specific (solaris,sun4,mv167,...) flags ARCH_DEP_CPPFLAGS = ARCH_DEP_CFLAGS = ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS) ARCH_DEP_LDFLAGS = ARCH_DEP_LDLIBS = # Target operating system specific (Unix,Vx,WIN32...) flags OP_SYS_CPPFLAGS = OP_SYS_CFLAGS = OP_SYS_LDFLAGS = OP_SYS_INCLUDES = OP_SYS_LDLIBS = # SOURCE* used by WIN32 only SOURCE_CFLAG = SOURCE_CXXCFLAG = # Makefile specific flags USR_INCLUDES = USR_CFLAGS = USR_CXXFLAGS = USR_LDFLAGS = USR_LDLIBS = USR_CPPFLAGS = USR_DBDFLAGS = # Target specific options TARGET_INCLUDES = $($(basename $@)_INCLUDES) $($(basename $@)_INCLUDES_$(OS_CLASS)) TARGET_CFLAGS = $($(basename $@)_CFLAGS) $($(basename $@)_CFLAGS_$(OS_CLASS)) TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS) $($(basename $@)_CXXFLAGS_$(OS_CLASS)) TARGET_LDFLAGS = $($(basename $@)_LDFLAGS) $($(basename $@)_LDFLAGS_$(OS_CLASS)) TARGET_LDLIBS = $($(basename $@)_LDLIBS) $($(basename $@)_LDLIBS_$(OS_CLASS)) TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS) $($(basename $@)_CPPFLAGS_$(OS_CLASS)) TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS) $($(basename $@)_SNCFLAGS_$(OS_CLASS)) # POSIX specific flags POSIX_CPPFLAGS = $($(ANSI)_POSIX_CPPFLAGS) # CMPLR level of ansi conformance flags CONFORM_CFLAGS = $($(ANSI)_CONFORM_CFLAGS_$(CMPLR)) CONFORM_CXXFLAGS = $($(CPLUSPLUS)_CONFORM_CFLAGS_$(CMPLR)) # Warnings flags WARN_CFLAGS = $($(ANSI)_WARN_$($(BUILD_CLASS)_WARN)) WARN_CXXFLAGS = $($(CPLUSPLUS)_WARN_$($(BUILD_CLASS)_WARN)) # Optimization flags OPT_CFLAGS = $($(ANSI)_OPT_$($(BUILD_CLASS)_OPT)) OPT_CXXFLAGS = $($(CPLUSPLUS)_OPT_$($(BUILD_CLASS)_OPT)) OPT_LDFLAGS = # Static build flags STATIC_CFLAGS = $($(ANSI)_STATIC_CFLAGS_$(STATIC_BUILD)) STATIC_CXXCFLAGS = $($(CPLUSPLUS)_STATIC_CFLAGS_$(STATIC_BUILD)) STATIC_LDFLAGS = $($(ANSI)_STATIC_LDFLAGS_$(STATIC_BUILD)) STATIC_LDLIBS = $($(ANSI)_STATIC_LDLIBS_$(STATIC_BUILD)) # Depends flag DEPENDS_FLAG = $($(CPLUSPLUS)_DEPENDS_FLAG) #-------------------------------------------------- # Flags INCLUDES = -I. $(USR_INCLUDES) $(INSTALL_INCLUDES) \ $(TARGET_INCLUDES) $(GENERIC_SRC_INCLUDES) $(OP_SYS_INCLUDES) CFLAGS = $(CONFORM_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS) $(WARN_CFLAGS)\ $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS) $(CODE_CFLAGS)\ $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) CXXFLAGS = $(CONFORM_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS) $(WARN_CXXFLAGS)\ $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS)\ $(STATIC_CXXCFLAGS) $(OP_SYS_CFLAGS) $(TEMPL_INST_CXXFLAG) LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(DEPLIB_LDFLAGS)\ $(ARCH_DEP_LDFLAGS) $(STATIC_LDFLAGS) $(OP_SYS_LDFLAGS) LDLIBS = $(TARGET_LDLIBS) $(USR_LDLIBS) $(DEPLIB_LDLIBS) $(ARCH_DEP_LDLIBS)\ $(STATIC_LDLIBS) $(OP_SYS_LDLIBS) CPPFLAGS += $(POSIX_CPPFLAGS) $(EPICS_BASE_CPPFLAGS)\ $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS) $(OP_SYS_CPPFLAGS) CPPSNCFLAGS = $(CPPFLAGS) $(INCLUDES) DBDFLAGS = $(USR_DBDFLAGS) -I . -I .. $(INSTALL_DBDFLAGS) #-------------------------------------------------- # ar definition default AR = $($(ANSI)_AR) ARFLAGS = ARCMD = $(AR) $(ARFLAGS) $@ #-------------------------------------------------- # C compiler CC = $($(ANSI)) $(BUILD_CLASS_CFLAGS) CPP = $($(ANSI)_CPP) $(BUILD_CLASS_CPPFLAGS) RANLIB = $($(ANSI)_RANLIB) #-------------------------------------------------- # C++ compiler CXX = $($(CPLUSPLUS)) $(BUILD_CLASS_CFLAGS) #-------------------------------------------------- # Build compile line here COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(SOURCE_FLAG) COMPILE.cpp = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(SOURCE_CXXFLAG) #-------------------------------------------------- # depends definition DEPENDS_RULE = -$(COMPILE.cpp) $(DEPENDS_FLAG) $^ > DEPENDS #--------------------------------------------------------------- # Names of installed items # # each list starts with the destination directory name(s) # to make sure it's there INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%) INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%) INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_LIB)/%) 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_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%) INCREC +=$(RECTYPES) $(MENUS) INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%) INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%) INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%) INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \ $(subst $(CONFIG),top/configure,$(TEMPLATES))) INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%) INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%) INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\ $(RECTYPES:%.h= $(INSTALL_DBD)/%.dbd)\ $(MENUS:%.h= $(INSTALL_DBD)/%.dbd) INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%) #--------------------------------------------------------------- # # auto determine the directory paths that things are installed to # RULES: # 1) found in any one of several os specific area # => install to $(INSTALL_INCLUDE)/os/$(OS_CLASS) # 2) not foundin (1) and found in generic area # => install to $(INSTALL_INCLUDE) # 3) not found in (1) or (2) then may be (not yet) computer generated # => install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let # build rules work on vpath # # These rules guarantee that the users include from # no more than two directories # INSTALL_INC += $(foreach inc, $(INC), \ $(firstword \ $(OS_INSTALL_INC) \ $(GENERIC_INSTALL_INC) \ $(GENERATED_INSTALL_INC) ) ) # # Rule 1 # OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) ) INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff) ) INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) ) INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) ) # # Rule 2 # GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) ) INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb) ) INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) ) INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) ) # # Rule 3 # GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/os/$(OS_CLASS)/$(inc) endif