X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=tools%2Fllvm-config%2Fllvm-config.in.in;h=296ba4266d004dab462118254f6de5686c75b249;hp=1760b02418fd87b9c7fd89e7cc6d58586f5ca717;hb=234d529e582963ad4b5d83b911cd057fe99d1435;hpb=7f71e219721a3508988382020e9df9ac27b84523 diff --git a/tools/llvm-config/llvm-config.in.in b/tools/llvm-config/llvm-config.in.in index 1760b02418f..296ba4266d0 100644 --- a/tools/llvm-config/llvm-config.in.in +++ b/tools/llvm-config/llvm-config.in.in @@ -1,39 +1,102 @@ #!@PERL@ +##===- tools/llvm-config ---------------------------------------*- perl -*-===## +# +# The LLVM Compiler Infrastructure # -# Program: llvm-config +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## # # Synopsis: Prints out compiler options needed to build against an installed # copy of LLVM. # # Syntax: llvm-config OPTIONS... [COMPONENTS...] -# -# This file was written by Eric Kidd, and is placed into the public domain. -# +# +##===----------------------------------------------------------------------===## use 5.006; use strict; use warnings; #---- begin autoconf values ---- +my $PACKAGE_NAME = q{@PACKAGE_NAME@}; my $VERSION = q{@PACKAGE_VERSION@}; my $PREFIX = q{@LLVM_PREFIX@}; -my $BINDIR = q{@LLVM_BINDIR@}; -my $INCLUDEDIR = q{@LLVM_INCLUDEDIR@}; -my $LIBDIR = q{@LLVM_LIBDIR@}; +my $LLVM_CONFIGTIME = q{@LLVM_CONFIGTIME@}; +my $LLVM_SRC_ROOT = q{@abs_top_srcdir@}; +my $LLVM_OBJ_ROOT = q{@abs_top_builddir@}; +my $LLVM_ON_WIN32 = q{@LLVM_ON_WIN32@}; +my $LLVM_ON_UNIX = q{@LLVM_ON_UNIX@}; +my $LLVMGCCDIR = q{@LLVMGCCDIR@}; +my $LLVMGCC = q{@LLVMGCC@}; +my $LLVMGXX = q{@LLVMGXX@}; +my $LLVMGCC_VERSION = q{@LLVMGCC_VERSION@}; +my $LLVMGCC_MAJVERS = q{@LLVMGCC_MAJVERS@}; +my $ENDIAN = q{@ENDIAN@}; +my $SHLIBEXT = q{@SHLIBEXT@}; +my $EXEEXT = q{@EXEEXT@}; +my $OS = q{@OS@}; my $ARCH = lc(q{@ARCH@}); +my $TARGET_TRIPLE = q{@target@}; +my $TARGETS_TO_BUILD = q{@TARGETS_TO_BUILD@}; my $TARGET_HAS_JIT = q{@TARGET_HAS_JIT@}; my @TARGETS_BUILT = map { lc($_) } qw{@TARGETS_TO_BUILD@}; #---- end autoconf values ---- +# Must pretend x86_64 architecture is really x86, otherwise the native backend +# won't get linked in. +$ARCH = "x86" if $ARCH eq "x86_64"; + #---- begin Makefile values ---- +my $CPPFLAGS = q{@LLVM_CPPFLAGS@}; +my $CFLAGS = q{@LLVM_CFLAGS@}; my $CXXFLAGS = q{@LLVM_CXXFLAGS@}; my $LDFLAGS = q{@LLVM_LDFLAGS@}; -my $CORE_IS_ARCHIVE = q{@CORE_IS_ARCHIVE@}; +my $SYSTEM_LIBS = q{@LIBS@}; +my $LLVM_BUILDMODE = q{@LLVM_BUILDMODE@}; #---- end Makefile values ---- +# Figure out where llvm-config is being run from. Primarily, we care if it has +# been installed, or is running from the build directory, which changes the +# locations of some files. + +# Convert the current executable name into its directory (e.g. "."). +my ($RUN_DIR) = ($0 =~ /^(.*)\/.*$/); + +# Find the unix pwd program: we don't want to use the bash builtin, as it does +# not look through symlinks etc. +my $PWD = `which pwd`; +chomp($PWD); +$PWD = "pwd" if (!-e $PWD); + +# Turn the directory into an absolute directory on the file system, also pop up +# from "bin" into the build or prefix dir. +my $ABS_RUN_DIR = `cd $RUN_DIR/..; $PWD`; +chomp($ABS_RUN_DIR); + +# Compute the absolute object directory build, e.g. "foo/llvm/Debug". +my $ABS_OBJ_ROOT = "$LLVM_OBJ_ROOT/$LLVM_BUILDMODE"; +$ABS_OBJ_ROOT = `cd $ABS_OBJ_ROOT; $PWD` if (-d $ABS_OBJ_ROOT); +chomp($ABS_OBJ_ROOT); + +my $INCLUDEDIR = "$ABS_RUN_DIR/include"; +my $LIBDIR = "$ABS_RUN_DIR/lib"; +my $BINDIR = "$ABS_RUN_DIR/bin"; +if ($ABS_RUN_DIR eq $ABS_OBJ_ROOT) { + # If we are running out of the build directory, the include dir is in the + # srcdir. + $INCLUDEDIR = "$LLVM_SRC_ROOT/include"; +} else { + # If installed, ignore the prefix the tree was configured with, use the + # current prefix. + $PREFIX = $ABS_RUN_DIR; +} + sub usage; sub fix_library_names (@); -sub expand_dependecies (@); +sub fix_library_files (@); +sub expand_dependencies (@); sub name_map_entries; # Parse our command-line arguments. @@ -42,6 +105,7 @@ my @components; my $has_opt = 0; my $want_libs = 0; my $want_libnames = 0; +my $want_libfiles = 0; my $want_components = 0; foreach my $arg (@ARGV) { if ($arg =~ /^-/) { @@ -55,18 +119,32 @@ foreach my $arg (@ARGV) { $has_opt = 1; print "$INCLUDEDIR\n"; } elsif ($arg eq "--libdir") { $has_opt = 1; print "$LIBDIR\n"; + } elsif ($arg eq "--cppflags") { + $has_opt = 1; print "-I$INCLUDEDIR $CPPFLAGS\n"; + } elsif ($arg eq "--cflags") { + $has_opt = 1; print "-I$INCLUDEDIR $CFLAGS\n"; } elsif ($arg eq "--cxxflags") { $has_opt = 1; print "-I$INCLUDEDIR $CXXFLAGS\n"; } elsif ($arg eq "--ldflags") { - $has_opt = 1; print "-L$LIBDIR $LDFLAGS\n"; + $has_opt = 1; print "-L$LIBDIR $LDFLAGS $SYSTEM_LIBS\n"; } elsif ($arg eq "--libs") { $has_opt = 1; $want_libs = 1; } elsif ($arg eq "--libnames") { $has_opt = 1; $want_libnames = 1; + } elsif ($arg eq "--libfiles") { + $has_opt = 1; $want_libfiles = 1; } elsif ($arg eq "--components") { $has_opt = 1; print join(' ', name_map_entries), "\n"; } elsif ($arg eq "--targets-built") { $has_opt = 1; print join(' ', @TARGETS_BUILT), "\n"; + } elsif ($arg eq "--host-target") { + $has_opt = 1; print "$TARGET_TRIPLE\n"; + } elsif ($arg eq "--build-mode") { + $has_opt = 1; print "$LLVM_BUILDMODE\n"; + } elsif ($arg eq "--obj-root") { + $has_opt = 1; print `cd $LLVM_OBJ_ROOT/; $PWD`; + } elsif ($arg eq "--src-root") { + $has_opt = 1; print `cd $LLVM_SRC_ROOT/; $PWD`; } else { usage(); } @@ -83,15 +161,15 @@ if (@components == 0) { push @components, 'all'; } +# Force component names to lower case. +@components = map lc, @components; + # Handle any arguments which require building our dependency graph. -if ($want_libs || $want_libnames) { - my @libs = expand_dependecies(@components); - if ($want_libs) { - print join(' ', fix_library_names(@libs)), "\n"; - } - if ($want_libnames) { - print join(' ', @libs), "\n"; - } +if ($want_libs || $want_libnames || $want_libfiles) { + my @libs = expand_dependencies(@components); + print join(' ', fix_library_names(@libs)), "\n" if ($want_libs); + print join(' ', @libs), "\n" if ($want_libnames); + print join(' ', fix_library_files(@libs)), "\n" if ($want_libfiles); } exit 0; @@ -111,21 +189,28 @@ LLVM. Typically called from 'configure' scripts. Examples: llvm-config --libs engine bcreader scalaropts Options: - --version LLVM version. - --prefix Installation prefix. - --bindir Directory containing LLVM executables. - --includedir Directory containing LLVM headers. - --libdir Directory containing LLVM libraries. - --cxxflags C++ compiler flags for files that include LLVM headers. - --ldflags Linker flags. - --libs Libraries needed to link against LLVM components. - --libnames Bare library names for in-tree builds. - --components List of all possible components. - --targets-built List of all targets currently built. + --version Print LLVM version. + --prefix Print the installation prefix. + --src-root Print the source root LLVM was built from. + --obj-root Print the object root used to build LLVM. + --bindir Directory containing LLVM executables. + --includedir Directory containing LLVM headers. + --libdir Directory containing LLVM libraries. + --cppflags C preprocessor flags for files that include LLVM headers. + --cflags C compiler flags for files that include LLVM headers. + --cxxflags C++ compiler flags for files that include LLVM headers. + --ldflags Print Linker flags. + --libs Libraries needed to link against LLVM components. + --libnames Bare library names for in-tree builds. + --libfiles Fully qualified library filenames for makefile depends. + --components List of all possible components. + --targets-built List of all targets currently built. + --host-target Target triple used to configure LLVM. + --build-mode Print build mode of LLVM tree (e.g. Debug or Release). Typical components: - all All LLVM libraries (default). - backend Either a native backend or the C backend. - engine Either a native JIT or a bytecode interpreter. + all All LLVM libraries (default). + backend Either a native backend or the C backend. + engine Either a native JIT or a bytecode interpreter. __EOD__ exit(1); } @@ -147,6 +232,16 @@ sub fix_library_names (@) { return @result; } +# Turn the list of libraries into a list of files. +sub fix_library_files(@) { + my @libs = @_; + my @result; + foreach my $lib (@libs) { + # Transform the bare library name into a filename. + push @result, "$LIBDIR/$lib"; + } + return @result; +} #========================================================================== # Library Dependency Analysis @@ -170,7 +265,6 @@ sub find_best_engine; sub expand_names (@); sub find_all_required_sets (@); sub find_all_required_sets_helper ($$@); -sub maybe_fix_core (@); # Each "set" contains one or more libraries which must be included as a # group (due to cyclic dependencies). Sets are represented as a Perl array @@ -187,17 +281,16 @@ my $DEPENDENCIES_LOADED = 0; # Given a list of human-friendly component names, translate them into a # complete set of linker arguments. -sub expand_dependecies (@) { +sub expand_dependencies (@) { my @libs = @_; load_dependencies; my @required_sets = find_all_required_sets(expand_names(@libs)); my @sorted_sets = topologically_sort_sets(@required_sets); - # Expand the library sets into libraries, and apply any - # platform-specific hackery. + # Expand the library sets into libraries. my @result; foreach my $set (@sorted_sets) { push @result, @{$set}; } - return maybe_fix_core(@result); + return @result; } # Load in the raw dependency data stored at the end of this file. @@ -206,7 +299,7 @@ sub load_dependencies { $DEPENDENCIES_LOADED = 1; while () { # Parse our line. - my ($libs, $deps) = /^(^[^:]+): ?(.*)$/; + my ($libs, $deps) = /^\s*([^:]+):\s*(.*)\s*$/; die "Malformed dependency data" unless defined $deps; my @libs = split(' ', $libs); my @deps = split(' ', $deps); @@ -353,21 +446,6 @@ sub topologically_sort_sets (@) { return reverse(@result); } -# Nasty hack to work around the fact that LLVMCore changes file type on -# certain platforms. -sub maybe_fix_core (@) { - my @libs = @_; - my @result; - foreach my $lib (@libs) { - if ($lib eq "LLVMCore.o" && $CORE_IS_ARCHIVE) { - push @result, "libLLVMCore.a"; - } else { - push @result, $lib; - } - } - return @result; -} - # Our library dependency data will be added after the '__END__' token, and will # be read through the magic filehandle. __END__