On Aug 24, 2009, at 12:48 PM, Tyler Roscoe wrote:
On Sun, Aug 23, 2009 at 09:03:22PM -0400, John Smith wrote:
I am using the following test case in an attempt to add a custom
command to build an assembly file. The assembly file should be
compiled with the C++ compiler driver (which in turn should invoke the
assembler after pre-processing), and I am building up a
CMAKE_CXX_FLAGS variable from separate pieces:

I think you can just hand your .S files to add_library(). Did you try
searching the ML archives or google for how to handle assembler files
with CMake?

I have tried doing that. However, the net end result is that I get a rule that invokes the assembler on the assembly source file. My top- level assembly source file is a shell containing a bunch of platform- specific conditionals, which in turn guard include directives for platform-specific assembly source files. Thus, I want to have the C++ compiler driver compile the top-level file; the compiler driver would first preprocess the include directives and then invoke the assembler on the resulting translation unit.

An example of such a technique is here: 
http://svn.apache.org/viewvc/stdcxx/trunk/src/atomic.s?revision=704153



set(CMAKE_CXX_FLAGS -m32)

When you do this, you clobber the pre-existing value of CMAKE_CXX_FLAGS, which has some defaults that are probably useful for your platform. Are
you sure this is what you want?

Poorly chosen example, my bad. The point was to show how a variable is constructed in my CMakeLists.txt and how it ends up being used.


[...]
add_library(test SHARED foo.cpp bar.S)

Yeah I think you're overthinking this. Look for some CMake examples that
use assembler and go from there.



Most surely I am over-thinking it. After more local testing I think I understand how variables are processed in the generation of commands. I started from the command include_directories which actually builds a *list* of tokens, each an include directory to be used in (a) makefile rule. I noticed that using such a list as ARGS to ADD_CUSTOM_COMMAND results in the splitting of the list in separate tokens, i.e.:

set(FOO a b c)
ADD_CUSTOM_COMMAND(...
  ARGS ${FOO}
  ...)

ends up in a rule like:

<CMD> a b c ...

However, strings set up as:

set (FOO "a b c")

end up in the rule as:

<CMD> a\ b\ c ...

Therefore, I conclude that ARGS require lists, not strings of concatenated, space-separated options. Am I right in this?

Thanks for the help.

-J
_______________________________________________
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