#!@PERL@ ##===- tools/llvm-config ---------------------------------------*- perl -*-===## # # The LLVM Compiler Infrastructure # # 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...] # ##===----------------------------------------------------------------------===## 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 $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 $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 fix_library_files (@); sub expand_dependencies (@); sub name_map_entries; # Parse our command-line arguments. usage if @ARGV == 0; 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 =~ /^-/) { if ($arg eq "--version") { $has_opt = 1; print "$VERSION\n"; } elsif ($arg eq "--prefix") { $has_opt = 1; print "$PREFIX\n"; } elsif ($arg eq "--bindir") { $has_opt = 1; print "$BINDIR\n"; } elsif ($arg eq "--includedir") { $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 $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(); } } else { push @components, $arg; } } # If no options were specified, fail. usage unless $has_opt; # If no components were specified, default to 'all'. 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 || $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; #========================================================================== # Support Routines #========================================================================== sub usage { print STDERR <<__EOD__; Usage: llvm-config