On Thursday 07 May 2009, Thomas Kindler wrote:
> Hendrik Sattler wrote:
> > Zitat von Thomas Kindler <mail+cm...@t-kindler.de>:
> >> cmake tries to use cygwin-style absolute "/home/tkindler.." paths,
> >> which arm-none-eabi-gcc doesn't seem to like (being a native win32
> >> program).
> >>
> >> My old makefile used relative paths to invoke the compiler. How can I
> >> do this in cmake generated makefiles?!
> >>
> >> Prepending "c:/cygwin/" to all paths should also solve the problem.
> >
> > If you have a native compiler, use the native compiled cmake. If you
> > have a compiler/tool that depends on cygwin, use the cygwin-compiled
> > cmake. Living in both worlds (native vs. cygwin) is a major pain. Just
> > don't.
>
> Ok.. that part seems to work after installing the native windows cmake.
>
> The resulting binary is still not usable -- cmake inserts an "-fPIC"
> linker flag.
>
>    arm-none-eabi-gcc.exe  -fPIC $(stm32test_OBJECTS)  [..]
>
> How can I switch that off?

This is when you link an executable, right ?
Please have a look at Modules/Platform/gcc.cmake. There this is set for 
CMAKE_SHARED_LIBRARY_CXX_FLAGS and CMAKE_SHARED_LIBRARY_C_FLAGS. Does it go 
away for you if you remove it there ?

> I also need to specify a special linker script for my target. In my
> plain old makefile I just added -Tstm32f10x.ld to my linker command line.
>
> What's the official cmake way to add custom linker flags?!
>
> Adding it to target_link_libraries( .. )  seems to work, but feels wrong.

Yes.
You can do two things: you could use 
LINK_LIBRARIES(-Tstm32f10x.ld)
early enough in your project, then this should be used for all targets when 
they are linked.
The other, better option is to set the CMAKE_C_LINK_EXECUTABLE, 
CMAKE_C_CREATE_SHARED_LIBRARY, CMAKE_C_CREATE_SHARED_MODULE and 
CMAKE_C_CREATE_STATIC_LIBRARY variables (see Modules/CMakeCInformation.cmake 
for the default settings, which also apply to gcc, and e.g. 
Modules/Platform/Generic-SDCC-C.cmake or Modules/Platform/eCos.cmake for 
files for embedded systems without shared libs).

Please have a look at Modules/Platform/Generic.cmake.
It states that to adjust the commands for your target platform, you should set 
CMAKE_SYSTEM_PROCESSOR to a string value which describes your concrete 
target, e.g. "stm32-kindler" in your toolchain file.
If you do this, then cmake will try to load a 
Generic-GNU-C-stm32-kindler.cmake file, where you can adjust the settings to 
as necessary. If this file is not found, it will try to load 
Generic-gcc-stm32-kindler.cmake.
(if you are using C++, you need to do the same also with "CXX" instead of "C".

Does that help ?

> Also: Right now, I have to invoke cmake by this lengthy command:
>
>    cmake -DCMAKE_TOOLCHAIN_FILE=CodeSourcery.cmake -G"Unix Makefiles" .
>
> when compiling the project for the first time.  How can I specify a
> default toolchain and generator in the CMakeLists.txt itself?

You are right, this is somewhat lengthy. Does your cmake come with cmake-gui 
(I'm not sure whether it's part of the cygwin cmake and since which version 
it is shipped exactly). This makes this easier.

Alex
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to