llvm/libc/src/math/amdgpu/CMakeLists.txt

# 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.
find_package(AMDDeviceLibs QUIET HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
if(AMDDeviceLibs_FOUND)
  message(STATUS "Found the ROCm device library. Implementations falling back "
                 "to the vendor libraries will be resolved statically.")
  get_target_property(ocml_path ocml IMPORTED_LOCATION)
  set(bitcode_link_flags
      "SHELL:-Xclang -mlink-builtin-bitcode -Xclang ${ocml_path}")
else()
  message(STATUS "Could not find the ROCm device library. Unimplemented "
                 "functions will be an external reference to the vendor libraries.")
endif()

add_entrypoint_object(
  ceil
  SRCS
    ceil.cpp
  HDRS
    ../ceil.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  ceilf
  SRCS
    ceilf.cpp
  HDRS
    ../ceilf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  copysign
  SRCS
    copysign.cpp
  HDRS
    ../copysign.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  copysignf
  SRCS
    copysignf.cpp
  HDRS
    ../copysignf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fabs
  SRCS
    fabs.cpp
  HDRS
    ../fabs.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fabsf
  SRCS
    fabsf.cpp
  HDRS
    ../fabsf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  floor
  SRCS
    floor.cpp
  HDRS
    ../floor.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  floorf
  SRCS
    floorf.cpp
  HDRS
    ../floorf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fma
  SRCS
    fma.cpp
  HDRS
    ../fma.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmaf
  SRCS
    fmaf.cpp
  HDRS
    ../fmaf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmax
  SRCS
    fmax.cpp
  HDRS
    ../fmax.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmaxf
  SRCS
    fmaxf.cpp
  HDRS
    ../fmaxf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmin
  SRCS
    fmin.cpp
  HDRS
    ../fmin.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fminf
  SRCS
    fminf.cpp
  HDRS
    ../fminf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmod
  SRCS
    fmod.cpp
  HDRS
    ../fmod.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  fmodf
  SRCS
    fmodf.cpp
  HDRS
    ../fmodf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  nearbyint
  SRCS
    nearbyint.cpp
  HDRS
    ../nearbyint.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  nearbyintf
  SRCS
    nearbyintf.cpp
  HDRS
    ../nearbyintf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  remainder
  SRCS
    remainder.cpp
  HDRS
    ../remainder.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  remainderf
  SRCS
    remainderf.cpp
  HDRS
    ../remainderf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  rint
  SRCS
    rint.cpp
  HDRS
    ../rint.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  rintf
  SRCS
    rintf.cpp
  HDRS
    ../rintf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  round
  SRCS
    round.cpp
  HDRS
    ../round.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  sqrt
  SRCS
    sqrt.cpp
  HDRS
    ../sqrt.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  sqrtf
  SRCS
    sqrtf.cpp
  HDRS
    ../sqrtf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  trunc
  SRCS
    trunc.cpp
  HDRS
    ../trunc.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  truncf
  SRCS
    truncf.cpp
  HDRS
    ../truncf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  frexp
  SRCS
    frexp.cpp
  HDRS
    ../frexp.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  frexpf
  SRCS
    frexpf.cpp
  HDRS
    ../frexpf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  scalbn
  SRCS
    scalbn.cpp
  HDRS
    ../scalbn.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  scalbnf
  SRCS
    scalbnf.cpp
  HDRS
    ../scalbnf.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  ldexp
  SRCS
    ldexp.cpp
  HDRS
    ../ldexp.h
  COMPILE_OPTIONS
    -O2
)

add_entrypoint_object(
  ldexpf
  SRCS
    ldexpf.cpp
  HDRS
    ../ldexpf.h
  COMPILE_OPTIONS
    -O2
)

# The following functions currently are not implemented natively and borrow from
# existing implementations. This will be removed in the future.
add_entrypoint_object(
  acos
  SRCS
    acos.cpp
  HDRS
    ../acos.h
  VENDOR
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
)

add_entrypoint_object(
  acosh
  SRCS
    acosh.cpp
  HDRS
    ../acosh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  asin
  SRCS
    asin.cpp
  HDRS
    ../asin.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  asinh
  SRCS
    asinh.cpp
  HDRS
    ../asinh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  atan
  SRCS
    atan.cpp
  HDRS
    ../atan.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  atanh
  SRCS
    atanh.cpp
  HDRS
    ../atanh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  cosh
  SRCS
    cosh.cpp
  HDRS
    ../cosh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  erf
  SRCS
    erf.cpp
  HDRS
    ../erf.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  powi
  SRCS
    powi.cpp
  HDRS
    ../powi.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  powif
  SRCS
    powif.cpp
  HDRS
    ../powif.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  sinh
  SRCS
    sinh.cpp
  HDRS
    ../sinh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  tanh
  SRCS
    tanh.cpp
  HDRS
    ../tanh.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  tgamma
  SRCS
    tgamma.cpp
  HDRS
    ../tgamma.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  tgammaf
  SRCS
    tgammaf.cpp
  HDRS
    ../tgammaf.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  lgamma
  SRCS
    lgamma.cpp
  HDRS
    ../lgamma.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)

add_entrypoint_object(
  lgamma_r
  SRCS
    lgamma_r.cpp
  HDRS
    ../lgamma_r.h
  COMPILE_OPTIONS
    ${bitcode_link_flags}
    -O2
  VENDOR
)