Skip to content

Commit

Permalink
[gn] Support for building compiler-rt builtins
Browse files Browse the repository at this point in the history
This is support for building compiler-rt builtins, The library build
should be complete for a subset of supported platforms, but not all
CMake options have been replicated in GN.

We always use the just built compiler to build all the runtimes, which
is equivalent to the CMake runtimes build. This simplifies the build
configuration because we don't need to support arbitrary host compiler
and can always assume the latest Clang. With GN's toolchain support,
this is significantly more efficient than the CMake runtimes build.

Differential Revision: https://reviews.llvm.org/D60331

llvm-svn: 357821
  • Loading branch information
petrhosek committed Apr 5, 2019
1 parent ab8c608 commit 4044265
Show file tree
Hide file tree
Showing 6 changed files with 602 additions and 83 deletions.
192 changes: 111 additions & 81 deletions compiler-rt/lib/builtins/CMakeLists.txt
Expand Up @@ -150,7 +150,8 @@ set(GENERIC_SOURCES
udivti3.c
umoddi3.c
umodsi3.c
umodti3.c)
umodti3.c
)

set(GENERIC_TF_SOURCES
comparetf2.c
Expand All @@ -170,7 +171,8 @@ set(GENERIC_TF_SOURCES
floatuntitf.c
multc3.c
trunctfdf2.c
trunctfsf2.c)
trunctfsf2.c
)

option(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN
"Skip the atomic builtin (these should normally be provided by a shared library)"
Expand All @@ -179,15 +181,17 @@ option(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN
if(NOT FUCHSIA AND NOT COMPILER_RT_BAREMETAL_BUILD)
set(GENERIC_SOURCES
${GENERIC_SOURCES}
emutls.c
emutls.c
enable_execute_stack.c
eprintf.c)
eprintf.c
)
endif()

if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN)
set(GENERIC_SOURCES
${GENERIC_SOURCES}
atomic.c)
atomic.c
)
endif()

if(APPLE)
Expand All @@ -198,19 +202,22 @@ if(APPLE)
atomic_flag_test_and_set.c
atomic_flag_test_and_set_explicit.c
atomic_signal_fence.c
atomic_thread_fence.c)
atomic_thread_fence.c
)
endif()

if (HAVE_UNWIND_H)
set(GENERIC_SOURCES
${GENERIC_SOURCES}
gcc_personality_v0.c)
${GENERIC_SOURCES}
gcc_personality_v0.c
)
endif ()

if (NOT FUCHSIA)
set(GENERIC_SOURCES
${GENERIC_SOURCES}
clear_cache.c)
clear_cache.c
)
endif()

# These sources work on all x86 variants, but only x86 variants.
Expand All @@ -232,54 +239,59 @@ set(x86_ARCH_SOURCES

if (NOT MSVC)
set(x86_64_SOURCES
x86_64/floatdidf.c
x86_64/floatdisf.c
x86_64/floatdixf.c
x86_64/floatundidf.S
x86_64/floatundisf.S
x86_64/floatundixf.S)
x86_64/floatdidf.c
x86_64/floatdisf.c
x86_64/floatdixf.c
x86_64/floatundidf.S
x86_64/floatundisf.S
x86_64/floatundixf.S
)
filter_builtin_sources(x86_64_SOURCES EXCLUDE x86_64_SOURCES "${x86_64_SOURCES};${GENERIC_SOURCES}")
set(x86_64h_SOURCES ${x86_64_SOURCES})

if (WIN32)
set(x86_64_SOURCES
${x86_64_SOURCES}
x86_64/chkstk.S
x86_64/chkstk2.S)
${x86_64_SOURCES}
x86_64/chkstk.S
x86_64/chkstk2.S
)
endif()

set(i386_SOURCES
i386/ashldi3.S
i386/ashrdi3.S
i386/divdi3.S
i386/floatdidf.S
i386/floatdisf.S
i386/floatdixf.S
i386/floatundidf.S
i386/floatundisf.S
i386/floatundixf.S
i386/lshrdi3.S
i386/moddi3.S
i386/muldi3.S
i386/udivdi3.S
i386/umoddi3.S)
i386/ashldi3.S
i386/ashrdi3.S
i386/divdi3.S
i386/floatdidf.S
i386/floatdisf.S
i386/floatdixf.S
i386/floatundidf.S
i386/floatundisf.S
i386/floatundixf.S
i386/lshrdi3.S
i386/moddi3.S
i386/muldi3.S
i386/udivdi3.S
i386/umoddi3.S
)
filter_builtin_sources(i386_SOURCES EXCLUDE i386_SOURCES "${i386_SOURCES};${GENERIC_SOURCES}")

