1bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#!/usr/bin/perl
2bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
3bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
4bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# File Name:  build_vc.pl
5bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# OpenMAX DL: v1.0.2
6bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Revision:   9641
7bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Date:       Thursday, February 7, 2008
8bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
9bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
10bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
11bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
12bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
13bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# This file builds the OpenMAX DL vc domain library omxVC.o.
14bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#
15bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
16bebc99d6fa433c04139294a5057f8439d772dbd9James Donguse File::Spec;
17bebc99d6fa433c04139294a5057f8439d772dbd9James Donguse strict;
18bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
19bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmy ($CC, $CC_OPTS, $AS, $AS_OPTS, $LIB, $LIB_OPTS, $LIB_TYPE);
20bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
21bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$CC       = 'armcc';
22bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$CC_OPTS  = '--no_unaligned_access --cpu ARM7TDMI -c';
23bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$AS       = 'armasm';
24bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$AS_OPTS  = '--no_unaligned_access --cpu ARM7TDMI';
25bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# $LIB      = 'armlink';
26bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# $LIB_OPTS = '--partial -o';
27bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# $LIB_TYPE = '.o';
28bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$LIB      = 'armar';
29bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$LIB_OPTS = '--create -r';
30bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$LIB_TYPE = '.a';
31bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
32bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#------------------------
33bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
34bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmy (@headerlist, @filelist, $hd, $file, $ofile, $command, $objlist, $libfile, $h);
35bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
36bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Define the list of directories containing included header files.
37bebc99d6fa433c04139294a5057f8439d772dbd9James Dong@headerlist = qw(api vc/api vc/m4p2/api vc/m4p10/api);
38bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
39bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Define the list of source files to compile.
40bebc99d6fa433c04139294a5057f8439d772dbd9James Dongopen(FILES, '<filelist_vc.txt') or die("Can't open source file list\n");
41bebc99d6fa433c04139294a5057f8439d772dbd9James Dong@filelist = <FILES>;
42bebc99d6fa433c04139294a5057f8439d772dbd9James Dongclose(FILES);
43bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
44bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Fix the file separators in the header paths
45bebc99d6fa433c04139294a5057f8439d772dbd9James Dongforeach $h (@headerlist)
46bebc99d6fa433c04139294a5057f8439d772dbd9James Dong{
47bebc99d6fa433c04139294a5057f8439d772dbd9James Dong        $h = File::Spec->canonpath($h);
48bebc99d6fa433c04139294a5057f8439d772dbd9James Dong}
49bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
50bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Create the include path to be passed to the compiler
51bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$hd = '-I' . join(' -I', @headerlist);
52bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
53bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Create the build directories "/lib/" and "/obj/" (if they are not there already)
54bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmkdir "obj", 0777 if (! -d "obj");
55bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmkdir "lib", 0777 if (! -d "lib");
56bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
57bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$objlist = '';
58bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
59bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Compile each file
60bebc99d6fa433c04139294a5057f8439d772dbd9James Dongforeach $file (@filelist)
61bebc99d6fa433c04139294a5057f8439d772dbd9James Dong{
62bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	my $f;
63bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	my $base;
64bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	my $ext;
65bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	my $objfile;
66bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
67bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	chomp($file);
68bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	$file = File::Spec->canonpath($file);
69bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
70bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	(undef, undef, $f) = File::Spec->splitpath($file);
71bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	if(($base, $ext) = $f =~ /(.+)\.(\w)$/)
72bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	{
73bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		$objfile = File::Spec->catfile('obj', $base.'.o');
74bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
75bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		if($ext eq 'c')
76bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		{
77bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			$objlist .= "$objfile ";
78bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			$command = $CC.' '.$CC_OPTS.' '.$hd.' -o '.$objfile.' '.$file;
79bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			print "$command\n";
80bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			system($command);
81bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		}
82bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		elsif($ext eq 's')
83bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		{
84bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			$objlist .= "$objfile ";
85bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			$command = $AS.' '.$AS_OPTS.' '.$hd.' -o '.$objfile.' '.$file;
86bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			print "$command\n";
87bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			system($command);
88bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		}
89bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		else
90bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		{
91bebc99d6fa433c04139294a5057f8439d772dbd9James Dong			print "Ignoring file: $f\n";
92bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		}
93bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	}
94bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	else
95bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	{
96bebc99d6fa433c04139294a5057f8439d772dbd9James Dong		die "No file extension found: $f\n";
97bebc99d6fa433c04139294a5057f8439d772dbd9James Dong	}
98bebc99d6fa433c04139294a5057f8439d772dbd9James Dong}
99bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
100bebc99d6fa433c04139294a5057f8439d772dbd9James Dong# Do the final link stage to create the libraries.
101bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$libfile = File::Spec->catfile('lib', 'omxVC'.$LIB_TYPE);
102bebc99d6fa433c04139294a5057f8439d772dbd9James Dong$command = $LIB.' '.$LIB_OPTS.' '.$libfile.' '.$objlist;
103bebc99d6fa433c04139294a5057f8439d772dbd9James Dongprint "$command\n";
104bebc99d6fa433c04139294a5057f8439d772dbd9James Dong(system($command) == 0) and print "Build successful\n";
105bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
106bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
107bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
108bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
109bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
110bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
111bebc99d6fa433c04139294a5057f8439d772dbd9James Dong
112