Skip to content

Instantly share code, notes, and snippets.

@bryant
Last active March 31, 2022 03:26
Show Gist options
  • Select an option

  • Save bryant/ae841554685d4c4dd3bf82d49156945d to your computer and use it in GitHub Desktop.

Select an option

Save bryant/ae841554685d4c4dd3bf82d49156945d to your computer and use it in GitHub Desktop.
# Building just clang-9.0 for creduce.
execute_process(
COMMAND "grep" "^processor" "/proc/cpuinfo"
COMMAND "wc" "-l"
COMMAND "tr" "-d" "'\n'"
OUTPUT_VARIABLE ncpu)
message("Building with ${ncpu} cpus")
set(LLVM_PARALLEL_COMPILE_JOBS ${ncpu} CACHE STRING "")
set(LLVM_PARALLEL_LINK_JOBS ${ncpu} CACHE STRING "")
set(LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "")
set(LLVM_ENABLE_PROJECTS "clang" CACHE STRING "")
#set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/usr" CACHE PATH "")
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
set(CMAKE_CXX_COMPILER "clang++" CACHE PATH "")
set(CMAKE_C_COMPILER "clang" CACHE PATH "")
# for libcxx to be linked statically, the host clang must have been built with
# LIBCXX_ENABLE_STATIC_ABI_LIBRARY (see below). otherwise, we would also need to
# add -lc++abi.
#set(CMAKE_EXE_LINKER "clang" CACHE STRING "")
#set(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++" CACHE STRING "")
# direct invocation of lld needs to be done through ld.lld.
set(CMAKE_LINKER "ld.lld" CACHE STRING "")
set(LLVM_ENABLE_LLD ON CACHE BOOL "")
set(CLANG_DEFAULT_LINKER "lld" CACHE BOOL "")
set(CLANG_DEFAULT_CXX_STDLIB "libc++" CACHE STRING "")
# Prevents an extra runtime dep on libc++abi in binaries that -lc++.
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
# disabled since libunwind doesn't yet fully replace libgcc
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "See below.")
set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "Use compiler-rt instead of libgcc")
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "")
# Setting this triggers a bug in LLVM's CMake.
# set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "")
set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
set(HAVE_DLADDR OFF CACHE BOOL "Otherwise, libunwind.a will require libdl.")
# disable specific tools that we don't need.
set(CLANG_TOOL_ARCMT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_C_ARCMT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_C_INDEX_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_FUNC_MAPPING_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_FUZZER_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_IMPORT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_REFACTOR_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_RENAME_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_LIBCLANG_BUILD OFF CACHE BOOL "")
set(CLANG_TOOLS_EXTRA_INCLUDE_DOCS OFF CACHE BOOL "")
set(LLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_BUGPOINT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_BUGPOINT_PASSES_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_DSYMUTIL_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_AS_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_BCANALYZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CAT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CFI_VERIFY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_COV_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_C_TEST_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CVTRES_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DEMANGLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DIFF_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DWARFDUMP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DWP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_EXTRACT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_GO_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_ISEL_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_JITLISTENER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MC_ASSEMBLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MC_DISASSEMBLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MODEXTRACT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_NM_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OBJCOPY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OBJDUMP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OPT_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OPT_REPORT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_PDBUTIL_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_PROFDATA_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_RC_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_READOBJ_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_RTDYLD_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SHLIB_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SIZE_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SPECIAL_CASE_LIST_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SPLIT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_STRESS_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_STRINGS_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SYMBOLIZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_XRAY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_MSBUILD_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_OBJ2YAML_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_VERIFY_USELISTORDER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_XCODE_TOOLCHAIN_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_YAML2OBJ_BUILD OFF CACHE BOOL "")
# test targets depend on some of the above tools.
set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
set(CLANG_INCLUDE_TESTS OFF CACHE BOOL "")
# lldb.
set(LLDB_RELOCATABLE_PYTHON ON CACHE BOOL "")
# sanitizers have options now.
set(SANITIZER_ALLOW_CXXABI ON CACHE BOOL "")
# default choice on linux is libstdc++.
set(SANITIZER_CXX_ABI "libc++" CACHE STRING "")
# bootstrap.
set(CLANG_BOOTSTRAP_CMAKE_ARGS
-C ${CMAKE_CURRENT_LIST_FILE}
CACHE STRING "")
cmake_minimum_required(VERSION 3.4)
execute_process(
COMMAND "grep" "^processor" "/proc/cpuinfo"
COMMAND "wc" "-l"
COMMAND "tr" "-d" "'\n'"
OUTPUT_VARIABLE ncpu
)
set(GIT_ORIGIN "file://$ENV{HOME}/usr/git" CACHE STRING "")
set(LLVM_ENABLE_PROJECTS "clang;mlir" CACHE STRING "")
message("Building with ${ncpu} cpus")
set(LLVM_PARALLEL_COMPILE_JOBS ${ncpu} CACHE STRING "")
set(LLVM_PARALLEL_LINK_JOBS ${ncpu} CACHE STRING "")
set(BUILD_SHARED_LIBS ON CACHE BOOL "")
set(CMAKE_C_COMPILER "clang" CACHE PATH "")
set(CMAKE_CXX_COMPILER "clang++" CACHE PATH "")
set(LLVM_ENABLE_LLD ON CACHE PATH "")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "")
set(CMAKE_C_FLAGS "-O0 -ggnu-pubnames" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-O0 -ggnu-pubnames" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS "-Xlinker --gdb-index" CACHE STRING "")
set(CMAKE_SHARED_LINKER_FLAGS "-Xlinker --gdb-index" CACHE STRING "")
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/usr" CACHE PATH "")
set(LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "")
set(LLVM_BUILD_RUNTIME OFF CACHE BOOL "")
set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "")
# set(LLVM_USE_SANITIZER "MemoryWithOrigins" CACHE STRING "")
set(LLVM_OPTIMIZED_TABLEGEN ON CACHE BOOL "")
# ignore tools/clang
set(LLVM_TOOL_CLANG_BUILD OFF CACHE BOOL "")
# Minimize third-party deps.
set(LLVM_ENABLE_LIBXML2 OFF CACHE STRING "")
set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
set(HAVE_SANITIZER_MSAN_INTERFACE_H 0 CACHE BOOL "")
execute_process(
COMMAND "grep" "^processor" "/proc/cpuinfo"
COMMAND "wc" "-l"
COMMAND "tr" "-d" "'\n'"
OUTPUT_VARIABLE ncpu)
message("Building with ${ncpu} cpus")
set(LLVM_PARALLEL_COMPILE_JOBS ${ncpu} CACHE STRING "")
set(LLVM_PARALLEL_LINK_JOBS ${ncpu} CACHE STRING "")
set(LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "")
set(LLVM_ENABLE_PROJECTS "clang;libcxx;libcxxabi;libunwind;compiler-rt;lld;lldb"
CACHE STRING "")
#set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/usr" CACHE PATH "")
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
set(CMAKE_CXX_COMPILER "clang++" CACHE PATH "")
set(CMAKE_C_COMPILER "clang" CACHE PATH "")
# for libcxx to be linked statically, the host clang must have been built with
# LIBCXX_ENABLE_STATIC_ABI_LIBRARY (see below). otherwise, we would also need to
# add -lc++abi.
#set(CMAKE_EXE_LINKER "clang" CACHE STRING "")
#set(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++" CACHE STRING "")
# direct invocation of lld needs to be done through ld.lld.
set(CMAKE_LINKER "ld.lld" CACHE STRING "")
set(LLVM_ENABLE_LLD ON CACHE BOOL "")
set(CLANG_DEFAULT_LINKER "lld" CACHE BOOL "")
set(CLANG_DEFAULT_CXX_STDLIB "libc++" CACHE STRING "")
# Prevents an extra runtime dep on libc++abi in binaries that -lc++.
set(LIBCXX_ENABLE_SHARED ON CACHE BOOL "")
set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
# disabled since libunwind doesn't yet fully replace libgcc
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "See below.")
set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "Use compiler-rt instead of libgcc")
set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "")
# Setting this triggers a bug in LLVM's CMake.
# set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "")
set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
set(HAVE_DLADDR OFF CACHE BOOL "Otherwise, libunwind.a will require libdl.")
# disable specific tools that we don't need.
set(CLANG_TOOL_ARCMT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_C_ARCMT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_C_INDEX_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_FUNC_MAPPING_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_FUZZER_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_IMPORT_TEST_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_REFACTOR_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_CLANG_RENAME_BUILD OFF CACHE BOOL "")
set(CLANG_TOOL_LIBCLANG_BUILD OFF CACHE BOOL "")
set(CLANG_TOOLS_EXTRA_INCLUDE_DOCS OFF CACHE BOOL "")
set(LLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_BUGPOINT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_BUGPOINT_PASSES_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_DSYMUTIL_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_AS_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_BCANALYZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CAT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CFI_VERIFY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_COV_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_C_TEST_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_CVTRES_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DEMANGLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DIFF_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DWARFDUMP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_DWP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_EXTRACT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_GO_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_ISEL_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_JITLISTENER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MC_ASSEMBLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MC_DISASSEMBLE_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MODEXTRACT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_MT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_NM_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OBJCOPY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OBJDUMP_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OPT_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_OPT_REPORT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_PDBUTIL_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_PROFDATA_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_RC_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_READOBJ_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_RTDYLD_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SHLIB_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SIZE_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SPECIAL_CASE_LIST_FUZZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SPLIT_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_STRESS_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_STRINGS_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_SYMBOLIZER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_LLVM_XRAY_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_MSBUILD_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_OBJ2YAML_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_VERIFY_USELISTORDER_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_XCODE_TOOLCHAIN_BUILD OFF CACHE BOOL "")
set(LLVM_TOOL_YAML2OBJ_BUILD OFF CACHE BOOL "")
# test targets depend on some of the above tools.
set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
set(CLANG_INCLUDE_TESTS OFF CACHE BOOL "")
# lldb.
set(LLDB_RELOCATABLE_PYTHON ON CACHE BOOL "")
# sanitizers have options now.
set(SANITIZER_ALLOW_CXXABI ON CACHE BOOL "")
# default choice on linux is libstdc++.
set(SANITIZER_CXX_ABI "libc++" CACHE STRING "")
# bootstrap.
set(CLANG_BOOTSTRAP_CMAKE_ARGS
-C ${CMAKE_CURRENT_LIST_FILE}
CACHE STRING "")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment