Use GNU target triplets to specify build targets. stx-8.0.0
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 15 Aug 2017 10:44:12 +0100
branchstx-8.0.0
changeset 169 f9f519bb10b6
parent 168 37f3dd667f71
child 170 c0383fb4e51f
Use GNU target triplets to specify build targets. This aligns the code a little with rest of the world and makes it easier when it comes to build 3rd party libraries using autotools - one can pass the value `BUILD_TARGET` to `configure` script `--target` option.
Jenkinsfile.rb
makelib/config-i686-pc-linux-gnu.make
makelib/config-i686.make
makelib/config-linux-gnu.make
makelib/config-linux-i386.make
makelib/config-linux-x86_64.make
makelib/config-linux.make
makelib/config-x86_64-pc-linux-gnu.make
makelib/config-x86_64.make
makelib/config.make
makelib/definitions-w.make
makelib/definitions.make
makelib/rules-w.make
pipeline.groovy
rakelib/compile.rake
rakelib/setup.rake
rakelib/support.rb
specs/stx-jv.rbspec
--- a/Jenkinsfile.rb	Mon Aug 14 21:08:20 2017 +0100
+++ b/Jenkinsfile.rb	Tue Aug 15 10:44:12 2017 +0100
@@ -15,9 +15,9 @@
       self.class.const_set('PROJECT', value)  
     end
 
