# # Makefile for Hercules S/370, ESA/390 and z/Architecture emulator # modified to build hercules under windows (VB) # modified to build external GUI compatible version under Windows (Fish) # modified to be useful (hopefully) for Linux AND windows (VB) # Added LINKMAP option (Fish) # Support for version >= 1.3.3 of Cygwin = built-in pthreads (Fish) # Added Malcolm Beattie's dasdcat program (rbowler) # #### VERSION ##### ifndef VER VER=2.15a endif # Change the following to yes/no depending on whether # or not you're using Cygwin version 1.3.3 or higher CYGWIN_133_OR_HIGHER=yes # Change the following to yes/no to # generate a link map for debugging LINKMAP=no WIN=NO THEOS=$(OSTYPE) ifeq ($(THEOS),cygwin) WIN=yes endif ifndef HOST_ARCH HOST_ARCH=pentium endif VERSION = $(VER)_$(HOST_ARCH) # Set the default directory where you want to install the Hercules executables somewhere # besides /usr/bin. The $PREFIX (which defaults to nothing) can be # overridden in the make command line, as in "PREFIX=/foo make install" # (the directory is only used when installing). ifeq ($(WIN),yes) DESTDIR = $(PREFIX)/hercules2 else DESTDIR = $(prefix)/usr/bin endif # The default installation directory can be overridden by the DEST= keyword # when executing the make utility ifndef DEST DEST = $(DESTDIR) endif # Standard compiler flags used for all architectures CFLAGS = -Wall CFLAGS += -fomit-frame-pointer CFLAGS += -DVERSION=$(VERSION) CFLAGS += -DNO_IEEE_SUPPORT #CFLAGS += -DNO_ATTR_REGPARM ifeq ($(WIN),yes) ifeq ($(CYGWIN_133_OR_HIGHER),yes) CC = gcc else # Directory where the pthreads-win32 library was installed. PTHREADS_W32DIR = /usr CC = gcc -I$(PTHREADS_W32DIR)/Pthreads endif CC = gcc endif ifeq ($(WIN),yes) CFLAGS += -DWIN32 CFLAGS += -DNO_BYTESWAP_H CFLAGS += -DNO_SETUID CFLAGS += -DHAVE_U_INT CFLAGS += -DHAVE_SETRESUID endif #set compiler flags depending on HOST_ARCH ifeq ($(HOST_ARCH),i386) CFLAGS += -O3 CFLAGS += -malign-double CFLAGS += -DNO_ASM_BYTESWAP endif ifeq ($(HOST_ARCH),i586) CFLAGS += -O3 CFLAGS += -malign-double CFLAGS += -march=pentium endif ifeq ($(HOST_ARCH),pentium) CFLAGS += -O3 CFLAGS += -malign-double CFLAGS += -march=pentium endif ifeq ($(HOST_ARCH),i686) CFLAGS += -O3 CFLAGS += -malign-double CFLAGS += -march=pentiumpro endif ifeq ($(HOST_ARCH),pentiumpro) CFLAGS += -O3 CFLAGS += -malign-double CFLAGS += -march=pentiumpro endif ifeq ($(HOST_ARCH),alpha) CFLAGS += -O2 CFLAGS += -DNO_ASM_BYTESWAP endif ifeq ($(HOST_ARCH),other) CFLAGS += -O3 CFLAGS += -DNO_ASM_BYTESWAP endif # For Linux/390 use: #CFLAGS += -DNO_ASM_BYTESWAP # # The sigabend handler has not yet been tested with windows *JJ CFLAGS += -DNO_SIGABEND_HANDLER ifeq ($(WIN),yes) ifeq ($(CYGWIN_133_OR_HIGHER),yes) LFLAGS = else LFLAGS = -L$(PTHREADS_W32DIR)/DLL -lpthreadw32 endif else LFLAGS = -lpthread endif # Comment out the line below to build a console-mode only # (i.e. NON-external GUI compatible) version of Hercules # # Note: the external GUI compatible version of Hercules # (which is the default) can be run in both console mode # or external GUI mode, whereas a NON-external GUI compatible # version can ONLY be run in console (non-GUI) mode. CFLAGS += -DEXTERNALGUI # Change the value below to YES to enable compresion # to NO to disable compression CCKD=YES # Change the value below to YES to use bzip2 compression # to NO to use standard compression BZIP2=YES ifeq ($(CCKD),YES) LFLAGS += -lz else CFLAGS += -DNO_CCKD endif ifeq ($(BZIP2),YES) CFLAGS += -DCCKD_BZIP2 CFLAGS += -DHET_BZIP2 LFLAGS += -lbz2 endif ifeq ($(LINKMAP),no) else LFLAGS += -Xlinker -Map -Xlinker hercules.map endif EXEFILES = hercules \ dasdinit \ dasdisup \ dasdload \ dasdls \ dasdcat \ dasdpdsu \ tapecopy \ tapemap \ tapesplt \ cckd2ckd \ cckdcdsk \ ckd2cckd \ cckdcomp \ hetget \ hetinit \ hetmap \ hetupd \ dmap2hrc ifeq ($(WIN),yes) else EXEFILES += hercifc endif TARFILES = makefile \ *.c \ *.h \ hercules.cnf \ tapeconv.jcl \ util/dasdlist \ html \ zzsa.cnf \ zzsacard.bin HRC_OBJS = impl.o \ config.o \ panel.o \ version.o \ ipl.o \ assist.o \ dat.o \ stack.o \ cpu.o \ vstore.o \ general1.o \ general2.o \ plo.o \ control.o \ io.o \ decimal.o \ service.o \ opcode.o \ diagnose.o \ diagmssf.o \ vm.o \ channel.o \ ckddasd.o \ fbadasd.o \ tapedev.o \ cardrdr.o \ cardpch.o \ printer.o \ console.o \ external.o \ float.o \ ctcadpt.o \ trace.o \ machchk.o \ vector.o \ xstore.o \ cmpsc.o \ sie.o \ timer.o \ esame.o \ cckddasd.o \ cckdcdsx.o \ parser.o \ hetlib.o \ ieee.o ifeq ($(WIN),yes) else HIFC_OBJ = hercifc.o version.o endif DIN_OBJS = dasdinit.o dasdutil.o version.o DIS_OBJS = dasdisup.o dasdutil.o version.o DLD_OBJS = dasdload.o dasdutil.o version.o DLS_OBJS = dasdls.o dasdutil.o version.o DCA_OBJS = dasdcat.o dasdutil.o version.o DPU_OBJS = dasdpdsu.o dasdutil.o version.o TCY_OBJS = tapecopy.o version.o TMA_OBJS = tapemap.o version.o TSP_OBJS = tapesplt.o version.o CCHK_OBJ = cckdcdsk.o version.o COMP_OBJ = cckdcomp.o cckdcdsx.o version.o C2CC_OBJ = ckd2cckd.o version.o CC2C_OBJ = cckd2ckd.o version.o HGT_OBJS = hetget.o hetlib.o sllib.o version.o HIN_OBJS = hetinit.o hetlib.o sllib.o version.o HMA_OBJS = hetmap.o hetlib.o sllib.o version.o HUP_OBJS = hetupd.o hetlib.o sllib.o version.o D2H_OBJS = dmap2hrc.o version.o HEADERS = feat370.h \ feat390.h \ feat900.h \ featall.h \ featchk.h \ features.h \ esa390.h \ opcode.h \ hercules.h \ inline.h \ dat.h \ vstore.h \ byteswap.h \ dasdblks.h \ hetlib.h \ version.h #HEADERS = esa390.h version.h inline.h all: $(EXEFILES) hercules: $(HRC_OBJS) $(CC) -o hercules $(HRC_OBJS) $(LFLAGS) $(HRC_OBJS): %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -o $@ -c $< ifeq ($(WIN),yes) else hercifc: $(HIFC_OBJ) $(CC) -o hercifc $(HIFC_OBJ) endif dasdinit: $(DIN_OBJS) $(CC) -o dasdinit $(DIN_OBJS) dasdisup: $(DIS_OBJS) $(CC) -o dasdisup $(DIS_OBJS) dasdload: $(DLD_OBJS) $(CC) -o dasdload $(DLD_OBJS) dasdls: $(DLS_OBJS) $(CC) -o dasdls $(DLS_OBJS) dasdcat: $(DCA_OBJS) $(CC) -o dasdcat $(DCA_OBJS) dasdpdsu: $(DPU_OBJS) $(CC) -o dasdpdsu $(DPU_OBJS) tapecopy: $(TCY_OBJS) $(CC) -o tapecopy $(TCY_OBJS) tapemap: $(TMA_OBJS) $(CC) -o tapemap $(TMA_OBJS) tapesplt: $(TSP_OBJS) $(CC) -o tapesplt $(TSP_OBJS) hetget: $(HGT_OBJS) $(CC) -o hetget $(HGT_OBJS) $(LFLAGS) hetinit: $(HIN_OBJS) $(CC) -o hetinit $(HIN_OBJS) $(LFLAGS) hetmap: $(HMA_OBJS) $(CC) -o hetmap $(HMA_OBJS) $(LFLAGS) hetupd: $(HUP_OBJS) $(CC) -o hetupd $(HUP_OBJS) $(LFLAGS) dmap2hrc: $(D2H_OBJS) $(CC) -o dmap2hrc $(D2H_OBJS) $(LFLAGS) dasdinit.o: dasdinit.c $(HEADERS) dasdblks.h dasdisup.o: dasdisup.c $(HEADERS) dasdblks.h dasdload.o: dasdload.c $(HEADERS) dasdblks.h dasdls.o: dasdls.c $(HEADERS) dasdblks.h dasdcat.o: dasdcat.c $(HEADERS) dasdblks.h dasdpdsu.o: dasdpdsu.c $(HEADERS) dasdblks.h dasdutil.o: dasdutil.c $(HEADERS) dasdblks.h tapecopy.o: tapecopy.c $(HEADERS) tapemap.o: tapemap.c $(HEADERS) tapesplt.o: tapesplt.c $(HEADERS) cckdcdsk: $(CCHK_OBJ) $(CC) -o cckdcdsk $(CCHK_OBJ) $(LFLAGS) cckdcomp: $(COMP_OBJ) $(CC) -o cckdcomp $(COMP_OBJ) $(LFLAGS) cckd2ckd: $(CC2C_OBJ) $(CC) -o cckd2ckd $(CC2C_OBJ) $(LFLAGS) ckd2cckd: $(C2CC_OBJ) $(CC) -o ckd2cckd $(C2CC_OBJ) $(LFLAGS) hetget.o: hetget.c hetlib.h sllib.h hetinit.o: hetinit.c hetlib.h sllib.h hetmap.o: hetmap.c hetlib.h sllib.h hetupd.o: hetupd.c hetlib.h sllib.h dmap2hrc.o: dmap2hrc.c $(HEADERS) cckd: cckd2ckd cckdcdsk ckd2cckd cckdcomp clean: rm -rf $(EXEFILES) *.o tar: clean (cd ..; tar cvzf hercules-$(VERSION).tar.gz hercules-$(VERSION)) install: $(EXEFILES) mkdir -p $(DEST) ifeq ($(WIN),yes) cp *.exe $(DEST) rm -f $(DEST)/dasdlist* cp util/dasdlist* $(DEST) else cp $(EXEFILES) $(DEST) cp util/dasdlist $(DEST) chown root $(DEST)/hercifc chmod 0751 $(DEST)/hercifc chmod +s $(DEST)/hercifc rm hercifc endif