if (WIN32)
set(i386_SOURCES
${i386_SOURCES}
i386/chkstk.S
i386/chkstk2.S)
${i386_SOURCES}
i386/chkstk.S
i386/chkstk2.S
)
endif()
else () # MSVC
# Use C versions of functions when building on MSVC
# MSVC's assembler takes Intel syntax, not AT&T syntax.
# Also use only MSVC compilable builtin implementations.
set(x86_64_SOURCES
x86_64/floatdidf.c
x86_64/floatdisf.c
x86_64/floatdixf.c
${GENERIC_SOURCES})
x86_64/floatdidf.c
x86_64/floatdisf.c
x86_64/floatdixf.c
${GENERIC_SOURCES}
)
set(x86_64h_SOURCES ${x86_64_SOURCES})
set(i386_SOURCES ${GENERIC_SOURCES})
endif () # if (NOT MSVC)
Expand Down Expand Up @@ -320,15 +332,17 @@ set(arm_SOURCES
arm/sync_fetch_and_xor_8.S
arm/udivmodsi4.S
arm/udivsi3.S
arm/umodsi3.S)
arm/umodsi3.S
)
filter_builtin_sources(arm_SOURCES EXCLUDE arm_SOURCES "${arm_SOURCES};${GENERIC_SOURCES}")

set(thumb1_SOURCES
arm/divsi3.S
arm/udivsi3.S
arm/comparesf2.S
arm/addsf3.S
${GENERIC_SOURCES})
${GENERIC_SOURCES}
)

set(arm_EABI_SOURCES
arm/aeabi_cdcmp.S
Expand All @@ -347,16 +361,19 @@ set(arm_EABI_SOURCES
arm/aeabi_memmove.S
arm/aeabi_memset.S
arm/aeabi_uidivmod.S
arm/aeabi_uldivmod.S)
arm/aeabi_uldivmod.S
)

set(arm_Thumb1_JT_SOURCES
arm/switch16.S
arm/switch32.S
arm/switch8.S
arm/switchu8.S)
arm/switchu8.S
)
set(arm_Thumb1_SjLj_EH_SOURCES
arm/restore_vfp_d8_d15_regs.S
arm/save_vfp_d8_d15_regs.S)
arm/save_vfp_d8_d15_regs.S
)
set(arm_Thumb1_VFPv2_SOURCES
arm/adddf3vfp.S
arm/addsf3vfp.S
Expand Down Expand Up @@ -391,62 +408,70 @@ set(arm_Thumb1_VFPv2_SOURCES
arm/subsf3vfp.S
arm/truncdfsf2vfp.S
arm/unorddf2vfp.S
arm/unordsf2vfp.S)
arm/unordsf2vfp.S
)
set(arm_Thumb1_icache_SOURCES
arm/sync_synchronize.S)
arm/sync_synchronize.S
)
set(arm_Thumb1_SOURCES
${arm_Thumb1_JT_SOURCES}
${arm_Thumb1_SjLj_EH_SOURCES}
${arm_Thumb1_VFPv2_SOURCES}
${arm_Thumb1_icache_SOURCES})
${arm_Thumb1_icache_SOURCES}
)

if(MINGW)
set(arm_SOURCES
arm/aeabi_idivmod.S
arm/aeabi_ldivmod.S
arm/aeabi_uidivmod.S
arm/aeabi_uldivmod.S
arm/chkstk.S
divmoddi4.c
divmodsi4.c
divdi3.c
divsi3.c
fixdfdi.c
fixsfdi.c
fixunsdfdi.c
fixunssfdi.c
floatdidf.c
floatdisf.c
floatundidf.c
floatundisf.c
mingw_fixfloat.c
moddi3.c
udivmoddi4.c
udivmodsi4.c
udivsi3.c
umoddi3.c
emutls.c)
arm/aeabi_idivmod.S
arm/aeabi_ldivmod.S
arm/aeabi_uidivmod.S
arm/aeabi_uldivmod.S
arm/chkstk.S
divmoddi4.c
divmodsi4.c
divdi3.c
divsi3.c
fixdfdi.c
fixsfdi.c
fixunsdfdi.c
fixunssfdi.c
floatdidf.c
floatdisf.c
floatundidf.c
floatundisf.c
mingw_fixfloat.c
moddi3.c
udivmoddi4.c
udivmodsi4.c
udivsi3.c
umoddi3.c
emutls.c
)
filter_builtin_sources(arm_SOURCES EXCLUDE arm_SOURCES "${arm_SOURCES};${GENERIC_SOURCES}")
elseif(NOT WIN32)
# TODO the EABI sources should only be added to EABI targets
set(arm_SOURCES
${arm_SOURCES}
${arm_EABI_SOURCES}
${arm_Thumb1_SOURCES})
${arm_Thumb1_SOURCES}
)

