if(NOT COMMAND check_cxx_source_compiles)
  include(CheckCXXSourceCompiles)
endif()

macro(define_target_variables)
  check_cxx_source_compiles("int main() { return __i386__; }" i386)
  check_cxx_source_compiles("int main() { return __x86_64__; }" x86_64)
  check_cxx_source_compiles("int main() { return __s390__; }" s390)
if(APPLE)
  check_cxx_source_compiles("int main() { return __arm64__; }" ARM)
  check_cxx_source_compiles("int main() { return __ppc64__; }" PPC64)
  check_cxx_source_compiles("int main() { return __ppc__; }" PPC)
else()
  check_cxx_source_compiles("int main() { return __arm__; }" ARM)
  check_cxx_source_compiles("int main() { return __PPC64__; }" PPC64)
  check_cxx_source_compiles("int main() { return __PPC__; }" PPC)
endif()
  check_cxx_source_compiles("int main() { return __FreeBSD__; }" FreeBSD)
  check_cxx_source_compiles("int main() { return __MINGW__; }" MINGW)
  check_cxx_source_compiles("int main() { return __linux; }" LINUX)
  check_cxx_source_compiles("int main() { return __APPLE__; }" OSX)
endmacro()
