167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===- TestLinkerTest.cpp -------------------------------------------------===//
267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//                     The MCLinker Project
467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// This file is distributed under the University of Illinois Open Source
667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// License. See LICENSE.TXT for details.
767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//
867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include "Linker/TestLinker.h"
1067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include "TestLinkerTest.h"
1167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
1267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/Support/Path.h>
1367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/MC/MCLDDirectory.h>
1467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
1567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaousing namespace mcld;
1667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaousing namespace mcld::test;
1767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaousing namespace mcld::sys::fs;
1867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaousing namespace mcldtest;
1967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
2067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// Constructor can do set-up work for all test here.
2267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei LiaoTestLinkerTest::TestLinkerTest()
2367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  : m_pLinker(NULL) {
2467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
2567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
2667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// Destructor can do clean-up work that doesn't throw exceptions here.
2767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei LiaoTestLinkerTest::~TestLinkerTest()
2867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
2967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
3067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// SetUp() will be called immediately before each test.
3267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaovoid TestLinkerTest::SetUp()
3367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
3467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker = new mcld::test::TestLinker();
3567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->initialize("arm-none-linux-gnueabi");
3667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // set up target-dependent constraints of attributes
3867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->attrFactory().constraint().enableWholeArchive();
3967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->attrFactory().constraint().disableAsNeeded();
4067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->attrFactory().constraint().setSharedSystem();
4167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // set up the predefined attributes
4367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->attrFactory().predefined().setWholeArchive();
4467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->attrFactory().predefined().setDynamic();
4567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // set up target dependent options
4767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::sys::fs::Path path = TOPDIR;
4867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  path.append("test/libs/ARM/Android/android-14");
49cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  m_pLinker->setSysRoot(path);
50cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao  m_pLinker->addSearchDir("=/");
51cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
5267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->options().setDyld("/usr/lib/ld.so.1");
5367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->options().setBsymbolic(true);
5467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
5567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
5667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// TearDown() will be called immediately after each test.
5767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaovoid TestLinkerTest::TearDown()
5867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{
5967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  delete m_pLinker;
6067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
6167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
6267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
6367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// Testcases
6467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===//
6567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei LiaoTEST_F( TestLinkerTest, test) {
6667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->config()->options().setVerbose(3);
6767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  mcld::sys::fs::Path top_level = TOPDIR;
6867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addObject(top_level + "test/libs/ARM/Android/android-14/crtbegin_so.o");
6967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addObject(top_level + "test/Android/Plasma/ARM/plasma.o");
7067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addNameSpec("m");
7167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addNameSpec("log");
7267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addNameSpec("jnigraphics");
7367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addNameSpec("c");
7467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  m_pLinker->addObject(top_level + "test/libs/ARM/Android/android-14/crtend_so.o");
7567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}
7667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
77