1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

llvm-config-2: Implement build system support for getting the variables we only

know at build time.

llvm-svn: 143649
This commit is contained in:
Daniel Dunbar 2011-11-03 21:01:36 +00:00
parent 05c1ecf2c0
commit 6ed1f79da0
5 changed files with 109 additions and 10 deletions

View File

@ -17,9 +17,12 @@ if( NOT WIN32 OR MSYS OR CYGWIN )
# must keep llvm-config as the first entry on the list of tools to
# be built.
add_subdirectory(llvm-config)
# We currently require 'sed' to build llvm-config-2, so don't try to build it
# on pure Win32.
add_subdirectory(llvm-config-2)
endif()
add_subdirectory(llvm-config-2)
add_subdirectory(opt)
add_subdirectory(llvm-as)
add_subdirectory(llvm-dis)

View File

@ -0,0 +1,26 @@
//===-- BuildVariables.inc.in - llvm-config build variables -*- C++ -*-----===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file is configured by the build system to define the variables
// llvm-config wants to report to the user, but which can only be determined at
// build time.
//
// The non .in variant of this file has been autogenerated by the LLVM build. Do
// not edit!
//
//===----------------------------------------------------------------------===//
#define LLVM_SRC_ROOT "@LLVM_SRC_ROOT@"
#define LLVM_OBJ_ROOT "@LLVM_OBJ_ROOT@"
#define LLVM_CPPFLAGS "@LLVM_CPPFLAGS@"
#define LLVM_CFLAGS "@LLVM_CFLAGS@"
#define LLVM_LDFLAGS "@LLVM_LDFLAGS@"
#define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@"
#define LLVM_BUILDMODE "@LLVM_BUILDMODE@"
#define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@"

View File

@ -1,5 +1,41 @@
set(LLVM_LINK_COMPONENTS support)
# We need to generate the BuildVariables.inc file containing values which are
# only defined when under certain build modes. Unfortunately, that precludes
# doing this inside CMake so we have to shell out to sed. For now, that means we
# can't expect to build llvm-config on Window.s
set(BUILDVARIABLES_SRCPATH ${CMAKE_CURRENT_SOURCE_DIR}/BuildVariables.inc.in)
set(BUILDVARIABLES_OBJPATH ${CMAKE_CURRENT_BINARY_DIR}/BuildVariables.inc)
set(SEDSCRIPT_OBJPATH ${CMAKE_CURRENT_BINARY_DIR}/BuildVariables.configure.sed)
# Compute the substitution values for various items.
get_system_libs(LLVM_SYSTEM_LIBS_LIST)
foreach(l ${LLVM_SYSTEM_LIBS_LIST})
set(SYSTEM_LIBS ${SYSTEM_LIBS} "-l${l}")
endforeach()
set(C_FLGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}")
set(CXX_FLGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}")
set(CPP_FLGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}")
add_custom_command(OUTPUT ${BUILDVARIABLES_OBJPATH}
COMMAND echo s!@LLVM_SRC_ROOT@!${LLVM_MAIN_SRC_DIR}! > ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_OBJ_ROOT@!${LLVM_BINARY_DIR}! >> ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_CPPFLAGS@!${CPP_FLGS}! >> ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_CFLAGS@!${C_FLGS}! >> ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_CXXFLAGS@!${CXX_FLGS}! >> ${SEDSCRIPT_OBJPATH}
# TODO: Use general flags for linking! not just for shared libs:
COMMAND echo s!@LLVM_LDFLAGS@!${CMAKE_SHARED_LINKER_FLAGS}! >> ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_BUILDMODE@!${CMAKE_BUILD_TYPE}! >> ${SEDSCRIPT_OBJPATH}
COMMAND echo s!@LLVM_SYSTEM_LIBS@!${SYSTEM_LIBS}! >> ${SEDSCRIPT_OBJPATH}
COMMAND sed -f ${SEDSCRIPT_OBJPATH} < ${BUILDVARIABLES_SRCPATH} > ${BUILDVARIABLES_OBJPATH}
VERBATIM
COMMENT "Building BuildVariables.inc include."
)
# Add the llvm-config tool.
add_llvm_tool(llvm-config-2
llvm-config.cpp
)
# Add the dependency on the generation step.
add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH})

View File

@ -11,7 +11,47 @@ LEVEL := ../..
TOOLNAME := llvm-config-2
LINK_COMPONENTS := support
# We generate sources in the build directory, make sure it is in the include
# paths.
INCLUDE_BUILD_DIR := 1
# This tool has no plugins, optimize startup time.
TOOL_NO_EXPORTS := 1
# Note that we have to use lazy expansion here.
BUILDVARIABLES_SRCPATH = $(PROJ_SRC_ROOT)/tools/$(TOOLNAME)/BuildVariables.inc.in
BUILDVARIABLES_OBJPATH = $(ObjDir)/BuildVariables.inc
BUILT_SOURCES = $(BUILDVARIABLES_OBJPATH)
include $(LEVEL)/Makefile.common
# Combine preprocessor flags (except for -I) and CXX flags.
SUB_CPPFLAGS := ${CPP.BaseFlags}
SUB_CFLAGS := ${CPP.BaseFlags} ${C.Flags}
SUB_CXXFLAGS := ${CPP.BaseFlags} ${CXX.Flags}
# This is blank for now. We need to be careful about adding stuff here:
# LDFLAGS tend not to be portable, and we don't currently require the
# user to use libtool when linking against LLVM.
SUB_LDFLAGS :=
$(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir
$(Echo) "Building llvm-config BuildVariables.inc file."
$(Verb) $(ECHO) 's/@LLVM_SRC_ROOT@/$(subst /,\/,$(LLVM_SRC_ROOT))/' \
> temp.sed
$(Verb) $(ECHO) 's/@LLVM_OBJ_ROOT@/$(subst /,\/,$(LLVM_OBJ_ROOT))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_CPPFLAGS@/$(subst /,\/,$(SUB_CPPFLAGS))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_CFLAGS@/$(subst /,\/,$(SUB_CFLAGS))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_CXXFLAGS@/$(subst /,\/,$(SUB_CXXFLAGS))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_LDFLAGS@/$(subst /,\/,$(SUB_LDFLAGS))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_BUILDMODE@/$(subst /,\/,$(BuildMode))/' \
>> temp.sed
$(Verb) $(ECHO) 's/@LLVM_SYSTEM_LIBS@/$(subst /,\/,$(LIBS))/' \
>> temp.sed
$(Verb) $(SED) -f temp.sed < $< > $@
$(Verb) $(RM) temp.sed

View File

@ -33,15 +33,9 @@
using namespace llvm;
// FIXME: Need to get various bits of build time information.
const char LLVM_SRC_ROOT[] = "FIXME";
const char LLVM_OBJ_ROOT[] = "FIXME";
const char LLVM_CPPFLAGS[] = "FIXME";
const char LLVM_CFLAGS[] = "FIXME";
const char LLVM_LDFLAGS[] = "FIXME";
const char LLVM_CXXFLAGS[] = "FIXME";
const char LLVM_BUILDMODE[] = "FIXME";
const char LLVM_SYSTEM_LIBS[] = "FIXME";
// Include the build time variables we can report to the user. This is generated
// at build time from the BuildVariables.inc.in file by the build system.
#include "BuildVariables.inc"
// Include the component table. This creates an array of struct
// AvailableComponent entries, which record the component name, library name,