//===-- llvm/unittests/Target/TargetMachineOptionsTest.cpp ---------- //-----===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file contains unit tests for the opaque structure describing options /// for TargetMachine creation via the C API. /// //===----------------------------------------------------------------------===// #include "llvm-c/Core.h" #include "llvm-c/TargetMachine.h" #include "llvm/Config/llvm-config.h" #include "gtest/gtest.h" namespace llvm { TEST(TargetMachineCTest, TargetMachineOptions) { auto *Options = LLVMCreateTargetMachineOptions(); LLVMTargetMachineOptionsSetCPU(Options, "cortex-a53"); LLVMTargetMachineOptionsSetFeatures(Options, "+neon"); LLVMTargetMachineOptionsSetABI(Options, "aapcs"); LLVMTargetMachineOptionsSetCodeGenOptLevel(Options, LLVMCodeGenLevelNone); LLVMTargetMachineOptionsSetRelocMode(Options, LLVMRelocStatic); LLVMTargetMachineOptionsSetCodeModel(Options, LLVMCodeModelKernel); LLVMDisposeTargetMachineOptions(Options); } TEST(TargetMachineCTest, TargetMachineCreation) { LLVMInitializeAllTargets(); LLVMInitializeAllTargetInfos(); LLVMInitializeAllTargetMCs(); // Get the default target to keep the test as generic as possible. This may // not be a target for which we can generate code; in that case we give up. auto *Triple = LLVMGetDefaultTargetTriple(); if (strlen(Triple) == 0) { LLVMDisposeMessage(Triple); GTEST_SKIP(); } LLVMTargetRef Target = nullptr; char *Error = nullptr; if (LLVMGetTargetFromTriple(Triple, &Target, &Error)) FAIL() << "Failed to create target from default triple (" << Triple << "): " << Error; ASSERT_NE(Target, nullptr); if (!LLVMTargetHasTargetMachine(Target)) GTEST_SKIP() << "Default target doesn't support code generation"; // We don't know which target we're creating a machine for, so don't set any // non-default options; they might cause fatal errors. auto *Options = LLVMCreateTargetMachineOptions(); auto *TM = LLVMCreateTargetMachineWithOptions(Target, Triple, Options); ASSERT_NE(TM, nullptr); LLVMDisposeMessage(Triple); LLVMDisposeTargetMachineOptions(Options); LLVMDisposeTargetMachine(TM); } } // namespace llvm