Skip to content

Commit

Permalink
llvm-config: Replace with C++ version (was llvm-config-2).
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144300 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ddunbar committed Nov 10, 2011
1 parent f084e1d commit a6f5a81
Show file tree
Hide file tree
Showing 14 changed files with 69 additions and 938 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ endif()

set(LLVMBUILDTOOL "${LLVM_MAIN_SRC_DIR}/utils/llvm-build/llvm-build")
set(LLVMCONFIGLIBRARYDEPENDENCIESINC
"${LLVM_BINARY_DIR}/tools/llvm-config-2/LibraryDependencies.inc")
"${LLVM_BINARY_DIR}/tools/llvm-config/LibraryDependencies.inc")
set(LLVMBUILDCMAKEFRAG
"${LLVM_BINARY_DIR}/LLVMBuild.cmake")
message(STATUS "Constructing LLVMBuild project information")
Expand Down
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
LEVEL := .

# Top-Level LLVM Build Stages:
# 0. Execute llvm-build, to construct llvm-config library dependencies.
# 1. Build lib/Support and lib/TableGen, which are used by utils (tblgen).
# 2. Build utils, which is used by VMCore.
# 3. Build VMCore, which builds the Intrinsics.inc file used by libs.
# 4. Build libs, which are needed by llvm-config.
# 5. Build llvm-config, which determines inter-lib dependencies for tools.
# 6. Build tools, runtime, docs.
# 4. Build llvm-config, which determines inter-lib dependencies for tools.
# 5. Build tools, runtime, docs.
#
# When cross-compiling, there are some things (tablegen) that need to
# be build for the build system first.
Expand Down
7 changes: 6 additions & 1 deletion Makefile.rules
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ LLVMBuildTool := $(PROJ_SRC_ROOT)/utils/llvm-build/llvm-build
# The files we are going to generate using llvm-build.
LLVMBuildMakeFrag := $(PROJ_OBJ_ROOT)/Makefile.llvmbuild
LLVMConfigLibraryDependenciesInc := \
$(PROJ_OBJ_ROOT)/tools/llvm-config-2/LibraryDependencies.inc
$(PROJ_OBJ_ROOT)/tools/llvm-config/LibraryDependencies.inc

# The rule to create the LLVMBuild Makefile fragment as well as the llvm-config
# library table.
Expand Down Expand Up @@ -1006,11 +1006,16 @@ ifdef LINK_COMPONENTS

# If LLVM_CONFIG doesn't exist, build it. This can happen if you do a make
# clean in tools, then do a make in tools (instead of at the top level).
#
# We don't want these targets when actually building the LLVM_CONFIG tool
# itself, of course.
ifneq ($(TOOLNAME),llvm-config)
$(LLVM_CONFIG):
@echo "*** llvm-config doesn't exist - rebuilding it."
@$(MAKE) -C $(PROJ_OBJ_ROOT)/tools/llvm-config

$(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)
endif

ifeq ($(ENABLE_SHARED), 1)
# We can take the "auto-import" feature to get rid of using dllimport.
Expand Down
2 changes: 1 addition & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -21065,7 +21065,7 @@ if test -f ${srcdir}/tools/clang/README.txt; then

fi

ac_config_files="$ac_config_files tools/llvm-config/llvm-config.in"



ac_config_files="$ac_config_files bindings/ocaml/llvm/META.llvm"
Expand Down
11 changes: 2 additions & 9 deletions tools/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,9 @@ if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt )
endif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt )

if( NOT WIN32 OR MSYS OR CYGWIN )
# It is useful to build llvm-config before the other tools, so we
# have a fresh LibDeps.txt for regenerating the hard-coded library
# dependencies. llvm-config/CMakeLists.txt takes care of this but we
# must keep llvm-config as the first entry on the list of tools to
# be built.
# We currently require 'sed' to build llvm-config, so don't try to build it on
# pure Win32.
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(opt)
Expand Down
2 changes: 1 addition & 1 deletion tools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ PARALLEL_DIRS := opt llvm-as llvm-dis \
bugpoint llvm-bcanalyzer llvm-stub \
llvm-diff macho-dump llvm-objdump \
llvm-rtdyld llvm-dwarfdump llvm-cov \
llvm-size llvm-config-2
llvm-size

# Let users override the set of tools to build from the command line.
ifdef ONLY_TOOLS
Expand Down
41 changes: 0 additions & 41 deletions tools/llvm-config-2/CMakeLists.txt

This file was deleted.

57 changes: 0 additions & 57 deletions tools/llvm-config-2/Makefile

This file was deleted.

File renamed without changes.
151 changes: 27 additions & 124 deletions tools/llvm-config/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,138 +1,41 @@
include(TestBigEndian)
set(LLVM_LINK_COMPONENTS support)

include(FindPerl)
if( NOT PERL_FOUND )
message(FATAL_ERROR "Perl required but not found!")
endif( NOT PERL_FOUND )

set(PERL ${PERL_EXECUTABLE})
set(VERSION PACKAGE_VERSION)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(abs_top_srcdir ${LLVM_MAIN_SRC_DIR})
set(abs_top_builddir ${LLVM_BINARY_DIR})
execute_process(COMMAND date
OUTPUT_VARIABLE LLVM_CONFIGTIME
OUTPUT_STRIP_TRAILING_WHITESPACE)
# LLVM_ON_UNIX and LLVM_ON_WIN32 already set.
# those are set to blank by `autoconf' on MinGW, so it seems they are not required:
#set(LLVMGCCDIR "")
#set(LLVMGCC "")
#set(LLVMGXX "")
test_big_endian(IS_BIG_ENDIAN)
if( IS_BIG_ENDIAN )
set(ENDIAN "big")
else( IS_BIG_ENDIAN )
set(ENDIAN "little")
endif( IS_BIG_ENDIAN )
set(SHLIBEXT ${LTDL_SHLIB_EXT})
#EXEEXT already set.
set(OS "${CMAKE_SYSTEM}")
set(target "${TARGET_TRIPLE}")
set(ARCH "${LLVM_NATIVE_ARCH}")
# 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(LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS} "-l${l}")
set(SYSTEM_LIBS ${SYSTEM_LIBS} "-l${l}")
endforeach()

