Cleanup of llvm-config, enable LTO for llvm

This commit is contained in:
Jeremy Soller 2018-12-22 16:45:36 -07:00
parent b56cc3d68e
commit 7be5394da7
No known key found for this signature in database
GPG Key ID: E988B49EE78A7FB1
7 changed files with 60 additions and 90 deletions

View File

@ -1,11 +1,5 @@
#!/usr/bin/env python3
import sys
import os
args = sys.argv[1:]
prefix = os.path.realpath(os.path.dirname(os.path.abspath(sys.argv[0])) + "/sysroot")
# The values here are copied from the output of llvm-config running under Redox.
# This is a hack, and should be replaced if possible.
@ -80,9 +74,29 @@ components = {
"x86utils": "-lLLVMX86Utils -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle",
}
if args == []:
import os
import sys
def fail(message):
print("redox llvm-config failure", file=sys.stderr)
print(message, file=sys.stderr)
sys.exit(1)
if args == ["--version"]:
prefix = os.environ["COOKBOOK_RECIPE"] + "/sysroot"
args = []
link_static = False
for arg in sys.argv[1:]:
if arg == "--link-static":
link_static = True
elif arg == "--link-shared":
fail("shared linking disabled")
else:
args.append(arg)
if args == []:
fail("no arguments")
elif args == ["--version"]:
print("8.0.0svn")
elif args == ["--cppflags"]:
print("-I" + prefix + "/include -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS")
@ -110,5 +124,4 @@ elif args[0] == "--libs":
elif args[0] == "--shared-mode":
print("static")
else:
print("\n".join(args), file=sys.stderr)
sys.exit(1)
fail("unknown arguments: " + " ".join(args))

View File

@ -15,16 +15,16 @@ REPO="$ROOT/repo/$TARGET"
export PATH="${ROOT}/bin:$PATH"
export XARGO_HOME="${ROOT}/xargo"
export AR="${HOST}-ar"
export AR="${HOST}-gcc-ar"
export AS="${HOST}-as"
export CC="${HOST}-gcc"
export CXX="${HOST}-g++"
export LD="${HOST}-ld"
export NM="${HOST}-nm"
export NM="${HOST}-gcc-nm"
export OBJCOPY="${HOST}-objcopy"
export OBJDUMP="${HOST}-objdump"
export PKG_CONFIG="${HOST}-pkg-config"
export RANLIB="${HOST}-ranlib"
export RANLIB="${HOST}-gcc-ranlib"
export READELF="${HOST}-readelf"
export STRIP="${HOST}-strip"

View File

