Skip to content

Syntax only build support (-fsyntax-only)

It would be great if there was a syntax only build mode. Some the issues and benefits are discussed in this old email conversation.

Here is a hacky, brittle, mostly untested, and unix only approach to doing this right now:

option(SYNTAX_ONLY "only check syntax (-fsyntax-only)" OFF)

if(SYNTAX_ONLY)
  if (NOT ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR 
    (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")))
    message(FATAL_ERROR 
      "only clang and gcc support -fsyntax-only, using ${CMAKE_CXX_COMPILER_ID}")
  endif()

  add_compile_options(-fsyntax-only)

  set(CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT} && touch <OBJECT>")
  set(CMAKE_CXX_CREATE_SHARED_LIBRARY "touch <TARGET>")
  set(CMAKE_CXX_CREATE_SHARED_MODULE "touch <TARGET>")
  set(CMAKE_CXX_LINK_EXECUTABLE "touch <TARGET>")
  set(CMAKE_CXX_ARCHIVE_CREATE "touch <TARGET>")
  set(CMAKE_CXX_ARCHIVE_APPEND "touch <TARGET>")
  set(CMAKE_CXX_ARCHIVE_FINISH "touch <TARGET>")

  # copy paste for c, qt, cuda, etc...

  # cuda also requires:
  set(CMAKE_CUDA_COMPILE_PTX_COMPILATION 
    "${CMAKE_CUDA_COMPILE_PTX_COMPILATION} && touch <OBJECT>")
  set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION 
    "${CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION} && touch <OBJECT>")
  set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION 
    "${CMAKE_CUDA_COMPILE_WHOLE_COMPILATION} && touch <OBJECT>")
  set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE "touch <TARGET>")
  set(CMAKE_CUDA_DEVICE_LINK_LIBRARY "touch <TARGET>")
  set(CMAKE_CUDA_DEVICE_LINK_COMPILE "touch <TARGET>")
endif()
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information