diff --git a/Makefile b/Makefile index 4f2c6ad9a..cc8e14d1f 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,14 @@ include $(TOP)/config/CONFIG_BASE DIRS = src config +# +# this bootstraps in makeMakefile.pl (and others) so that it can +# be used to create the first O.xxxx/Makefile +# +PERL_BOOTSTRAP_SCRIPTS = $(notdir $(wildcard $(TOP)/src/tools/*.pl)) +PERL_BOOTSTRAP_SCRIPTS_INSTALL = $(PERL_BOOTSTRAP_SCRIPTS:%=$(INSTALL_BIN)/%) +all host cross inc rebuild uninstall clean depends buildInstall :: $(PERL_BOOTSTRAP_SCRIPTS_INSTALL) + include $(TOP)/config/RULES_TOP release: @@ -28,3 +36,5 @@ built_release: @echo TOP: Creating Fully Built Release... @./MakeRelease -b $(INSTALL_LOCATION) +$(INSTALL_BIN)/%.pl: $(TOP)/src/tools/%.pl + $(PERL) $(TOP)/src/tools/installEpics.pl -d -m 555 $< $(INSTALL_BIN) diff --git a/config/CONFIG.Vx.pc486 b/config/CONFIG.Vx.pc486 index 80db390a2..68b83fa64 100644 --- a/config/CONFIG.Vx.pc486 +++ b/config/CONFIG.Vx.pc486 @@ -6,13 +6,14 @@ # Unix Compiler and other Utilities OLDINSTALL = echo CONFIG.Vx.486 OLDINSTALL -CP =$(PERL) $(EPICS_BASE)/src/tools/cp.pl -MV =$(PERL) $(EPICS_BASE)/src/tools/mv.pl -RM =$(PERL) $(EPICS_BASE)/src/tools/rm.pl -f -MKDIR=$(PERL) $(EPICS_BASE)/src/tools/mkdir.pl -RMDIR=$(PERL) $(EPICS_BASE)/src/tools/rm.pl -rf -CHMOD=echo -WHAT=echo +CP =$(PERL) $(EPICS_BASE_HSOT_BIN)/cp.pl +MV =$(PERL) $(EPICS_BASE_HOST_BIN)/mv.pl +RM =$(PERL) $(EPICS_BASE_HOST_BIN)/rm.pl -f +MKDIR=$(PERL) $(EPICS_BASE_HOST_BIN)/mkdir.pl +RMDIR=$(PERL) $(EPICS_BASE_HOST_BIN)/rm.pl -rf +CHMOD=echo +WHAT=echo +ECHO=echo # overrides defines in CONFIG_SITE that don't fit Tornado # diff --git a/config/CONFIG.WIN32 b/config/CONFIG.WIN32 index 53de70c0a..284b633ea 100644 --- a/config/CONFIG.WIN32 +++ b/config/CONFIG.WIN32 @@ -27,19 +27,23 @@ HOME = $(HOMEDRIVE)$(HOMEPATH) BUILD_TYPE=Host # -# optimize/debug flags +# global WIN32 optimize/debug flag +# (set this to NO in $(HOME)/EPICS_CONFIG if you need to compile +# in debug info) # HOST_OPT = YES + # -Ox : maximum optimizations # -Wn ; use this warning level (all warnings at level 4) -CXX_OPT_FLAGS_YES = -Ox -W1 +CXX_OPT_FLAGS_YES = -Ox -W3 # -Zi : include debugging info in object files -CXX_OPT_FLAGS_NO = -Zi -W1 +CXX_OPT_FLAGS_NO = -Zi -W3 -D_DEBUG CXX_OPT_FLAGS = $(CXX_OPT_FLAGS_$(HOST_OPT)) LINK_OPT_FLAGS_YES = LINK_OPT_FLAGS_NO = -debug LINK_OPT_FLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT)) + # to identify the general architecture class: # should be BSD, SYSV, WIN32, ... # is: WIN32, sun4, hpux, linux, ... @@ -55,13 +59,14 @@ WIN32=1 YACC = $(EYACC) LEX = $(ELEX) CC = cl -nologo -CP = $(PERL) $(EPICS_BASE)/src/tools/cp.pl -MV = $(PERL) $(EPICS_BASE)/src/tools/mv.pl -RM = $(PERL) $(EPICS_BASE)/src/tools/rm.pl -f -MKDIR = $(PERL) $(EPICS_BASE)/src/tools/mkdir.pl -RMDIR = $(PERL) $(EPICS_BASE)/src/tools/rm.pl -rf +CP = $(PERL) $(INSTALL_BIN)/cp.pl +MV = $(PERL) $(INSTALL_BIN)/mv.pl +RM = $(PERL) $(INSTALL_BIN)/rm.pl -f +MKDIR = $(PERL) $(INSTALL_BIN)/mkdir.pl +RMDIR = $(PERL) $(INSTALL_BIN)/rm.pl -rf EXE=.exe OBJ=.obj +ECHO = echo # Include files HOST_INCLUDES = -I. -I.. $(USR_INCLUDES) -I$(INSTALL_INCLUDE) \ @@ -77,29 +82,32 @@ HOST_INCLUDES = -I. -I.. $(USR_INCLUDES) -I$(INSTALL_INCLUDE) \ # -MDd : use MSVCRTD (run-time as DLL, multi-thread support) # this also calls for _DLL # -OP_SYS_FLAGS:=-MDd $(CXX_OPT_FLAGS) -VMG -VMV -DWIN32 -D_WIN32 -D_DEBUG -D_WINDOWS \ +# Unable to use -Za to turn on __STDC__ because there are +# non-standard constructs in winnt.h etc +# +OP_SYS_FLAGS = -MDd -VMG -VMV -DWIN32 -D_WIN32 -D_WINDOWS \ -D_X86_ -D_NTSDK -D_DLL -D__STDC__=0 -HOST_LDLIBS:=user32.lib kernel32.lib wsock32.lib advapi32.lib winmm.lib -HOST_LDFLAGS:=-nologo -libpath:$(EPICS_BASE_LIB) +HOST_LDLIBS = user32.lib kernel32.lib wsock32.lib advapi32.lib winmm.lib +HOST_LDFLAGS = -nologo -libpath:$(EPICS_BASE_LIB) # Files and flags needed to link DLLs (used in RULES.Host) # # Strange but seems to work without: WIN32_DLLFLAGS should contain # an entry point: # '-entry:_DllMainCRTStartup$(DLLENTRY)' -DLLENTRY:=@12 +DLLENTRY = @12 # yes, for MS it's I386 for 386, 486, Pentium! # don't mix this with VxWorks which has different BSPs for [34]86 ! -WIN32_DLLFLAGS:=$(HOST_LDFLAGS) $(HOST_LDLIBS)\ +WIN32_DLLFLAGS = $(HOST_LDFLAGS) $(HOST_LDLIBS)\ -subsystem:windows -dll -incremental:no $(LINK_OPT_FLAGS) -machine:I386 ARCH_DEP_CFLAGS = ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS) -HOST_CFLAGS = $(HOST_SFLAGS) $(HOST_INCLUDES) $(OP_SYS_FLAGS) +HOST_CFLAGS = $(HOST_SFLAGS) $(HOST_INCLUDES) $(OP_SYS_FLAGS) $(CXX_OPT_FLAGS) HOST_CXXFLAGS = $(HOST_CFLAGS) @@ -126,7 +134,7 @@ COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c # Problem: MS Visual C++ does not recognize *.cc as C++ source, # we have to compile xx.cc using the flag -Tp xx.cc, # i.e. -Tp has to be immediately before the source file name -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -DEXPL_TEMPL -c -Tp +COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -Tp LINK.c=link $(LINK_OPT_FLAGS) $(LDFLAGS) -out:$@ LINK.cc=$(LINK.c) diff --git a/config/CONFIG_BASE b/config/CONFIG_BASE index 330fc4363..75a610d0a 100644 --- a/config/CONFIG_BASE +++ b/config/CONFIG_BASE @@ -46,10 +46,11 @@ EPICS_BASE = $(INSTALL_LOCATION) # # this speeds up the build by turning off implicit rules search -# -.PHONY:: $(EPICS_BASE)/config/CONFIG -.PHONY:: $(EPICS_BASE)/config/CONFIG.* $(EPICS_BASE)/config/CONFIG_* -.PHONY:: $(EPICS_BASE)/config/RULES.* $(EPICS_BASE)/config/RULES_* .DEPENDS -.PHONY:: $(HOME)/.EPICS_CONFIG $(HOME)/.EPICS_CONFIG.$(HOST_ARCH) +# for EPICS Makefiles (which are not created from other files) +.PHONY:: $(TOP)/config/CONFIG +.PHONY:: $(TOP)/config/CONFIG.* $(TOP)/config/CONFIG_* +.PHONY:: $(TOP)/config/RULES.* $(TOP)/config/RULES_* .DEPENDS +.PHONY:: $(HOME)/EPICS_CONFIG $(HOME)/EPICS_CONFIG.$(HOST_ARCH) .PHONY:: ../Makefile.Vx ../Makefile.Unix ../Makefile.Host Makefile + diff --git a/config/CONFIG_COMMON b/config/CONFIG_COMMON index 1a5bd1594..35fdabbd1 100644 --- a/config/CONFIG_COMMON +++ b/config/CONFIG_COMMON @@ -38,22 +38,25 @@ EPICS_EXTENSIONS_TEMPLATES = $(EPICS_EXTENSIONS)/templates DIVIDER = . +EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(HOST_ARCH) + + # private versions of lex/yacc from EPICS -EYACC = $(EPICS_BASE)/bin/$(HOST_ARCH)/antelope$(EXE) -ELEX = $(EPICS_BASE)/bin/$(HOST_ARCH)/e_flex$(EXE) -S$(EPICS_BASE_INCLUDE)/flex.skel.static +EYACC = $(EPICS_BASE_HOST_BIN)/antelope$(EXE) +ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(EXE) -S$(EPICS_BASE_INCLUDE)/flex.skel.static # Default for perl if it's on the PATH, # otherwise override this in e.g. CONFIG_SITE PERL=perl # install from EPICS -INSTALL = $(PERL) $(EPICS_BASE)/bin/$(HOST_ARCH)/installEpics.pl +INSTALL = $(PERL) $(EPICS_BASE_HOST_BIN)/installEpics.pl INSTALL_PRODUCT = $(INSTALL) # dbtools from EPICS # state notation language compiler (installed from base/src/sequencer) -SNC = $(EPICS_BASE)/bin/$(HOST_ARCH)/snc +SNC = $(EPICS_BASE_HOST_BIN)/snc # vxWorks definitions VX_CONFIG_DIR = $(VX_DIR)/config diff --git a/config/RULES_ARCHS b/config/RULES_ARCHS index ffe5bc5f1..d1f8dc714 100644 --- a/config/RULES_ARCHS +++ b/config/RULES_ARCHS @@ -2,7 +2,7 @@ # $Id$ # # EPICS RULES_ARCH -# by Matthew Needes and Mike Bordua and Janet Andersoni and Jeff Hill +# by Matthew Needes and Mike Bordua and Janet Anderson and Jeff Hill # all:: install @@ -51,11 +51,11 @@ $(crossActionArchTargets) : $(crossArchs) : endif -$(hostDirs) : $(EPICS_BASE)/config/makeMakefile.pl - $(PERL) $(EPICS_BASE)/config/makeMakefile.pl $@ $(BUILD_TYPE) +$(hostDirs) : + $(PERL) $(INSTALL_BIN)/makeMakefile.pl $@ $(BUILD_TYPE) -$(crossDirs) : $(EPICS_BASE)/config/makeMakefile.pl - $(PERL) $(EPICS_BASE)/config/makeMakefile.pl $@ Vx +$(crossDirs) : + $(PERL) $(INSTALL_BIN)/makeMakefile.pl $@ Vx # # host/cross action targets diff --git a/config/RULES_DIRS b/config/RULES_DIRS index feb07984f..533d3d3fb 100644 --- a/config/RULES_DIRS +++ b/config/RULES_DIRS @@ -30,11 +30,11 @@ rebuild:: clean all $(DIRS) $(dirActionTargets) $(dirArchTargets)$(dirActionArchTargets) :: $(MAKE) -C $(dirPart) $(actionArchPart) -$(ARCHS) $(installArchTargets) :%: \ +$(ARCHS) $(installArchTargets) ::%: \ $(foreach dir, $(DIRS), $(dir)$(DIVIDER)inc) \ $(foreach dir, $(DIRS), $(dir)$(DIVIDER)%) -$(ACTIONS) $(actionArchTargets) :%: \ +$(ACTIONS) $(actionArchTargets) ::%: \ $(foreach dir, $(DIRS), $(dir)$(DIVIDER)%)