-    opts.on('-a', '--arch ARCH', "Arcitecture to build for. Overrides architecture specified by the environment variable.") do | value |
-      ENV['ARCH'] = value
-      self.class.const_set('ARCH', value)  
+    opts.on('-t', '--build-target BUILD_TARGET', "Target to build for in form of GNU target triplet (such as 'x86_64-pc-linux-gnu'). Overrides build target specified by the environment variable.") do | value |
+      ENV['BUILD_TARGET'] = value
+      self.class.const_set('BUILD_TARGET', value)  
     end
 
     opts.on('-r', '--repository-set REPOSET', "Repository set to use. Overrides repository set specified by the environment variable.") do | value |
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-i686-pc-linux-gnu.make	Tue Aug 15 10:44:12 2017 +0100
@@ -0,0 +1,67 @@
+#
+# Definitions for target i686-pc-linux-gnu.
+#
+# based on eXept's:
+#
+# linux-elf/amd64_mode32: cpu: athlon64 in 32 bit mode os:linux-ELF options: +commonSymbol
+#
+#------------------ start of linux/amd64_mode32 ---------------------
+#
+# $Header: /cvs/stx/stx/configurations/linux-elf/amd64_mode32/defines,v 1.25 2016-03-17 22:32:46 stefan Exp $
+
+include $(MAKELIB)/config-linux-gnu.make
+include $(MAKELIB)/config-i686.make
+
+COMMONSYMBOLS=+commonSymbols
+SAVECOMMONSYMBOLS=+saveCommonSymbols
+STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
+STC_LEXLIB=libfl/libfl_pic.a
+# STC_LEXLIB=-lfl
+
+DEFS += -DELF
+DLDEFS=-DHAS_DLOPEN
+
+
+
+AS_CC=as
+AS_CC_CFLAG=
+ASFLAGS=--32
+
+
+# LD=ld -m elf_i386
+# STC_LD=ld -m elf_i386
+STC_LDFLAGS=$(CCCONFOPT) -L/usr/lib -Llib -L/usr/local/lib -L/usr/X11/lib
+CLASSLIB_LD=ld -m elf_i386
+LDFLAGS=$(CCCONFOPT) -Llib -L/usr/local/lib -L/usr/X11/lib -L/usr/lib \
+	-Wl,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib'
+LD_REL_FLAG=-r
+
+#OPTIONAL_DL_LIB=-ldl
+#OPTIONAL_LIBDL_TARGET=libdld
+
+TARGET_RULE_EXTENSION=_shared
+O_EXT=.so
+# name of object files in binary directory
+BIN_O=.so
+
+MAKE_ZLIB_ARG= -f Makefile.amd64_mode32
+MAKE_BZ2LIB_ARG= -f Makefile.amd64_mode32
+
+# We have problems with FFI as of 2008-12-01
+# Remove the follwoing lines when the problems have been fixed
+#FFI_OBJS=
+#OPTIONAL_HAVE_FFI_ARG=
+#OPTIONAL_FFI_TARGET_IN_LIBRUN=
+# END FFI kludge
+FFI_CFLAGS=$(CCCONFOPT)
+#------------------ end of linux-elf/amd64_mode32 ---------------------
+O_RULE=__STANDARD_O_RULE__
+EXTRA_LIBS=-ldl -lX11 -lXext
+
+# Following is a workaround for Debian / Ubuntu boxes.
+#
+ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so),)
+ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so.2),/usr/lib/i386-linux-gnu/libXft.so.2)
+LIB_XFT=-l:libXft.so.2 -l:libfontconfig.so.1
+endif
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-i686.make	Tue Aug 15 10:44:12 2017 +0100
@@ -0,0 +1,6 @@
+#
+# Common definition for i686 arch
+#
+CPU_INTERN_H=cpu_i386.h
+DEFS += -D__amd64_mode32__
+CCCONFOPT = -m32
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-linux-gnu.make	Tue Aug 15 10:44:12 2017 +0100
@@ -0,0 +1,285 @@
+#------------------ start of linux-elf/COMMON/defines ---------------------
+#
+# $Header: /cvs/stx/stx/configurations/linux-elf/COMMON/defines,v 1.92 2016-07-19 19:56:46 stefan Exp $
+include $(MAKELIB)/config.make
+
+CCARCHCOMMONOPT=-DELF
+#RELOCINSTVARS=+relocInstvars
+
+INTERN_H=linuxIntern.h
+CPUINTERN_H=$(INCLUDE)/linuxIntern.h
+
+#OPTIONAL_DL_LIB=-ldl
+#OPTIONAL_LIBDL_TARGET=libdld
+
+TARGET_RULE_EXTENSION=_shared
+O_EXT=.so
+# name of object files in binary directory
+BIN_O=.so
+
+MAKEFILE_EXTENSION=linux-elf
+TARGET_RULE_EXTENSION=_shared
+# ALL_TARGET=LINUX_i386_ELF
+
+MAKEFLAGS += --no-print-directory
+MAKE_INCLUDE=include
+INSTALL=install
+INSTALL_BIN_CMD=install -s -m 0755
+INSTALL_SCRIPT_CMD=install -m 0755
+COMPRESSOR=gzip
+COMPRESSED_FILETYPE=targz
+SETUP_RULE=setup_linux
+
+CC=gcc
+
+#
+# * `-fno-strict-aliasing` since it's almost impossible to write a memory
+#   manager without breaking C's aliasing rules. Better be on a safe side.
+#   Nice post about these things: http://blog.regehr.org/archives/1307
+#
+# * `-Wno-strict-aliasing` to turn of warnings about breaking aliasing rules.
+#   While one would think these wanings should be turned off when
+#   `-fno-strict-aliasing` is passed, apparently some GCCs bark anyway.
+#
+# * `-fno-stack-protector` is (was) required on Ubuntu brands where it's
+#   by default on. Smalltalk/X green thread implementation does not wotk
+#   well with it.
+#
+# * `-U_FORTIFY_SOURCE` is (was) required on Gentoo as a workaround for failing
+#   longjmp check when _FORTIFY_SOURCE is defined (which is enabled by default
+#   on Gentoo. Remove when fixed.
+#
+OPT=-fPIC -O2 -fno-strict-aliasing -Wno-strict-aliasing -fno-stack-protector -ggdb3 -pipe -U_FORTIFY_SOURCE
+
+STC_LEXLIB=
+
+OS=-DLINUX
+
+FFI_ARCH=x86
+FFI_CFLAGS=
+FFI_DIR=libffi-3.0.10rc8
+FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
+OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
+OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
+FFI_CC="gcc -m32"
+FFI_LD='ld -m elf_i386'
+
+OBJNAME=.o
+BIN_O=.so
+O_EXT=.so
+SA_EXT=.so
+SO_NAME=.so
+
+#
+# use static librt for clock_gettime().
+# dynamic librt causes libpthread to be loaded that does not
+# work with stx' stack layout
+#
+
+OTHERLIBS=-ldl -Wl,-Bstatic,-lrt,-Bdynamic
+OTHERLIBS=-ldl -lrt
+OTHERLIBS=-ldl -lrt -lc
+STATIC_OTHERLIBS=
+LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
+	-Wl,-z,now,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib',--wrap=memcpy
+
+SPECIAL_LIBRUN_RULE=allLINUX
+LIBRUNTARGET=librun.so
+
+FORCE_LINK_LIBRUN=1
+
+# mhm - these should now only be in libview!
+LIBVIEW_EXTRA_TARGETS=$(WORKSTAT1).so $(WORKSTAT2).so
+
+ARCH_LIBSNMP=$(TOP)/libsnmp
+ARCH_CLASSLIBDIRS=$(ARCH_LIBSNMP)
+
+#
+# where are the X libraries if we need them:
+#
+XDEFS=-DSHAPE -DXINERAMA -DXFT -DHAVE_FONTCONFIG
+XINCLUDE+=$(shell pkg-config --cflags xft)
+
+LIB_X=-lX11
+LIB_XEXT=-lXext
+LIB_XT= -lXt
+LIB_XAW=-lXaw
+LIB_XMU=-lXmu
+LIB_XMU=-lXt
+LIB_XINERAMA=-lXinerama
+LIB_XFT=$(shell pkg-config --libs xft)
+
+EXTRA_LIBS= -lX11 -lXext
+STATIC_EXTRA_LIBS= -lX11 -lXext
+
+X_LIB_DIR=/usr/X11/lib
+JPEGLIB_LD_ARG=
+LIBJPEG_DIR=$(TOP)/support/libjpeg-9
+JPEG_INCLUDE=-I$(LIBJPEG_DIR)
+
+LIBJPEG=$(LIBJPEG_DIR)/.libs/libjpeg.a
+LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/.libs/libjpeg.a
+LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/.libs/libjpeg.a
+
+#
+# a netsnmp library
+#
+# if already in /usr/lib:
+# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
+# STATIC_LINK_LIB_NETSNMP=
+# TARGET_LIB_NETSNMP=
+#
+# if a local one should be built and used:
+DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a -lrt
+STATIC_LINK_LIB_NETSNMP=
+TARGET_LIB_NETSNMP=snmplib
+
+
+STATIC_LIB_X   =$(X_LIB_DIR)/libX11.a
+STATIC_LIB_XEXT=$(X_LIB_DIR)/libXext.a
+STATIC_LIB_XT  =$(X_LIB_DIR)/libXt.a
+STATIC_LIB_XAW =$(X_LIB_DIR)/libXaw.a
+STATIC_LIB_XMU =$(X_LIB_DIR)/libXmu.a
+
+# the following defs are for using the system's usb lib (only needed in some apps);
+USB_LIB_DIR=
+USB_LIB_ARG=-lusb
+USB_LIB_DIR_ARG=-L/usr/lib
+USB_MAKE_TARGET=
+
+MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
+MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin260 -lusb
+
+NOSTDLIB=-nostdlib
+
+#
+# an extra rule for shared objects
+#
+.SUFFIXES: .a .o .so
+# use -nostdlib in combination with -lc -lgcc: we actually use some functions (like fstat) from libc (-lc)
+# and gcc (-lgcc) provides some low level routines that should be around
+.o.so:
+	@-rm -f $*.so
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+
+.a.so:
+	rm -f $*.so
+	rm -rf tmp.a.so
+	mkdir tmp.a.so
+	cd tmp.a.so; $(AR) x ../$*.a
+	@-rm -f $*.so
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so tmp.a.so/*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+	rm -rf tmp.a.so
+
+SHAREDLIBRULE=linuxSharedLib
+linuxSharedLib:
+	@-rm -f $(LIB)
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $(LIB) $(OBJS) $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+
+#.st.s2:
+#       $(STC) $(STCFLAGS) $(CFLAGS) -C $*.st
+#       $(CC) $(CFLAGS) -S $*.c
+#       @-echo " stripping off useless .align directives ..."
+#       sed "/.align 4/d" < $*.s > $*.s2
+
+#.SUFFIXES: .s2 .s3
+#
+#.s2.s3:
+#       @-echo "   removing useless jumps ..."
+#       awk -f $(TOP)/rules/i386.script.awk < $*.s2 > $*.s3
+
+#
+# extra rules for space-optimized/speed-optimized modules modules
+#
+.SUFFIXES: .st .spc .spd
+
+.st.spc:
+	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPACEOPT_O_RULE__
+
+.st.spd:
+	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPEEDOPT_O_RULE__
+
+VERYBIG_STFILE_RULE=__VERYBIG_RULE__
+__VERYBIG_RULE__:
+	$(MAKE) $(O_RULE) STFILE=$(BIG_FILE) CC="$(CC)" STC_OPT="$(STC_OPT) -Os" OPT="$(OPT) -Os" SEPINITCODE="$(SEPINITCODE)"
+
+LONGNAME_RULE=__NORMAL_RULE2__
+__NORMAL_RULE2__:
+	$(MAKE) $(O_RULE) STFILE=$(LONGNAME_FILE) CC="$(CC)" STC_OPT="$(STC_OPT)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)"
+
+
+#AWK_VERBOSE=1
+AWK_DIFF=
+AWK_FIX=$(TOP)/rules/i386fixELF.awk
+
+SPACEOPT_O_RULE=__SPACEOPT_O_RULE__
+__SPACEOPT_O_RULE__:
+	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
+	@-if [ -f $(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff $(STFILE).s $(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
+		tail -5 $(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
+	fi
+	@-if [ -f i_$(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff i_$(STFILE).s i_$(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
+		tail -5 i_$(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
+	fi
+	@if [ "$(KEEP)" != "y" ]; then \
+	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
+	fi
+
+
+.SUFFIXES: .st .s2
+
+.st.s2:
+	@$(MAKE) $(SPEEDOPT_O_RULE) STCOPT="$(STCOPT)" KEEP=y STFILE=$* SEPINITCODE="$(SEPINITCODE)"
+
+SPEEDOPT_O_RULE=__SPEEDOPT_O_RULE__
+__SPEEDOPT_O_RULE__:
+	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
+	@-if [ -f $(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff $(STFILE).s $(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
+		tail -5 $(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
+	fi
+	@-if [ -f i_$(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff i_$(STFILE).s i_$(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
+		tail -5 i_$(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
+	fi
+	@if [ "$(KEEP)" != "y" ]; then \
+	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
+	fi
+
+O_RULE=$(SPEEDOPT_O_RULE)
+
+#------------------ end of linux-elf/COMMON/defines ---------------------
--- a/makelib/config-linux-i386.make	Mon Aug 14 21:08:20 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-# linux-elf/amd64_mode32: cpu: athlon64 in 32 bit mode os:linux-ELF options: +commonSymbol
-#
-#------------------ start of linux/amd64_mode32 ---------------------
-#
-# $Header: /cvs/stx/stx/configurations/linux-elf/amd64_mode32/defines,v 1.25 2016-03-17 22:32:46 stefan Exp $
-
-include $(MAKELIB)/config-linux.make
-
-CONF=config-linux-i386
-
-COMMONSYMBOLS=+commonSymbols
-SAVECOMMONSYMBOLS=+saveCommonSymbols
-STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
-STC_LEXLIB=libfl/libfl_pic.a
-# STC_LEXLIB=-lfl
-
-DEFS=-D__amd64_mode32__ -DELF
-DLDEFS=-DHAS_DLOPEN
-
-CCCONFOPT=-m32
-
-AS_CC=as
-AS_CC_CFLAG=
-ASFLAGS=--32
-
-
-# LD=ld -m elf_i386
-# STC_LD=ld -m elf_i386
-STC_LDFLAGS=$(CCCONFOPT) -L/usr/lib -Llib -L/usr/local/lib -L/usr/X11/lib
-CLASSLIB_LD=ld -m elf_i386
-LDFLAGS=$(CCCONFOPT) -Llib -L/usr/local/lib -L/usr/X11/lib -L/usr/lib \
-	-Wl,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib' 
-LD_REL_FLAG=-r
-
-#OPTIONAL_DL_LIB=-ldl
-#OPTIONAL_LIBDL_TARGET=libdld
-
-TARGET_RULE_EXTENSION=_shared
-O_EXT=.so
-# name of object files in binary directory
-BIN_O=.so
-
-MAKE_ZLIB_ARG= -f Makefile.amd64_mode32
-MAKE_BZ2LIB_ARG= -f Makefile.amd64_mode32
-
-# We have problems with FFI as of 2008-12-01
-# Remove the follwoing lines when the problems have been fixed
-#FFI_OBJS=
-#OPTIONAL_HAVE_FFI_ARG=
-#OPTIONAL_FFI_TARGET_IN_LIBRUN=
-# END FFI kludge
-FFI_CFLAGS=$(CCCONFOPT)
-#------------------ end of linux-elf/amd64_mode32 ---------------------
-O_RULE=__STANDARD_O_RULE__
-EXTRA_LIBS=-ldl -lX11 -lXext
-
-# Following is a workaround for Debian / Ubuntu boxes. 
-# 
-ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so),) 
-ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so.2),/usr/lib/i386-linux-gnu/libXft.so.2) 
-LIB_XFT=-l:libXft.so.2 -l:libfontconfig.so.1
-endif
-endif
--- a/makelib/config-linux-x86_64.make	Mon Aug 14 21:08:20 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-# linux-elf/x86_64: cpu: x86_64 in 64 bit mode os:linux-ELF options: +commonSymbol
-#
-#------------------ start of linux/x86_64 ---------------------
-#
-# $Header: /cvs/stx/stx/configurations/linux-elf/x86_64/defines,v 1.18 2016-08-29 08:52:44 stefan Exp $
-
-include $(MAKELIB)/config-linux.make
-
-CONF=config-linux-x86_64
-
-COMMONSYMBOLS=+commonSymbols
-SAVECOMMONSYMBOLS=+saveCommonSymbols
-STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
-STC_LEXLIB=-lfl
-
-CPU_INTERN_H=cpu_x86_64.h
-
-DEFS=-D__x86_64__
-CCCONFOPT=-m64 -fPIC
-
-DLDEFS=-DHAS_DLOPEN
-
-NOSTDLIB=
-
-LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
-	-Wl,-z,now,-Bsymbolic,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib'
-EXTRA_SHARED_LIBS=-ldl
-
-#OPTIONAL_DL_LIB=-ldl
-#OPTIONAL_LIBDL_TARGET=libdld
-
-TARGET_RULE_EXTENSION=_shared
-O_EXT=.so
-# name of object files in binary directory
-BIN_O=.so
-
-# We have problems with FFI as of 2008-12-01
-# Remove the follwoing lines when the problems have been fixed
-FFI_OBJS=
-OPTIONAL_HAVE_FFI_ARG=
-OPTIONAL_FFI_TARGET_IN_LIBRUN=
-# END FFI kludge
-
-# LIBJPEG=$(LIBJPEG_DIR)/libjpeg.a
-# LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/libjpeg.a
-# LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/libjpeg.a
-
-
-# a netsnmp library
-#
-# if already in /usr/lib:
-# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
-# STATIC_LINK_LIB_NETSNMP=
-# TARGET_LIB_NETSNMP=
-#
-# if a local one should be built and used (for 64bit, no -lrt is needed):
-DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a
-
-
-MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
-MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin64260
-MATRIXLOCK_SHARED_LIB_ARG=-lusb
-
-#.SUFFIXES: .o .so
-
-#.o.so:
-#	@-rm -f $*.so
-#	$(LD) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS)
-
-#------------------ end of linux-elf/x86_64 ---------------------
-O_RULE=__STANDARD_O_RULE__
-EXTRA_LIBS=-ldl -lX11 -lXext
-MAKE_ZLIB_ARG= "CFLAGS=-fPIC -O3 -DUSE_MMAP"
-FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
-FFI_DIR=libffi-3.0.10rc8
-OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
-OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
-FFI_CC="$(CC) -m64 -fPIC"
-FFI_LD="ld -m elf_x84_64"
--- a/makelib/config-linux.make	Mon Aug 14 21:08:20 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-#------------------ start of linux-elf/COMMON/defines ---------------------
-#
-# $Header: /cvs/stx/stx/configurations/linux-elf/COMMON/defines,v 1.92 2016-07-19 19:56:46 stefan Exp $
-include $(MAKELIB)/config.make
-
-CONF_VENDOR=linux
-
-ARCH=linux
-ARCH_NAME=linux_elf
-DISTRIB_NAME=demoLinuxELF
-
-CCARCHCOMMONOPT=-DELF
-#RELOCINSTVARS=+relocInstvars
-
-INTERN_H=linuxIntern.h
-CPU_INTERN_H=cpu_i386.h
-CPUINTERN_H=$(INCLUDE)/linuxIntern.h
-
-MAKEFILE_EXTENSION=linux-elf
-TARGET_RULE_EXTENSION=_shared
-# ALL_TARGET=LINUX_i386_ELF
-
-MAKEFLAGS += --no-print-directory
-MAKE_INCLUDE=include
-INSTALL=install
-INSTALL_BIN_CMD=install -s -m 0755
-INSTALL_SCRIPT_CMD=install -m 0755
-COMPRESSOR=gzip
-COMPRESSED_FILETYPE=targz
-SETUP_RULE=setup_linux
-
-CC=gcc
-
-#
-# * `-fno-strict-aliasing` since it's almost impossible to write a memory
-#   manager without breaking C's aliasing rules. Better be on a safe side.
-#   Nice post about these things: http://blog.regehr.org/archives/1307
-#
-# * `-Wno-strict-aliasing` to turn of warnings about breaking aliasing rules. 
-#   While one would think these wanings should be turned off when 
-#   `-fno-strict-aliasing` is passed, apparently some GCCs bark anyway. 
-#
-# * `-fno-stack-protector` is (was) required on Ubuntu brands where it's 
-#   by default on. Smalltalk/X green thread implementation does not wotk
-#   well with it. 
-#
-# * `-U_FORTIFY_SOURCE` is (was) required on Gentoo as a workaround for failing 
-#   longjmp check when _FORTIFY_SOURCE is defined (which is enabled by default 
-#   on Gentoo. Remove when fixed.
-#
-OPT=-fPIC -O2 -fno-strict-aliasing -Wno-strict-aliasing -fno-stack-protector -ggdb3 -pipe -U_FORTIFY_SOURCE
-
-STC_LEXLIB=
-
-OS=-DLINUX
-
-FFI_ARCH=x86
-FFI_CFLAGS=
-FFI_DIR=libffi-3.0.10rc8
-FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
-OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
-OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
-FFI_CC="gcc -m32"
-FFI_LD='ld -m elf_i386'
-
-OBJNAME=.o
-BIN_O=.so
-O_EXT=.so
-SA_EXT=.so
-SO_NAME=.so
-
-#
-# use static librt for clock_gettime().
-# dynamic librt causes libpthread to be loaded that does not
-# work with stx' stack layout
-#
-
-OTHERLIBS=-ldl -Wl,-Bstatic,-lrt,-Bdynamic
-OTHERLIBS=-ldl -lrt
-OTHERLIBS=-ldl -lrt -lc
-STATIC_OTHERLIBS=
-LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
-	-Wl,-z,now,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib',--wrap=memcpy
-
-SPECIAL_LIBRUN_RULE=allLINUX
-LIBRUNTARGET=librun.so
-
-FORCE_LINK_LIBRUN=1
-
-# mhm - these should now only be in libview!
-LIBVIEW_EXTRA_TARGETS=$(WORKSTAT1).so $(WORKSTAT2).so
-
-ARCH_LIBSNMP=$(TOP)/libsnmp
-ARCH_CLASSLIBDIRS=$(ARCH_LIBSNMP)
-
-#
-# where are the X libraries if we need them:
-#
-XDEFS=-DSHAPE -DXINERAMA -DXFT -DHAVE_FONTCONFIG
-XINCLUDE+=$(shell pkg-config --cflags xft)
-
-LIB_X=-lX11
-LIB_XEXT=-lXext
-LIB_XT= -lXt
-LIB_XAW=-lXaw
-LIB_XMU=-lXmu
-LIB_XMU=-lXt
-LIB_XINERAMA=-lXinerama
-LIB_XFT=$(shell pkg-config --libs xft)
-
-EXTRA_LIBS= -lX11 -lXext
-STATIC_EXTRA_LIBS= -lX11 -lXext
-
-X_LIB_DIR=/usr/X11/lib
-JPEGLIB_LD_ARG=
-LIBJPEG_DIR=$(TOP)/support/libjpeg-9
-JPEG_INCLUDE=-I$(LIBJPEG_DIR)
-
-LIBJPEG=$(LIBJPEG_DIR)/.libs/libjpeg.a
-LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/.libs/libjpeg.a
-LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/.libs/libjpeg.a
-
-#
-# a netsnmp library
-#
-# if already in /usr/lib:
-# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
-# STATIC_LINK_LIB_NETSNMP=
-# TARGET_LIB_NETSNMP=
-#
-# if a local one should be built and used:
-DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a -lrt
-STATIC_LINK_LIB_NETSNMP=
-TARGET_LIB_NETSNMP=snmplib
-
-
-STATIC_LIB_X   =$(X_LIB_DIR)/libX11.a
-STATIC_LIB_XEXT=$(X_LIB_DIR)/libXext.a
-STATIC_LIB_XT  =$(X_LIB_DIR)/libXt.a
-STATIC_LIB_XAW =$(X_LIB_DIR)/libXaw.a
-STATIC_LIB_XMU =$(X_LIB_DIR)/libXmu.a
-
-# the following defs are for using the system's usb lib (only needed in some apps);
-USB_LIB_DIR=
-USB_LIB_ARG=-lusb
-USB_LIB_DIR_ARG=-L/usr/lib
-USB_MAKE_TARGET=
-
-MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
-MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin260 -lusb
-
-NOSTDLIB=-nostdlib
-
-#
-# an extra rule for shared objects
-#
-.SUFFIXES: .a .o .so
-# use -nostdlib in combination with -lc -lgcc: we actually use some functions (like fstat) from libc (-lc)
-# and gcc (-lgcc) provides some low level routines that should be around
-.o.so:
-	@-rm -f $*.so
-	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
-
-.a.so:
-	rm -f $*.so
-	rm -rf tmp.a.so
-	mkdir tmp.a.so
-	cd tmp.a.so; $(AR) x ../$*.a
-	@-rm -f $*.so
-	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so tmp.a.so/*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
-	rm -rf tmp.a.so
-
-SHAREDLIBRULE=linuxSharedLib
-linuxSharedLib:
-	@-rm -f $(LIB)
-	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $(LIB) $(OBJS) $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
-
-#.st.s2:
-#       $(STC) $(STCFLAGS) $(CFLAGS) -C $*.st
-#       $(CC) $(CFLAGS) -S $*.c
-#       @-echo " stripping off useless .align directives ..."
-#       sed "/.align 4/d" < $*.s > $*.s2
-
-#.SUFFIXES: .s2 .s3
-#
-#.s2.s3:
-#       @-echo "   removing useless jumps ..."
-#       awk -f $(TOP)/rules/i386.script.awk < $*.s2 > $*.s3
-
-#
-# extra rules for space-optimized/speed-optimized modules modules
-#
-.SUFFIXES: .st .spc .spd
-
-.st.spc:
-	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPACEOPT_O_RULE__
-
-.st.spd:
-	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPEEDOPT_O_RULE__
-
-VERYBIG_STFILE_RULE=__VERYBIG_RULE__
-__VERYBIG_RULE__:
-	$(MAKE) $(O_RULE) STFILE=$(BIG_FILE) CC="$(CC)" STC_OPT="$(STC_OPT) -Os" OPT="$(OPT) -Os" SEPINITCODE="$(SEPINITCODE)"
-
-LONGNAME_RULE=__NORMAL_RULE2__
-__NORMAL_RULE2__:
-	$(MAKE) $(O_RULE) STFILE=$(LONGNAME_FILE) CC="$(CC)" STC_OPT="$(STC_OPT)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)"
-
-
-#AWK_VERBOSE=1
-AWK_DIFF=
-AWK_FIX=$(TOP)/rules/i386fixELF.awk
-
-SPACEOPT_O_RULE=__SPACEOPT_O_RULE__
-__SPACEOPT_O_RULE__:
-	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
-	@-if [ -f $(STFILE).s ]; then \
-	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
-	    if [ "$(AWK_DIFF)" != "" ]; then \
-		diff $(STFILE).s $(STFILE).s2; \
-	    fi; \
-	    if [ "$(AWK_VERBOSE)" != "" ]; then \
-		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
-		tail -5 $(STFILE).s2; \
-		echo; \
-	    fi; \
-	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
-	fi
-	@-if [ -f i_$(STFILE).s ]; then \
-	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
-	    if [ "$(AWK_DIFF)" != "" ]; then \
-		diff i_$(STFILE).s i_$(STFILE).s2; \
-	    fi; \
-	    if [ "$(AWK_VERBOSE)" != "" ]; then \
-		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
-		tail -5 i_$(STFILE).s2; \
-		echo; \
-	    fi; \
-	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
-	fi
-	@if [ "$(KEEP)" != "y" ]; then \
-	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
-	fi
-
-
-.SUFFIXES: .st .s2
-
-.st.s2:
-	@$(MAKE) $(SPEEDOPT_O_RULE) STCOPT="$(STCOPT)" KEEP=y STFILE=$* SEPINITCODE="$(SEPINITCODE)"
-
-SPEEDOPT_O_RULE=__SPEEDOPT_O_RULE__
-__SPEEDOPT_O_RULE__:
-	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
-	@-if [ -f $(STFILE).s ]; then \
-	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
-	    if [ "$(AWK_DIFF)" != "" ]; then \
-		diff $(STFILE).s $(STFILE).s2; \
-	    fi; \
-	    if [ "$(AWK_VERBOSE)" != "" ]; then \
-		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
-		tail -5 $(STFILE).s2; \
-		echo; \
-	    fi; \
-	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
-	fi
-	@-if [ -f i_$(STFILE).s ]; then \
-	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
-	    if [ "$(AWK_DIFF)" != "" ]; then \
-		diff i_$(STFILE).s i_$(STFILE).s2; \
-	    fi; \
-	    if [ "$(AWK_VERBOSE)" != "" ]; then \
-		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
-		tail -5 i_$(STFILE).s2; \
-		echo; \
-	    fi; \
-	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
-	fi
-	@if [ "$(KEEP)" != "y" ]; then \
-	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
-	fi
-
-O_RULE=$(SPEEDOPT_O_RULE)
-
-#------------------ end of linux-elf/COMMON/defines ---------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-x86_64-pc-linux-gnu.make	Tue Aug 15 10:44:12 2017 +0100
@@ -0,0 +1,71 @@
+#
+# Definitions for target x86_66-pc-linux-gnu.
+#
+# based on eXept's:
+#
+# linux-elf/x86_64: cpu: x86_64 in 64 bit mode os:linux-ELF options: +commonSymbol
+#
+#------------------ start of linux/x86_64 ---------------------
+#
+# $Header: /cvs/stx/stx/configurations/linux-elf/x86_64/defines,v 1.18 2016-08-29 08:52:44 stefan Exp $
+
+include $(MAKELIB)/config-linux-gnu.make
+include $(MAKELIB)/config-x86_64.make
+
+COMMONSYMBOLS=+commonSymbols
+SAVECOMMONSYMBOLS=+saveCommonSymbols
+STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
+STC_LEXLIB=-lfl
+
+
+DLDEFS=-DHAS_DLOPEN
+
+NOSTDLIB=
+
+LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
+	-Wl,-z,now,-Bsymbolic,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib'
+EXTRA_SHARED_LIBS=-ldl
+
+# We have problems with FFI as of 2008-12-01
+# Remove the follwoing lines when the problems have been fixed
+FFI_OBJS=
+OPTIONAL_HAVE_FFI_ARG=
+OPTIONAL_FFI_TARGET_IN_LIBRUN=
+# END FFI kludge
+
+# LIBJPEG=$(LIBJPEG_DIR)/libjpeg.a
+# LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/libjpeg.a
+# LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/libjpeg.a
+
+
+# a netsnmp library
+#
+# if already in /usr/lib:
+# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
+# STATIC_LINK_LIB_NETSNMP=
+# TARGET_LIB_NETSNMP=
+#
+# if a local one should be built and used (for 64bit, no -lrt is needed):
+DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a
+
+
+MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
+MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin64260
+MATRIXLOCK_SHARED_LIB_ARG=-lusb
+
+#.SUFFIXES: .o .so
+
+#.o.so:
+#	@-rm -f $*.so
+#	$(LD) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS)
+
+#------------------ end of linux-elf/x86_64 ---------------------
+O_RULE=__STANDARD_O_RULE__
+EXTRA_LIBS=-ldl -lX11 -lXext
+MAKE_ZLIB_ARG= "CFLAGS=-fPIC -O3 -DUSE_MMAP"
+FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
+FFI_DIR=libffi-3.0.10rc8
+OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
+OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
+FFI_CC="$(CC) -m64 -fPIC"
+FFI_LD="ld -m elf_x84_64"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-x86_64.make	Tue Aug 15 10:44:12 2017 +0100
@@ -0,0 +1,7 @@
+#
+# Common definition for i686 arch
+#
+
+CPU_INTERN_H = cpu_x86_64.h
+DEFS += -D__x86_64__
+CCCONFOPT = -m64 -fPIC
--- a/makelib/config.make	Mon Aug 14 21:08:20 2017 +0100
+++ b/makelib/config.make	Tue Aug 15 10:44:12 2017 +0100
@@ -18,6 +18,14 @@
 # This file sets up defaults which fit on most systems -
 # see redefinitions in vendor-define, config-define or individual Make.proto files
 
+CONF=$(BUILD_TARGET)
+CONF_VENDOR=$(BUILD_TARGET)
+
+ARCH=$(CONF)
+ARCH_NAME=$(ARCH)
+DISTRIB_NAME=$(ARCH)
+
+
 #
 # target for local make
 #
--- a/makelib/definitions-w.make	Mon Aug 14 21:08:20 2017 +0100
+++ b/makelib/definitions-w.make	Tue Aug 15 10:44:12 2017 +0100
@@ -14,6 +14,19 @@
 #   USETCC=1     - tiny-C (tcc)   (suspended work - unfinished)
 #   USEMINGW64=1 - mingw-C        (ongoing work)
 
+!ifndef BUILD_TARGET
+! ifdef USEMINGW32
+BUILD_TARGET = i686-pc-mingw32
+! else
+!  ifdef USEMINGW64
+BUILD_TARGET = x86_64-w64-mingw32
+!  else
+BUILD_TARGET = unknown-unknown-unknown
+!  endif
+! endif
+!endif
+
+
 !ifdef USEVC
 ! undef USEBC
 !endif
--- a/makelib/definitions.make	Mon Aug 14 21:08:20 2017 +0100
+++ b/makelib/definitions.make	Tue Aug 15 10:44:12 2017 +0100
@@ -185,6 +185,8 @@
 
 
 #------------------ start of rules/stdHeader2 ---------------------
+COMMONDEFS += -DBUILD_TARGET="$(BUILD_TARGET)"
+
 
 # collected compiler flags
 
--- a/makelib/rules-w.make	Mon Aug 14 21:08:20 2017 +0100
+++ b/makelib/rules-w.make	Tue Aug 15 10:44:12 2017 +0100
@@ -147,8 +147,8 @@
 #------------------------------------------------------------------
 # MINGW32 defs here
 #------------------------------------------------------------------
-DEFS=-DWIN32 -D__MINGW__ -D__MINGW32__ -DDEBUG
-CFLAGS=$(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+DEFS=-DWIN32 -D__MINGW__ -D__MINGW32__ -DDEBUG -DBUILD_TARGET="$(BUILD_TARGET)"
+CFLAGS=$(OPT) $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
 LFLAGS = -L$(LIBDIR) $(LIB_BASE_LD_ARG)
 LIBFILES=$(LIBDIR_LIBRUN)\librun.lib
 # no resource compiler
@@ -162,11 +162,8 @@
 #------------------------------------------------------------------
 # MINGW64 defs here
 #------------------------------------------------------------------
-DEFS=-DWIN32 -D__MINGW__ -D__MINGW64__ -DDEBUG
-#CFLAGS=-O $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
-#CFLAGS=-g $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
-CWARNFLAGS=-Wno-int-conversion -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types
-CFLAGS=-O2 $(CFLAGS1) $(CFLAGS2) $(CWARNFLAGS) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+DEFS=-DWIN32 -D__MINGW__ -D__MINGW64__ -DDEBUG -DBUILD_TARGET="$(BUILD_TARGET)"
+CFLAGS=$(OPT) $(CFLAGS1) $(CFLAGS2) $(CWARNFLAGS) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
 LFLAGS=-g $(LIB_BASE_LD_ARG)
 LFLAGS2=-L$(LIBDIR)
 LIBFILES=$(LIBDIR_LIBRUN)/librun.lib
--- a/pipeline.groovy	Mon Aug 14 21:08:20 2017 +0100
+++ b/pipeline.groovy	Tue Aug 15 10:44:12 2017 +0100
@@ -21,14 +21,13 @@
  *     ...
  *     pipeline = load "pipeline.groovy"
  *     ...
- *     pipeline.configurations = [ 'NODE': 'qnx', 'ARCH' : 'mips' ]
+ *     pipeline.configurations = [ 'BUILD_TARGET': 'mips-sgi-irix' ]
  *     ...
  *
  * Default value: see below.
  */
 configurations = [
-    'NODE': ['windows' , 'linux' ],
-    'ARCH': ['i386', 'x86_64' ]
+    'BUILD_TARGET': ['i686-pc-mingw32' , 'x86_64-w64-mingw32', 'i686-pc-linux-gnu', 'x86_64-pc-linux-gnu' ]
 ]
 
 /** Branch to build. To overwrite do:
@@ -68,7 +67,7 @@
 def build() {
     stage ( "Build" ) {
         matrix ( configurations ) {
-            stage ( "Checkout - {${env.NODE}-${env.ARCH}} " ) {
+            stage ( "Checkout - {${env.BUILD_TARGET}} " ) {
                 sshagent([ scm.getCredentialsId() ]) {
                     sh  """
                         if [ -f Jenkinsfile.rb ]; then
@@ -78,19 +77,19 @@
                         fi
                         hg up ${branch != null ? branch : scm.getBranch()}
                         """
-                    sh  "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --arch ${env.ARCH}  update"
+                    sh  "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} update"
                 }
             }
 
-            stage ( "Compile - {${env.NODE}-${env.ARCH}}") {
-                sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" compile"
+            stage ( "Compile - {${env.BUILD_TARGET}}") {
+                sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} compile"
             }
         }
     }
 
     stage ( "Test" ) {
         matrix ( configurations ) {
-            stage ( "Test - {${env.NODE}-${env.ARCH}}") {
+            stage ( "Test - {${env.BUILD_TARGET}}") {
                 /*
                  * Some tests requires display, so:
                  *
@@ -101,10 +100,10 @@
                  */
                 if ( isUnix() ) {
                     wrap([$class: 'Xvfb', autoDisplayName: true, additionalOptions: '-screen 0 1024x768x24 -pixdepths 24 4 8 15 16 32', parallelBuild: true]) {
-                        sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" test"
+                        sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} test"
                     }
                 } else {
-                    sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" test"
+                    sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} test"
                 }
                 junit allowEmptyResults: true, testResults: "reports/*build${env.BUILD_NUMBER}*.xml"
             }
