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