Open
Bug 687033
Opened 13 years ago
Updated 2 years ago
add Windows/arm target (NSPR part)
Categories
(NSPR :: NSPR, enhancement)
Tracking
(Not tracked)
ASSIGNED
People
(Reporter: m_kato, Assigned: m_kato)
References
(Depends on 2 open bugs)
Details
Attachments
(4 files, 3 obsolete files)
(deleted),
patch
|
ted
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
m_kato
:
review+
wtc
:
checked-in+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
m_kato
:
review+
wtc
:
checked-in+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
m_kato
:
review+
wtc
:
checked-in+
|
Details | Diff | Splinter Review |
VS11 (VS2011? or VS2012?) supports ARM. But, although VS11 dev preview is still broken (ex. lack of some libraries such as wsock32, winmm and etc), I would like to add arm target if VS11 dp/ctp/beta is refreshed.
To add arm target, we must add cross-compiling environment (target=arm, host=x86) for MSVC only.
Comment 1•12 years ago
|
||
I've been doing some experimentation with this in the hope of getting a jail broken Surface RT running both desktop and metro fx. A few notes thus far:
1) CFLAGS and CXXFLAGS, including the defines used for AC_TRY_COMPILE need a define to get past a compiler directive in crtdefs.h -
-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
2) Add the proper MACHINE linker option to DSO_LDOPTS:
-MACHINE:ARM
3) There's a configure check that fails which I haven't had the time to sort out so I simply removed it for experimentation:
AC_MSG_CHECKING([for posix_fallocate]) (delete or updated)
4) Modify an MSBuild arm target config file as well -
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\ARM\Microsoft.Cpp.ARM.Common.props
add the following entry to PropertyGroup:
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
5) Add various arm paths to your LIB, LIBPATH, and PATH variables to give the arm tools available precedence -
Microsoft Visual Studio 11.0\VC\LIB\arm
Microsoft Visual Studio 11.0\VC\atlmfc\lib\arm
Windows Kits\8.0\Lib\win8\um\arm
Microsoft Visual Studio 11.0/VC/BIN/x86_ARM
Windows Kits/8.0/bin/arm
This will get you most of the way through pymake configure. I'm currently running into problems with config in the 3rd party library libffi which doesn't support a Windows arm target. Looks like this is related to ctypes. We'll probably have to disable this library to get past it. Not sure if we support working without it though.
Assignee | ||
Comment 2•12 years ago
|
||
Actually, nsprpub and js.exe works on my jailbreak's SurfaceRT.
Additional, all configuration for arm needs -D_CRT_BUILD_APP=0 to use std*.h
Comment 3•12 years ago
|
||
(In reply to Makoto Kato from comment #2)
> Actually, nsprpub and js.exe works on my jailbreak's SurfaceRT.
>
> Additional, all configuration for arm needs -D_CRT_BUILD_APP=0 to use std*.h
sweet! :) I'm up to nspr in my build and am failing. Are you building nspr with the changes you posted here?
Comment 4•12 years ago
|
||
A couple additional notes, I had to disable ctypes -
ac_add_options --disable-system-ffi
ac_add_options --disable-ctypes
and mfbt needed an update -
diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h
--- a/mfbt/double-conversion/utils.h
+++ b/mfbt/double-conversion/utils.h
@@ -62,16 +62,19 @@
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
#elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
#if defined(_WIN32)
// Windows uses a 64bit wide floating point stack.
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
#else
#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
#endif // _WIN32
+#elif defined(__arm__)
+// XXX Not sure what the width of the floating point stack is for Windows ARM
+#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
#else
#error Target architecture was not detected as supported by Double-Conversion.
#endif
and I had to add __arm__ to the default defines in configure. Apparently the sdk headers add _ARM_, but there is no built in __arm__ define.
Assignee | ||
Comment 5•12 years ago
|
||
__arm__ isn't used on cl.exe. Microsoft compiler uses _M_ARM for arm target
Assignee | ||
Comment 6•12 years ago
|
||
I will update patches for reviewable.
Assignee | ||
Comment 7•12 years ago
|
||
Attachment #560526 -
Attachment is obsolete: true
Assignee | ||
Comment 8•12 years ago
|
||
This patch includes bug 759239.
Assignee | ||
Comment 9•12 years ago
|
||
Attachment #710045 -
Attachment is obsolete: true
Assignee | ||
Comment 10•12 years ago
|
||
Comment on attachment 710044 [details] [diff] [review]
Part 1: support Win32/arm (code part1)
This fix is for jailbreak arm target.
If we need store API only, we have to fix bug 746441 and etc.
Attachment #710044 -
Flags: review?(wtc)
Assignee | ||
Comment 11•12 years ago
|
||
Comment on attachment 710046 [details] [diff] [review]
Part 2: build config part
This fix includes bug 759239. (To cross building using MSVS, I need bug 759239's fix)
If landing bug 759239, I will create a patch again.
Attachment #710046 -
Flags: review?(wtc)
Assignee | ||
Comment 12•12 years ago
|
||
hwo to build.
my nspr path: c:/Development/cvs-mirror.mozilla.org/winrt/
VS2012 path: <VS2012 PATH>
HOST_CC=cl CC=<VS2012 PATH>/VC/BIN/X86_ARM/CL.EXE LD=link DLLFLAGS="-LIBPATH:\"C:/Program Files (x86)/Windows Kits/8.0/LIB/WIN8/UM/ARM\" -LIBPATH:\"<VS2012 PATH>/VC/LIB/ARM\"" /c/Development/cvs-mirror.mozilla.org/winrt/mozilla/nsprpub/configure --disable-debug --disable-tests --target=arm-pc-mingw32 --with-dist-prefix=c:/Development/cvs-mirror.mozilla.org/winrt/objdir/dist --with-mozilla --enable-optimize --srcdir=/c/Development/cvs-mirror.mozilla.org/winrt/mozilla/nsprpub/
Comment 13•12 years ago
|
||
Comment on attachment 710044 [details] [diff] [review]
Part 1: support Win32/arm (code part1)
>-/* Windows CE has GetFileAttributesEx. */
>-#ifndef WINCE
>+/* Windows CE and Windows on x64 and arm have GetFileAttributesEx. */
>+#if !defined(WINCE) && !defined(_M_ARM) && !defined(_M_X64)
I think we can just assume GetFileAttributesEx is always available.
I was told by wtc that the current NSPR system requirement is XPSP2.
Comment 14•12 years ago
|
||
Comment on attachment 710044 [details] [diff] [review]
Part 1: support Win32/arm (code part1)
Makoto: thank you for the patch. The changes in this patch seem
very small. So even though I question the need for this patch,
I am probably willing to check this in.
Could you take the opportunity to delete the WINCE code?
Just delete the WINCE code if you need to modify it. (I'm not
asking you to delete all the WINCE code in NSPR.)
Comment 15•12 years ago
|
||
Comment on attachment 710046 [details] [diff] [review]
Part 2: build config part
This patch also seems small, but I will ask Ted to review it
because I am not familiar with cross-compiling NSPR.
Ted: please feel free to decline the review request because
right now this port seems like a "hobbyist" activity.
Attachment #710046 -
Flags: review?(wtc) → review?(ted)
Comment 16•12 years ago
|
||
NSPR only needs to support Windows XP and later now.
There is a comment in prsystem.c that says
GlobalMemoryStatusEx is available on Windows 2000+.
So we can delete the dynamic lookup code.
Attachment #714173 -
Flags: review?(m_kato)
Comment 17•12 years ago
|
||
This patch removes a lot of obsolete code from w95io.c.
We can assume GetFileAttributesEx is available. A comment
in w95io.c says "GetFileAttributesEx is supported on Win 2K
and up."
Also, this MXR query shows _pr_useUnicode is set but not
used, so we can remove the _pr_useUnicode global variable
altogether.
Attachment #714174 -
Flags: review?(m_kato)
Comment 18•12 years ago
|
||
We don't need to support Windows/arm in the deprecated
"WINNT" build configuration. So I removed the _winnt.cfg
and _winnt.h changes from your patch.
I addressed prsystem.c and w95io.c separately, inspired
by your patch. This patch is what remains.
Attachment #710044 -
Attachment is obsolete: true
Attachment #710044 -
Flags: review?(wtc)
Attachment #714179 -
Flags: review?(m_kato)
Assignee | ||
Updated•12 years ago
|
Attachment #714173 -
Flags: review?(m_kato) → review+
Assignee | ||
Updated•12 years ago
|
Attachment #714179 -
Flags: review?(m_kato) → review+
Assignee | ||
Updated•12 years ago
|
Attachment #714174 -
Flags: review?(m_kato) → review+
Comment 19•12 years ago
|
||
Comment on attachment 714173 [details] [diff] [review]
prsystem.c patch: assume GlobalMemoryStatusEx is available
https://hg.mozilla.org/projects/nspr/rev/9e3594ac2353
Attachment #714173 -
Flags: checked-in+
Comment 20•12 years ago
|
||
Comment on attachment 714174 [details] [diff] [review]
w95io.c patch: remove WINCE and Win9x support
https://hg.mozilla.org/projects/nspr/rev/141140050d0e
Attachment #714174 -
Flags: checked-in+
Comment 21•12 years ago
|
||
Comment on attachment 714179 [details] [diff] [review]
Part 1: support Win32/arm, v2, by Makoto Kato
https://hg.mozilla.org/projects/nspr/rev/0c076527d529
Attachment #714179 -
Flags: checked-in+
Comment 22•12 years ago
|
||
Comment on attachment 710046 [details] [diff] [review]
Part 2: build config part
Review of attachment 710046 [details] [diff] [review]:
-----------------------------------------------------------------
Sorry this took so long. This looks fine.
::: configure.in
@@ +66,5 @@
> HOST_LDFLAGS="${HOST_LDFLAGS=}"
>
> case "$target" in
> +arm-*-mingw*)
> + dnl Win32/arm is corss target only
spelling: "cross"
@@ +1109,5 @@
> thumb_flag="-marm"
> ;;
> *)
> + if test "$GNU_CC"; then
> + dnl __thumb2__ is gcc only
Does the Microsoft arm toolchain support generating thumb2 code? If so you should look into supporting that.
Attachment #710046 -
Flags: review?(ted) → review+
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•