//===- 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>
#include <mcld/MC/InputFactory.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()->attribute().constraint().enableWholeArchive();
  m_pLinker->config()->attribute().constraint().disableAsNeeded();
  m_pLinker->config()->attribute().constraint().setSharedSystem();

  // set up the predefined attributes
  m_pLinker->config()->attribute().predefined().setWholeArchive();
  m_pLinker->config()->attribute().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");
}