@@ -182,14 +181,14 @@
     for (i = 0; i < combinations.length; i++) {
         def index = i
         def conf = combinations[i];
-        branches["${conf.NODE}-${conf.ARCH}"] = {
-            node ( conf.NODE ) {
+        branches["${conf.BUILD_TARGET}"] = {
+            node ( conf.BUILD_TARGET ) {
                 def newEnv = []
                 for (k in conf.keySet()) {
                     newEnv.add("${k}=${conf[k]}")
                 }
                 withEnv ( newEnv ) {
-                    ws ("workspace/${workspace}/${env.ARCH}") {
+                    ws ("workspace/${workspace}/${env.BUILD_TARGET}") {
                         block()
                     }
                 }
@@ -213,7 +212,7 @@
             newEnv.add("${k}=${conf[k]}")
         }
         withEnv ( newEnv ) {
-            ws ("workspace/${workspace}/${env.ARCH}") {
+            ws ("workspace/${workspace}/${env.BUILD_TARGET}") {
                 block()
             }
         }
@@ -223,8 +222,8 @@
 
 def artifacts() {
     matrix ( configurations ) {
-        stage ( "Artifacts - {${env.NODE}-${env.ARCH}}") {
-            sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" artifacts"
+        stage ( "Artifacts - {${env.BUILD_TARGET}}") {
+            sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} artifacts"
             archiveArtifacts artifacts: "artifacts/*build${env.BUILD_NUMBER}*.zip, artifacts/*build${env.BUILD_NUMBER}*.bz2, artifacts/*build${env.BUILD_NUMBER}*.sha256", fingerprint: true//, onlyIfSuccessful: true
         }
     }
--- a/rakelib/compile.rake	Mon Aug 14 21:08:20 2017 +0100
+++ b/rakelib/compile.rake	Tue Aug 15 10:44:12 2017 +0100
@@ -164,17 +164,6 @@
   end
 end
 
-# Setup flags for GCC (both, real GCC and MinGW)
-GCC_CFLAGS_OPT = ARCH == 'i386' ? '-O' : ''
-GCC_CFLAGS_DBG = core_developer? ? '-ggdb3' : ''
-GCC_CFLAGS_PIC = win32? ? '' : '-fPIC'
-GCC_CFLAGS = "-pipe -fno-omit-frame-pointer -fno-stack-protector -fno-strict-aliasing -fwrapv #{GCC_CFLAGS_PIC} #{GCC_CFLAGS_OPT} #{GCC_CFLAGS_DBG}"
-
-# Sigh, for MINGW 5.x.x coming with MSYS2 we have to force C language as 
-# Borland make and build files are using funny suffixes to confuse GCC's 
-# language detection. Triple sigh here!
-GCC_CFLAGS += ' -x c' if win32?
-
 namespace :compile do
 
   task :all => %i(prereq pre main post)
@@ -207,31 +196,21 @@
     
   file STX_CONF_DIR / 'stx-config.make' => STX_CONF_DIR  do
     makelib_dir = Pathname.new(File.expand_path('makelib')).relative_path_from(Pathname.new(BUILD_DIR / 'stx' ))
-    os = nil
-    case 
-    when linux? 
-      os = 'linux'
-    when win32?
-      os = 'mingw32'
-    else
-      raise Exception.new('Unssuported operating system')
-    end
-
     File.open(STX_CONF_DIR / 'stx-config.make', 'w') do | f |
-      f.puts "BUILD_TARGET ?= #{os}-#{ARCH}"
+      f.puts "BUILD_TARGET ?= #{BUILD_TARGET}"
     end
   end 
 
   rule 'makefile' do |t|
-    chdir File.dirname(t.name) do; sh "'#{STX_TOP_DIR / 'rules' / 'stmkmf'}'"; end
+    chdir File.dirname(t.name) do
+      sh "'#{STX_TOP_DIR / 'rules' / 'stmkmf'}'"
+    end
   end
 
   task :stc do
-    (linux? and x86_64? and ARCH == 'i386') ? (stx_make_flags='STC_LEXLIB=libfl/libfl_pic.a') : (stx_make_flags='')
-
     chdir STX_TOP_DIR / 'stc' do
       begin
-        make stx_make_flags
+        make
         cleanup_stc
       rescue Exception => e
         cleanup_stc
--- a/rakelib/setup.rake	Mon Aug 14 21:08:20 2017 +0100
+++ b/rakelib/setup.rake	Tue Aug 15 10:44:12 2017 +0100
@@ -9,29 +9,27 @@
 
 unless defined? PROJECT;       PROJECT = 'stx:jv-branch'; end
 
-unless defined? ARCH
-  if ENV.has_key? 'ARCH'
-    ARCH = ENV['ARCH']
-  else
-    arch = RbConfig::CONFIG['host_cpu']
-    case arch
-      when 'i586', 'i686'
-        ARCH = 'i386'
-      else
-        ARCH = arch
-    end
-  end
-  raise Exception.new("Unsupported architecture #{ARCH}") if ARCH != 'i386' && ARCH != 'x86_64'
+
+
+# Guess the value of BUILD_TARGET for system on which we're currently running.
+# Think of this as of `config.guess` script used in autotools.
+# Returns the BUiLD_TARGET in form of GNU target triplet, such as 
+# `x86_64-pc-linux-gnu`
+def build_target_guess()
+  RbConfig::CONFIG['target'] # Can't believe it's so easy...
 end
 
+unless defined? BUILD_TARGET; BUILD_TARGET = ENV['BUILD_TARGET'] || build_target_guess(); end
+
+
 unless defined? TOOLCHAIN
   if ENV.has_key? 'TOOLCHAIN'
     TOOLCHAIN = ENV['TOOLCHAIN']
   else
     if unix?
       TOOLCHAIN='gcc'
-    elsif win32?
-      if ARCH == 'x86_64'
+    elsif win32?    
+      if /x86_64/ =~ BUILD_TARGET
         TOOLCHAIN='mingw64'
       else
         TOOLCHAIN='mingw32'
@@ -59,7 +57,7 @@
 #
 COMMENT
       f.puts "unless defined? PROJECT; PROJECT='#{PROJECT}'; end"
-      f.puts "unless defined? ARCH; ARCH='#{ARCH}'; end"
+      f.puts "unless defined? BUILD_TARGET; BUILD_TARGET = '#{BUILD_TARGET}'; end"
       f.puts "unless defined? REPOSITORYSET; REPOSITORYSET='#{REPOSITORYSET}'; end"
       if defined? PROJECT_DIRS
         f.puts "unless defined? PROJECT_DIRS; PROJECT_DIRS='#{PROJECT_DIRS}'; end"
@@ -141,7 +139,7 @@
   app_name = project.app_name || 'smalltalkx'
   app_version = project.app_version || '6.2.5'
 
-  unless defined? BUILD_NAME; BUILD_NAME = "#{app_name}-#{app_version}_#{ARCH}-#{win32? ? 'win32' : RbConfig::CONFIG['host_os']}" end
+  unless defined? BUILD_NAME; BUILD_NAME = "#{app_name}-#{app_version}_#{BUILD_TARGET}" end
 end
 
 task :'setup:dependencies' => :checkout do
--- a/rakelib/support.rb	Mon Aug 14 21:08:20 2017 +0100
+++ b/rakelib/support.rb	Tue Aug 15 10:44:12 2017 +0100
@@ -48,15 +48,7 @@
   # Return an a Jenkins build with pre-built stc and librun. 
   # Used to download pre-build stc and librun
   def self.smalltalkx_jv_branch_build
-    plat = nil
-    if win32?
-      plat = 'Windows'
-    elsif linux?
-      plat = 'Linux'
-    else
-      error_unsupported_platform
-    end
-    return Jenkins::Build.new(%Q{https://swing.fit.cvut.cz/jenkins/job/stx_jv/ARCH=#{ARCH},PLATFORM=#{plat}N/lastSuccessfulBuild})
+    return Jenkins::Build.new(%Q{https://swing.fit.cvut.cz/jenkins/job/stx_jv/lastStableBuild})
   end
 
   class Artifact
--- a/specs/stx-jv.rbspec	Mon Aug 14 21:08:20 2017 +0100
+++ b/specs/stx-jv.rbspec	Tue Aug 15 10:44:12 2017 +0100
@@ -1,21 +1,11 @@
-def build_platform_id() 
-  return "#{ARCH}-#{win32? ? 'win32' : RbConfig::CONFIG['host_os']}"
-end
 # A helper function to download and unpack pre-built stc and librun
 # for those who are not lucky enough to have an access to sources
 def download_blob_matching(pattern, directory)
   plat = nil
   blob = nil
   sha256 = nil
-  if win32? then        
-      plat = 'Windows'
-  elsif linux?        
-    plat = 'Linux'
-  else        
-    error_unsupported_platform()
-  end
   build = Jenkins::Build.new(%Q{https://swing.fit.cvut.cz/jenkins/job/stx_jv/lastStableBuild})
-  platform = build_platform_id()
+  platform = BUILD_TARGET()
   build.artifacts.each do | artifact |    
     if (pattern =~ artifact.name) and (artifact.name.include? platform) then
       if artifact.name.end_with? '.sha256' then
@@ -26,7 +16,7 @@
     end
   end
   if not blob then
-    error "No artifact matching given pattern found"
+    error "No artifact matching given pattern found: '#{pattern}'"
   end
   puts "Downloading binary component #{blob.name}"
   blob.download_to(directory)
@@ -252,7 +242,7 @@
 
 	    
     	cairo_dlls = nil
-    	if ARCH == 'i386'
+    	if /i686/ =~ BUILD_TARGET
 	      cairo_dlls =  [ 
 	      	'libcairo-2.dll' ,
 					'libfontconfig-1.dll' ,
@@ -280,7 +270,7 @@
     		task :'dist:jv:post' => [ bin_dir / dll ]
 				file bin_dir / dll do
 					mkdir_p bin_dir
-					cp BUILD_DIR / 'stx' / 'goodies' / 'libcairo' / 'support' / 'win32' / (ARCH == 'i386' ? 'i586' : ARCH) / dll , bin_dir / dll
+					cp BUILD_DIR / 'stx' / 'goodies' / 'libcairo' / 'support' / 'win32' / (/i686/ =~ BUILD_TARGET ? 'i586' : 'x86_64') / dll , bin_dir / dll
 				end
     	end
     end
@@ -299,14 +289,14 @@
       else
         # Be paranoid, do cleanup here. Should have been done, but who knows...
         cleanup_stc() 
-    	  zip BUILD_DIR / 'stx' / 'stc' , archive: ARTIFACTS_DIR / "#{project.app_name}-#{project.app_version}_#{build_platform_id()}_prebuilt-stc"
+    	  zip BUILD_DIR / 'stx' / 'stc' , archive: ARTIFACTS_DIR / "#{project.app_name}-#{project.app_version}_#{BUILD_TARGET}_prebuilt-stc"
       end
       if core_developer? || (File.exist? BUILD_DIR / 'stx' / 'librun' / '.hg') || (File.exist? BUILD_DIR / 'stx' / 'librun' / 'CVS') then
         puts  "WARNING: NOT CREATING librun archive since directory contains sources!!!"
       else
         # Be paranoid, do cleanup here. Should have been done, but who knows...
         cleanup_librun() 
-    	  zip BUILD_DIR / 'stx' / 'librun' , archive: ARTIFACTS_DIR / "#{project.app_name}-#{project.app_version}_#{build_platform_id()}_prebuilt-librun"
+    	  zip BUILD_DIR / 'stx' / 'librun' , archive: ARTIFACTS_DIR / "#{project.app_name}-#{project.app_version}_#{BUILD_TARGET}_prebuilt-librun"
       end
     end
   end
@@ -328,7 +318,7 @@
   ver = (ver.split(".")[0..2]).join(".")
   project.app_version "#{ver}_#{BUILD_ID}"
   # This is really ugly. We need to clean that up...
-  BUILD_NAME.replace "#{project.app_name}-#{project.app_version}_#{build_platform_id()}"
+  BUILD_NAME.replace "#{project.app_name}-#{project.app_version}_#{BUILD_TARGET}"
 end