summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Mistachkin <joe@mistachkin.com>2017-08-13 22:05:25 (GMT)
committerJoe Mistachkin <joe@mistachkin.com>2017-08-13 22:05:25 (GMT)
commit9b1b7036b0de2150a62088d4681e966d721fc012 (patch)
treef1407abdf076dfc855ea19667458ce99f40a5659
parented3d8a5c300d7029bc85bc0c012386ae933e230f (diff)
downloadtcl-9b1b7036b0de2150a62088d4681e966d721fc012.zip
tcl-9b1b7036b0de2150a62088d4681e966d721fc012.tar.gz
tcl-9b1b7036b0de2150a62088d4681e966d721fc012.tar.bz2
Support cross-compiling Tcl for 'Win32 on ARM' using Visual Studio.
-rw-r--r--generic/tclPanic.c2
-rw-r--r--win/makefile.vc11
-rw-r--r--win/tclWin32Dll.c4
-rw-r--r--win/tclWinFile.c2
-rw-r--r--win/tclWinSock.c3
5 files changed, 14 insertions, 8 deletions
diff --git a/generic/tclPanic.c b/generic/tclPanic.c
index b032449..b03ad41 100644
--- a/generic/tclPanic.c
+++ b/generic/tclPanic.c
@@ -111,7 +111,7 @@ Tcl_PanicVA(
__builtin_trap();
# elif defined(_WIN64)
__debugbreak();
-# elif defined(_MSC_VER)
+# elif defined(_MSC_VER) && defined (_M_IX86)
_asm {int 3}
# else
DebugBreak();
diff --git a/win/makefile.vc b/win/makefile.vc
index ada08cc..40de392 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -121,7 +121,7 @@ the build instructions.
# nodep = Turns off compatibility macros to ensure the core
# isn't being built with deprecated functions.
#
-# MACHINE=(ALPHA|AMD64|IA64|IX86)
+# MACHINE=(ARM|AMD64|IA64|IX86)
# Set the machine type used for the compiler, linker, and
# resource compiler. This hook is needed to tell the tools
# when alternate platforms are requested. IX86 is the default
@@ -484,9 +484,16 @@ cdebug = -Zi -Od $(DEBUGFLAGS)
cdebug = -Zi -WX $(DEBUGFLAGS)
!endif
+### Common compiler options that are architecture specific
+!if "$(MACHINE)" == "ARM"
+carch = -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
+!else
+carch =
+!endif
+
### Declarations common to all compiler options
cwarn = $(WARNINGS) -D _CRT_SECURE_NO_DEPRECATE -D _CRT_NONSTDC_NO_DEPRECATE
-cflags = -nologo -c $(COMPILERFLAGS) $(cwarn) -Fp$(TMP_DIR)^\
+cflags = -nologo -c $(COMPILERFLAGS) $(carch) $(cwarn) -Fp$(TMP_DIR)^\
!if $(MSVCRT)
!if $(DEBUG) && !$(UNCHECKED)
diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c
index 688fa8d..84c7a97 100644
--- a/win/tclWin32Dll.c
+++ b/win/tclWin32Dll.c
@@ -29,7 +29,7 @@ static int platformId; /* Running under NT, or 95/98? */
* VC++ 5.x has no 'cpuid' assembler instruction, so we must emulate it
*/
-#if defined(_MSC_VER) && (_MSC_VER <= 1100)
+#if defined(_MSC_VER) && (_MSC_VER <= 1100) && defined (_M_IX86)
#define cpuid __asm __emit 0fh __asm __emit 0a2h
#endif
@@ -735,7 +735,7 @@ TclWinCPUID(
__cpuid(regsPtr, index);
status = TCL_OK;
-# else
+# elif defined (_M_IX86)
/*
* Define a structure in the stack frame to hold the registers.
*/
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 6662327..7586af1 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -828,7 +828,7 @@ tclWinDebugPanic(
__builtin_trap();
#elif defined(_WIN64)
__debugbreak();
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && defined (_M_IX86)
_asm {int 3}
#else
DebugBreak();
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index da2e60a..3799d98 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -1426,8 +1426,7 @@ TcpGetOptionProc(
flags |= NI_NUMERICHOST;
}
} else if (sockname.sa.sa_family == AF_INET6) {
- if ((IN6_ARE_ADDR_EQUAL(&sockname.sa6.sin6_addr,
- &in6addr_any)) ||
+ if (IN6_IS_ADDR_UNSPECIFIED(&sockname.sa6.sin6_addr) ||
(IN6_IS_ADDR_V4MAPPED(&sockname.sa6.sin6_addr)
&& sockname.sa6.sin6_addr.s6_addr[12] == 0
&& sockname.sa6.sin6_addr.s6_addr[13] == 0