foreach(c ${LLVM_TARGETS_TO_BUILD})
set(TARGETS_BUILT "${TARGETS_BUILT} ${c}")
endforeach(c)
set(TARGETS_TO_BUILD ${TARGETS_BUILT})
set(TARGET_HAS_JIT "1") # TODO

# Avoids replacement at config-time:
set(LLVM_CPPFLAGS "@LLVM_CPPFLAGS@")
set(LLVM_CFLAGS "@LLVM_CFLAGS@")
set(LLVM_CXXFLAGS "@LLVM_CXXFLAGS@")
set(LLVM_LDFLAGS "@LLVM_LDFLAGS@")
set(LIBS "@LIBS@")
set(LLVM_BUILDMODE "@LLVM_BUILDMODE@")
set(LLVM_OBJ_SUFFIX "@LLVM_OBJ_SUFFIX@")

configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.in.in
${CMAKE_CURRENT_BINARY_DIR}/llvm-config.in
@ONLY
)

set(LIBDEPS LibDeps.txt)
set(LIBDEPS_TMP LibDeps.txt.tmp)
set(FINAL_LIBDEPS FinalLibDeps.txt)
set(LLVM_CONFIG ${LLVM_TOOLS_BINARY_DIR}/llvm-config)
set(LLVM_CONFIG_IN ${CMAKE_CURRENT_BINARY_DIR}/llvm-config.in)

if( CMAKE_CROSSCOMPILING )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
endif()

find_program(NM_PATH nm PATH_SUFFIXES /bin)

if( NOT NM_PATH )
message(FATAL_ERROR "`nm' not found")
endif()

get_property(llvm_libs GLOBAL PROPERTY LLVM_LIBS)

add_custom_command(OUTPUT ${LIBDEPS_TMP}
COMMAND ${PERL_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/GenLibDeps.pl -flat ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR} ${NM_PATH} > ${LIBDEPS_TMP}
DEPENDS ${llvm_libs}
COMMENT "Regenerating ${LIBDEPS_TMP}")

add_custom_command(OUTPUT ${LIBDEPS}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LIBDEPS_TMP} ${LIBDEPS}
DEPENDS ${LIBDEPS_TMP}
COMMENT "Updating ${LIBDEPS} if necessary...")

# This must stop the build if find-cycles.pl returns error:
add_custom_command(OUTPUT ${FINAL_LIBDEPS}
COMMAND ${CMAKE_COMMAND} -E remove -f ${FINAL_LIBDEPS} ${FINAL_LIBDEPS}.tmp
COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/find-cycles.pl < ${LIBDEPS} > ${FINAL_LIBDEPS}.tmp
COMMAND ${CMAKE_COMMAND} -E copy ${FINAL_LIBDEPS}.tmp ${FINAL_LIBDEPS}
DEPENDS ${LIBDEPS}
COMMENT "Checking for cyclic dependencies between LLVM libraries.")

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}")

# We don't want certain flags on the output of
# llvm-config --cflags --cxxflags
macro(remove_option_from_llvm_config option)
llvm_replace_compiler_option(C_FLGS "${option}" "")
llvm_replace_compiler_option(CXX_FLGS "${option}" "")
llvm_replace_compiler_option(CPP_FLGS "${option}" "")
endmacro(remove_option_from_llvm_config)
remove_option_from_llvm_config("-pedantic")
remove_option_from_llvm_config("-Wall")
remove_option_from_llvm_config("-W")

add_custom_command(OUTPUT ${LLVM_CONFIG}
COMMAND echo s!@LLVM_CPPFLAGS@!${CPP_FLGS}! > temp.sed
COMMAND echo s!@LLVM_CFLAGS@!${C_FLGS}! >> temp.sed
COMMAND echo s!@LLVM_CXXFLAGS@!${CXX_FLGS}! >> temp.sed
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}! >> temp.sed
COMMAND echo s!@LIBS@!${LLVM_SYSTEM_LIBS}! >> temp.sed
COMMAND echo s!@LLVM_BUILDMODE@!${CMAKE_BUILD_TYPE}! >> temp.sed
COMMAND echo s!@LLVM_OBJ_SUFFIX@!! >> temp.sed
COMMAND sed -f temp.sed < ${LLVM_CONFIG_IN} > ${LLVM_CONFIG}
COMMAND ${CMAKE_COMMAND} -E remove -f temp.sed
COMMAND cat ${FINAL_LIBDEPS} >> ${LLVM_CONFIG}
COMMAND chmod +x ${LLVM_CONFIG}
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
DEPENDS ${FINAL_LIBDEPS} ${LLVM_CONFIG_IN}
COMMENT "Building llvm-config script."
COMMENT "Building BuildVariables.inc include."
)

add_custom_target(llvm-config.target ALL
DEPENDS ${LLVM_CONFIG})

# Ensure we build llvm-config after we build all of the libraries so that we
# have their full dependencies.
add_dependencies(llvm-config.target ${llvm_libs})
# Add the llvm-config tool.
add_llvm_tool(llvm-config
llvm-config.cpp
)

install(FILES ${LLVM_CONFIG}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
DESTINATION bin)
# Add the dependency on the generation step.
add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH})
Loading

0 comments on commit a6f5a81

Please sign in to comment.