C++程序  |  77行  |  2.45 KB

//===- TestLinkerTest.cpp -------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "Linker/TestLinker.h"
#include "TestLinkerTest.h"

#include <mcld/Support/Path.h>
#include <mcld/MC/MCLDDirectory.h>

using namespace mcld;
using namespace mcld::test;
using namespace mcld::sys::fs;
using namespace mcldtest;


// Constructor can do set-up work for all test here.
TestLinkerTest::TestLinkerTest()
  : m_pLinker(NULL) {
}

// Destructor can do clean-up work that doesn't throw exceptions here.
TestLinkerTest::~TestLinkerTest()
{
}

// SetUp() will be called immediately before each test.
void TestLinkerTest::SetUp()
{
  m_pLinker = new mcld::test::TestLinker();
  m_pLinker->initialize("arm-none-linux-gnueabi");

  // set up target-dependent constraints of attributes
  m_pLinker->config()->attrFactory().constraint().enableWholeArchive();
  m_pLinker->config()->attrFactory().constraint().disableAsNeeded();
  m_pLinker->config()->attrFactory().constraint().setSharedSystem();

  // set up the predefined attributes
  m_pLinker->config()->attrFactory().predefined().setWholeArchive();
  m_pLinker->config()->attrFactory().predefined().setDynamic();

  // set up target dependent options
  mcld::sys::fs::Path path = TOPDIR;
  path.append("test/libs/ARM/Android/android-14");
  m_pLinker->setSysRoot(path);
  m_pLinker->addSearchDir("=/");

  m_pLinker->config()->options().setDyld("/usr/lib/ld.so.1");
  m_pLinker->config()->options().setBsymbolic(true);
}

// TearDown() will be called immediately after each test.
void TestLinkerTest::TearDown()
{
  delete m_pLinker;
}

//===----------------------------------------------------------------------===//
// Testcases
//===----------------------------------------------------------------------===//
TEST_F( TestLinkerTest, test) {
  m_pLinker->config()->options().setVerbose(3);
  mcld::sys::fs::Path top_level = TOPDIR;
  m_pLinker->addObject(top_level + "test/libs/ARM/Android/android-14/crtbegin_so.o");
  m_pLinker->addObject(top_level + "test/Android/Plasma/ARM/plasma.o");
  m_pLinker->addNameSpec("m");
  m_pLinker->addNameSpec("log");
  m_pLinker->addNameSpec("jnigraphics");
  m_pLinker->addNameSpec("c");
  m_pLinker->addObject(top_level + "test/libs/ARM/Android/android-14/crtend_so.o");
}