set(thumb1_SOURCES
${thumb1_SOURCES}
${arm_EABI_SOURCES})
${arm_EABI_SOURCES}
)
endif()

set(aarch64_SOURCES
${GENERIC_TF_SOURCES}
${GENERIC_SOURCES})
${GENERIC_SOURCES}
)

if (MINGW)
set(aarch64_SOURCES
${aarch64_SOURCES}
aarch64/chkstk.S)
${aarch64_SOURCES}
aarch64/chkstk.S
)
endif()

set(armhf_SOURCES ${arm_SOURCES})
Expand Down Expand Up @@ -492,7 +517,8 @@ set(hexagon_SOURCES
hexagon/udivmodsi4.S
hexagon/udivsi3.S
hexagon/umoddi3.S
hexagon/umodsi3.S)
hexagon/umodsi3.S
)


set(mips_SOURCES ${GENERIC_SOURCES})
Expand All @@ -515,21 +541,25 @@ set(powerpc64_SOURCES
ppc/gcc_qmul.c
ppc/gcc_qsub.c
ppc/multc3.c
${GENERIC_SOURCES})
${GENERIC_SOURCES}
)
set(powerpc64le_SOURCES ${powerpc64_SOURCES})

set(riscv_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
set(riscv32_SOURCES
riscv/mulsi3.S
${riscv_SOURCES})
${riscv_SOURCES}
)
set(riscv64_SOURCES ${riscv_SOURCES})

set(wasm32_SOURCES
${GENERIC_TF_SOURCES}
${GENERIC_SOURCES})
${GENERIC_SOURCES}
)
set(wasm64_SOURCES
${GENERIC_TF_SOURCES}
${GENERIC_SOURCES})
${GENERIC_SOURCES}
)

add_custom_target(builtins)
set_target_properties(builtins PROPERTIES FOLDER "Compiler-RT Misc")
Expand Down
4 changes: 2 additions & 2 deletions llvm/utils/gn/build/sync_source_lists_from_cmake.py
Expand Up @@ -23,9 +23,9 @@ def sync_source_lists():
shell=os.name == 'nt').splitlines()

# Matches e.g. | "foo.cpp",|, captures |foo| in group 1.
gn_cpp_re = re.compile(r'^\s*"([^"]+\.(?:cpp|h))",$', re.MULTILINE)
gn_cpp_re = re.compile(r'^\s*"([^"]+\.(?:cpp|c|h|S))",$', re.MULTILINE)
# Matches e.g. | foo.cpp|, captures |foo| in group 1.
cmake_cpp_re = re.compile(r'^\s*([A-Za-z_0-9/-]+\.(?:cpp|h))$',
cmake_cpp_re = re.compile(r'^\s*([A-Za-z_0-9/-]+\.(?:cpp|c|h|S))$',
re.MULTILINE)

for gn_file in gn_files:
Expand Down
3 changes: 3 additions & 0 deletions llvm/utils/gn/secondary/BUILD.gn
Expand Up @@ -9,6 +9,9 @@ group("default") {
"//lld/test",
"//llvm/test",
]
if (current_os == "linux") {
deps += [ "//compiler-rt" ]
}
if (current_os == "linux" || current_os == "android") {
deps += [ "//compiler-rt/test/hwasan" ]
}
Expand Down
5 changes: 5 additions & 0 deletions llvm/utils/gn/secondary/compiler-rt/BUILD.gn
@@ -0,0 +1,5 @@
group("compiler-rt") {
deps = [
"//compiler-rt/lib(//llvm/utils/gn/build/toolchain:stage2_unix)",
]
}
5 changes: 5 additions & 0 deletions llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
@@ -0,0 +1,5 @@
group("lib") {
deps = [
"//compiler-rt/lib/builtins",
]
}

0 comments on commit 4044265

Please sign in to comment.