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