[CMake] Updated WinCE CMakefiles

Clemens Arth clemens.arth at gmx.at
Tue Sep 30 04:39:07 EDT 2008


Andreas,

I had a look at your modified files and, like the old ones, they seem to 
work quite well. However, there are some things that are somehow unclear 
to me or cause problems here:

First, in WinCE.cmake, you replace the decimal string of the system 
version CMAKE_SYSTEM_VERSION, which does not work in my case. Although 
WM5 is considered as 5.1 and WM6 as 5.2, this causes a version of 0x51 
and 0x52 respectively, which should be 0x501 and 0x502, otherwise 
compilation fails with some error like "versions of Windows CE < 3.0 are 
not supported". Changing your syntax to

STRING(REGEX REPLACE "([0-9]*)\\.([0-9]*)" "0x\\10\\2" 
CMAKE_SYSTEM_VERSION_HEX "${CMAKE_SYSTEM_VERSION}")

fixes this in my case. I now wrote some generator for Visual Studio 
which only takes a cached CMAKE_SYSTEM_NAME variable and, thus selects 
the right toolchain. I further modified your WinCE.cmake(-cl) 
configuration to WM5.cmake(-cl) to contain additional flags needed. Also 
a cached variable PLATFORM_SDKS is used that selects only those 
platforms from the set of all platforms installed. This works pretty 
well, as one simply has to create this cache file first, and the rest 
works as expected. I still have to modify the original files in the 
modules directory responsible for the test build, because the test 
compile uses the right compiler in VDSIR/VC/ce/bin/x86_arm, but cannot 
link the test program due to a missing entry point.

I tried using your WinCE file for generating NMake Makefiles without 
caching anything and by typing

"cmake.exe -G"NMake Makefiles" -DCMAKE_SYSTEM_NAME=WINCE"

This fails here because it tries to link the coredll.lib trying to 
compile the simple test program. I'm not sure if this is the error you 
mentioned, because whatever I try to test-compile it tells me that he 
uses the cl.exe located in VSDIR/VC/bin, which is not an embedded 
compiler anyway. However, I'm sure that internally it uses the right 
compiler to compile the program, and the information message about what 
cl is used is simply wrong. How do you get your project configured for 
Makefiles?

Regards
Clemens


Andreas Pokorny schrieb:
> Hi there,
> I have attached a zip with slightly cleaned up WinCE and Windows
> Platform files. I modified the check
> that tries to decide whether cl builds for x86 or amd64, at least
> thats what I thought it was doing.
>
> Now there is a check that inspects an object file of cl, then sets
> respective flags to link.exe.
> The check only happens when building Makefiles, hence the /machine
> linker flag is only set when
> generating makefiles. I assume visual studio would do the right
> thing(tm), since it should be possible
> to select the SDK and platform inside the IDE, if I am not mistaken.
>
> There are some remaining issues:
> * the flag /RTC[1] is not supported by cl vs2005 for arm at least
>   - is there a cmake macro that checks if a compiler flag is supported?
> * when not using thumb code, one cannot use the libs provided with an
> ARM SDK, hence
>   setting coredll.lib and friends breaks the build
> * If I am not mistaken there is yet no clean facility to specify the
> libpath and include path
>   from the toolchain file
>
> Please review.
>
> In the following days I will try to use Clemens patch for the visual
> studio generators.
>
> kind regards
> Andreas Pokorny
>   



More information about the CMake mailing list