# Math functions not yet available in the libc project, or those not yet tuned # for GPU workloads are provided as wrappers over vendor libraries. If we find # them ahead of time we will import them statically. Otherwise, we will keep # them as external references and expect them to be resolved by the user when # they compile. In the future,we will use implementations from the 'libc' # project and not provide these wrappers. add_subdirectory(vendor) # For the GPU we want to be able to optionally depend on the vendor libraries # until we have a suitable replacement inside `libc`. # TODO: We should have an option to enable or disable these on a per-function # basis. option(LIBC_GPU_VENDOR_MATH "Use vendor wrappers for GPU math" ON) function(add_math_entrypoint_gpu_object name) get_fq_target_name("vendor.${name}" fq_vendor_specific_target_name) if(TARGET ${fq_vendor_specific_target_name} AND ${LIBC_GPU_VENDOR_MATH}) return() endif() add_entrypoint_object( ${name} ${ARGN} ) endfunction() add_math_entrypoint_gpu_object( ceil SRCS ceil.cpp HDRS ../ceil.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( ceilf SRCS ceilf.cpp HDRS ../ceilf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( copysign SRCS copysign.cpp HDRS ../copysign.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( copysignf SRCS copysignf.cpp HDRS ../copysignf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fabs SRCS fabs.cpp HDRS ../fabs.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fabsf SRCS fabsf.cpp HDRS ../fabsf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( floor SRCS floor.cpp HDRS ../floor.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( floorf SRCS floorf.cpp HDRS ../floorf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fma SRCS fma.cpp HDRS ../fma.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmaf SRCS fmaf.cpp HDRS ../fmaf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmax SRCS fmax.cpp HDRS ../fmax.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmaxf SRCS fmaxf.cpp HDRS ../fmaxf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmin SRCS fmin.cpp HDRS ../fmin.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fminf SRCS fminf.cpp HDRS ../fminf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmod SRCS fmod.cpp HDRS ../fmod.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( fmodf SRCS fmodf.cpp HDRS ../fmodf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( lround SRCS lround.cpp HDRS ../lround.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( lroundf SRCS lroundf.cpp HDRS ../lroundf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( llround SRCS llround.cpp HDRS ../llround.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( llroundf SRCS llroundf.cpp HDRS ../llroundf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( modf SRCS modf.cpp HDRS ../modf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( modff SRCS modff.cpp HDRS ../modff.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( nearbyint SRCS nearbyint.cpp HDRS ../nearbyint.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( nearbyintf SRCS nearbyintf.cpp HDRS ../nearbyintf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( remainder SRCS remainder.cpp HDRS ../remainder.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( remainderf SRCS remainderf.cpp HDRS ../remainderf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( rint SRCS rint.cpp HDRS ../rint.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( rintf SRCS rintf.cpp HDRS ../rintf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( round SRCS round.cpp HDRS ../round.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( sinh SRCS sinh.cpp HDRS ../sinh.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( sqrt SRCS sqrt.cpp HDRS ../sqrt.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( sqrtf SRCS sqrtf.cpp HDRS ../sqrtf.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( tan SRCS tan.cpp HDRS ../tan.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( tanh SRCS tanh.cpp HDRS ../tanh.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( trunc SRCS trunc.cpp HDRS ../trunc.h COMPILE_OPTIONS -O2 ) add_math_entrypoint_gpu_object( truncf SRCS truncf.cpp HDRS ../truncf.h COMPILE_OPTIONS -O2 )