[CMake] Toolchain file for TI in CMake 3.10: how do I override compiler options and specify tools?

frodak17 frodak17 at gmail.com
Sat Feb 23 16:46:18 EST 2019


On Sat, Feb 23, 2019 at 2:24 PM Cristian Adam <cristian.adam at gmail.com>
wrote:

>
>
> On Sat, Feb 23, 2019 at 8:49 AM Jason Heeris <jason.heeris at gmail.com>
> wrote:
>
>> I am trying to use CMake (3.10) to build an ANSI C project that may be
>> compiled on PC with eg. GCC, but also needs to compile with Texas
>> Instruments' compilers for their microprocessors. So I have about a million
>> questions.
>>
>> According to[1] it seems like the way to do this is via a toolchain file.
>> So I'm trying to write a toolchain file to use TI's compiler/linker/etc,
>> which do not (always) take the same arguments as eg. GCC or Clang.
>>
>> Is there a complete list of tools I can override in a toolchain file?
>> Specifically, I want to set the C compiler, C++ compiler, assembler and
>> linker. I know about CMAKE_C(XX)_COMPILER, but what about the others? Are
>> they documented anywhere? (I could guess, but I don't think that's wise.)
>>
>> As I mentioned, TI's tools aren't the same as GCC, so I need to pare back
>> a lot of options and start from almost-scratch (there are some
>> commonalities). Options like "-D" and "-I" are fine, which is good because
>> then eg. target_include_directories() still works. But certain other flags
>> are just going to cause errors. How do I completely remove all compile
>> flags from the generated Makefiles and replace them with my own? I can do
>> this:
>>
>> set(CMAKE_C_FLAGS ${MINIMAL_FLAGS} CACHE STRING "" FORCE)
>> set(CMAKE_C_FLAGS_DEBUG ${MINIMAL_FLAGS} CACHE STRING "" FORCE)
>> set(CMAKE_C_FLAGS_RELEASE ${MINIMAL_FLAGS} CACHE STRING "" FORCE)
>> set(CMAKE_C_FLAGS_RELWITHDEBINFO ${MINIMAL_FLAGS} CACHE STRING "" FORCE)
>> set(CMAKE_C_FLAGS_MINSIZEREL ${MINIMAL_FLAGS} CACHE STRING "" FORCE)
>>
>> But I *still* see flags in the generated makefiles that I didn't put
>> there such as "--compile_only" and "--c_file=...". How do I get rid of
>> these and specify what's correct for my toolchain? (Also, why do I need the
>> CACHE STRING "" FORCE options? I pulled that out of various Stackoverflow
>> posts but I have no idea why it's necessary. Is that documented? What about
>> the configurations... where are they listed? Do I have them all?)
>>
>>
> Regarding the CMAKE_<LANG>_FLAGS_<CONFIG> have a look at this blog post:
> https://cristianadam.eu/20190223/modifying-the-default-cmake-build-types/
>
> You "just" need to modify the CMAKE_<LANG>_FLAGS_<CONFIG>_INIT variables,
> no need to force the cache entries.
>
> The "Modules" CMake folder is your friend, you can see how CMake handles
> other compilers.
> For debugging use CMake's "--trace-expand" command line parameter.
>
> Cheers,
> Cristian.
>
>
Take a look at Modules/CMakeCInformation.cmake.
Also CMAKE_USER_MAKE_RULES_OVERRIDE may be useful to you.
There are a few others that may also be used depending on what languages
you are trying to use.

StackOverflow isn't always correct even if something is marked as answered
and up-voted.

FYI, The "--compile_only" and "--c_file" probably come from the file
Modules/Compiler/TI-C.cmake.  At some point TI compilers were using those
options to build files but I guess in your case the compiler is no longer
compatible with what it used to be.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190223/1f4070bb/attachment-0001.html>


More information about the CMake mailing list