1PROJECT(pico_float_test)
2
3
4if (PICO_RISCV)
5
6    # Separate, simpler test: currently we only have a few single-precision
7    # routines for RISC-V soft float (and the other tests are a bit
8    # AEABI-dependent)
9    add_executable(pico_float_test
10        pico_float_test_hazard3.c
11        )
12    target_link_libraries(pico_float_test PRIVATE pico_float pico_stdlib)
13    target_include_directories(pico_float_test PRIVATE ${CMAKE_CURRENT_LIST_DIR})
14    pico_add_extra_outputs(pico_float_test)
15
16    # pico_enable_stdio_usb(pico_float_test 1)
17    # pico_enable_stdio_uart(pico_float_test 0)
18
19else ()
20    add_executable(pico_float_test
21            pico_float_test.c
22            llvm/call_apsr.S
23            )
24
25    add_executable(pico_double_test
26            pico_double_test.c
27            llvm/call_apsr.S
28            )
29
30
31    #todo split out variants with different flags
32    target_compile_definitions(pico_float_test PRIVATE
33    #        PICO_FLOAT_PROPAGATE_NANS=1
34    #        PICO_DIVIDER_DISABLE_INTERRUPTS=1
35    )
36
37    #todo split out variants with different flags
38    target_compile_definitions(pico_double_test PRIVATE
39            PICO_USE_CRT_PRINTF=1 # want full precision output
40            PICO_FLOAT_PROPAGATE_NANS=1
41            PICO_DOUBLE_PROPAGATE_NANS=1
42                    #PICO_DIVIDER_DISABLE_INTERRUPTS=1
43            )
44    if (NOT PICO_CLIB STREQUAL "llvm_libc")
45        # raw compiler printf on llvm_libc doesn't currently have floating point
46        pico_set_printf_implementation(pico_double_test compiler) # want full precision output
47    endif()
48
49    # handy for testing we aren't pulling in extra stuff
50    #target_link_options(pico_float_test PRIVATE -nodefaultlibs)
51
52    target_include_directories(pico_float_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/llvm)
53    target_link_libraries(pico_float_test pico_float pico_stdlib)
54    pico_add_extra_outputs(pico_float_test)
55    #pico_set_float_implementation(pico_float_test compiler)
56    #pico_set_float_implementation(pico_float_test pico_vfp)
57    #pico_set_double_implementation(pico_float_test compiler)
58
59    target_include_directories(pico_double_test PRIVATE ${CMAKE_CURRENT_LIST_DIR}/llvm)
60    target_link_libraries(pico_double_test pico_double pico_stdlib)
61    pico_add_extra_outputs(pico_double_test)
62    #pico_set_float_implementation(pico_double_test compiler)
63    #pico_set_double_implementation(pico_double_test compiler)
64
65    if (PICO_RP2350 AND NOT PICO_RISCV)
66        add_executable(m33
67                m33.c
68                )
69
70        target_compile_definitions(m33 PRIVATE
71                PICO_USE_CRT_PRINTF=1 # want full precision output
72                PICO_FLOAT_PROPAGATE_NANS=1
73                PICO_DOUBLE_PROPAGATE_NANS=1
74                #PICO_DIVIDER_DISABLE_INTERRUPTS=1
75                )
76        pico_set_printf_implementation(m33 compiler) # want full precision output
77        pico_set_float_implementation(m33 pico)
78        pico_set_double_implementation(m33 pico)
79        target_link_libraries(m33 pico_double pico_stdlib)
80        pico_add_extra_outputs(m33)
81    endif()
82endif()
83