@ -1,4 +1,4 @@
BUILD_DEPENDS=(liborbital mesa mesa_glu)
BUILD_DEPENDS=(liborbital llvm mesa mesa_glu)
function recipe_version {
printf "1.0.0"
@ -19,7 +19,7 @@ function recipe_prepare {
function recipe_build {
sysroot="$(realpath ../sysroot)"
set -x
"${CXX}" -I "$sysroot/include" -L "$sysroot/lib" gears.c -o gears -lorbital -lOSMesa -lGLU -lglapi -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lm
"${CXX}" -I "$sysroot/include" -L "$sysroot/lib" gears.c -o gears -lorbital $("${PKG_CONFIG}" --libs glu)
set +x
skip=1
}

View File

@ -22,38 +22,42 @@ function recipe_build {
source="$(realpath ../source)"
sysroot="$(realpath ../sysroot)"
CMAKE_ARGS=(
-Wno-dev
-DCMAKE_AR="$(which "${AR}")"
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_CROSSCOMPILING=True
-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=$native"
-DCMAKE_CXX_FLAGS="--std=gnu++11 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
-DCMAKE_RANLIB="$(which "${RANLIB}")"
-DCMAKE_INSTALL_PREFIX="/"
-DCMAKE_SYSTEM_NAME=Generic
-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=$native"
-DLLVM_BUILD_BENCHMARKS=Off
-DLLVM_BUILD_EXAMPLES=Off
-DLLVM_BUILD_TESTS=Off
-DLLVM_BUILD_UTILS=Off
-DLLVM_DEFAULT_TARGET_TRIPLE="$HOST"
-DLLVM_ENABLE_LTO=On
-DLLVM_ENABLE_THREADS=On
-DLLVM_INCLUDE_BENCHMARKS=Off
-DLLVM_INCLUDE_EXAMPLES=Off
-DLLVM_INCLUDE_TESTS=Off
-DLLVM_INCLUDE_UTILS=Off
-DLLVM_OPTIMIZED_TABLEGEN=On
#-DLLVM_TABLEGEN="/usr/bin/llvm-tblgen-8"
-DLLVM_TARGET_ARCH="$ARCH"
-DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_SYSTEM_NAME=Generic
-DLLVM_TOOL_LLVM_COV_BUILD=Off
-DLLVM_TOOL_LLVM_LTO_BUILD=Off
-DLLVM_TOOL_LLVM_LTO2_BUILD=Off
-DLLVM_TOOL_LLVM_PROFDATA_BUILD=Off
-DLLVM_TOOL_LLVM_RTDYLD_BUILD=Off
-DLLVM_TOOL_LLVM_XRAY_BUILD=Off
-DLLVM_TOOL_LLI_BUILD=Off
-DLLVM_TOOL_LTO_BUILD=Off
-DPYTHON_EXECUTABLE="/usr/bin/python2"
#-DLLVM_TABLEGEN="/usr/bin/llvm-tblgen-8"
-DUNIX=1
-DLLVM_ENABLE_THREADS=On
-DLLVM_BUILD_BENCHMARKS=Off
-DLLVM_INCLUDE_BENCHMARKS=Off
-DLLVM_BUILD_EXAMPLES=Off
-DLLVM_INCLUDE_EXAMPLES=Off
-DLLVM_BUILD_TESTS=Off
-DLLVM_INCLUDE_TESTS=Off
-DLLVM_BUILD_UTILS=Off
-DLLVM_INCLUDE_UTILS=Off
-target="$HOST"
-I"$sysroot/include"
-DCMAKE_CXX_FLAGS='--std=gnu++11 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive'
-DLLVM_TOOL_LTO_BUILD=Off
-DLLVM_TOOL_LLVM_PROFDATA_BUILD=Off
-DLLVM_TOOL_LLI_BUILD=Off
-DLLVM_TOOL_RDOBJ_BUILD=Off
-DLLVM_TOOL_LLVM_COV_BUILD=Off
-DLLVM_TOOL_LLVM_XRAY_BUILD=Off
-DLLVM_TOOL_LLVM_LTO2_BUILD=Off
-DLLVM_TOOL_LLVM_LTO_BUILD=Off
-DLLVM_TOOL_LLVM_RTDYLD_BUILD=Off
-Wno-dev
)
cmake "${CMAKE_ARGS[@]}" "$source"
make -j$(nproc)
@ -73,6 +77,6 @@ function recipe_clean {
function recipe_stage {
dest="$(realpath $1)"
make DESTDIR="$dest" install
find "$dest"/{bin,lib} -exec $STRIP {} ';' 2> /dev/null
find "$dest"/bin -exec $STRIP {} ';' 2> /dev/null
skip=1
}

View File

@ -19,8 +19,8 @@ function recipe_build {
export CPPFLAGS="-I$sysroot/include -DHAVE_PTHREAD=1"
export LDFLAGS="-L$sysroot/lib"
export LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
export LLVM_CONFIG="$(realpath ../llvm-config)"
NOCONFIGURE=1 ./autogen.sh
export LLVM_CONFIG="x86_64-unknown-redox-llvm-config"
#NOCONFIGURE=1 ./autogen.sh
./configure \
--host="${HOST}" \
--prefix=/ \
@ -50,12 +50,7 @@ function recipe_clean {
}
function recipe_stage {
sysroot="$(realpath ../sysroot)"
export CFLAGS="-I$sysroot/include -DHAVE_PTHREAD=1"
export CPPFLAGS="-I$sysroot/include -DHAVE_PTHREAD=1"
export LDFLAGS="-L$sysroot/lib"
export LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
export LLVM_CONFIG="$(realpath ../llvm-config)"
export LLVM_CONFIG="x86_64-unknown-redox-llvm-config"
dest="$(realpath $1)"
make DESTDIR="$dest" install
rm -f "$dest/lib/"*.la

View File

@ -19,5 +19,5 @@ cc = "x86_64-unknown-redox-gcc"
cxx = "x86_64-unknown-redox-g++"
ar = "x86_64-unknown-redox-ar"
linker = "x86_64-unknown-redox-gcc"
llvm-config = "../llvm-config"
llvm-config = "x86_64-unknown-redox-llvm-config"
crt-static = true

View File

@ -1,42 +0,0 @@
#!/usr/bin/env python
import sys
import os
args = sys.argv[1:]
prefix = os.path.realpath(os.path.dirname(os.path.abspath(sys.argv[0])) + "/sysroot")
# The values here are copied from the output of llvm-config running under Redox.
# This is a hack, and should be replaced if possible.
if args == ["--version"]:
print("8.0.0svn")
elif args == ["--cxxflags"]:
print("-I" + prefix + "/include --std=gnu++11 -fPIC -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-comment -g -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS")
elif args == ["--components"]:
print(
"aggressiveinstcombine all all-targets analysis asmparser asmprinter binaryformat bitreader"
+ " bitwriter codegen core coroutines coverage debuginfocodeview debuginfodwarf debuginfomsf"
+ " debuginfopdb demangle dlltooldriver engine executionengine fuzzmutate globalisel instcombine"
+ " instrumentation interpreter ipo irreader libdriver lineeditor linker lto mc mcdisassembler"
+ " mcjit mcparser mirparser native nativecodegen objcarcopts object objectyaml option orcjit"
+ " passes profiledata runtimedyld scalaropts selectiondag support symbolize tablegen target"
+ " transformutils vectorize windowsmanifest x86 x86asmparser x86asmprinter x86codegen x86desc"
+ " x86disassembler x86info x86utils")
elif args == ["--link-static", "--libs", "asmparser", "bitreader", "bitwriter", "instrumentation", "interpreter", "ipo", "linker", "lto", "mcjit", "x86"]:
print(
"-lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMGlobalISel -lLLVMSelectionDAG"
+ " -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter"
+ " -lLLVMX86Utils -lLLVMMCJIT -lLLVMLTO -lLLVMPasses -lLLVMObjCARCOpts -lLLVMipo -lLLVMVectorize"
+ " -lLLVMLinker -lLLVMIRReader -lLLVMInterpreter -lLLVMExecutionEngine -lLLVMRuntimeDyld"
+ " -lLLVMCodeGen -lLLVMTarget -lLLVMScalarOpts -lLLVMInstCombine -lLLVMAggressiveInstCombine"
+ " -lLLVMInstrumentation -lLLVMTransformUtils -lLLVMBitWriter -lLLVMAnalysis -lLLVMProfileData"
+ " -lLLVMObject -lLLVMMCParser -lLLVMMC -lLLVMDebugInfoCodeView -lLLVMDebugInfoMSF -lLLVMBitReader"
+ " -lLLVMAsmParser -lLLVMCore -lLLVMBinaryFormat -lLLVMSupport -lLLVMDemangle"
+ " -lstdc++ -lgcc"
)
# FIXME last two -l are a hack
elif args == ["--link-static", "--ldflags"]:
print("-L" + prefix + "/lib");
else:
sys.exit(1)