if(MSVC)
  add_compile_options(
      $<$<CONFIG:>:/MT> #---------|
      $<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
      $<$<CONFIG:Release>:/MT> #--|
  )
endif()

# Turn on strict compiler flags only for testing to allow better compatability with diverse platforms.
if(UNIT_TESTING)
  if(MSVC)
    if(WARNINGS_AS_ERRORS)
      set(WARNINGS_AS_ERRORS_FLAG "/WX")
      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /WX")
    endif()

    add_compile_options(/W4 ${WARNINGS_AS_ERRORS_FLAG} /wd5031 /wd4668 /wd4820 /wd4255 /wd4710 /analyze)
  elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
    if(WARNINGS_AS_ERRORS)
      set(WARNINGS_AS_ERRORS_FLAG "-Werror")
    endif()

    add_compile_options(-Xclang -Wall -Wextra -pedantic  ${WARNINGS_AS_ERRORS_FLAG} -Wdocumentation -Wdocumentation-unknown-command -fcomment-block-commands=retval -Wcast-qual -Wunused -Wuninitialized -Wmissing-declarations -Wconversion -Wpointer-arith -Wshadow -Wfloat-equal)
  elseif(CMAKE_C_COMPILER_ID MATCHES "GNU")
    if(WARNINGS_AS_ERRORS)
      set(WARNINGS_AS_ERRORS_FLAG "-Werror")
    endif()

    add_compile_options(-Wall -Wextra -pedantic  ${WARNINGS_AS_ERRORS_FLAG} -Wcast-qual -Wunused -Wuninitialized -Wmissing-declarations -Wconversion -Wpointer-arith -Wshadow -Wlogical-op -Wfloat-equal)
  else()
    message(WARNING "Using an unsupported compiler. Disabling stricter compiler flags.")
  endif()
endif()
