cmake_minimum_required(VERSION 3.10) project(beyond_synaptics C CXX ASM) set(CMAKE_EXECUTABLE_SUFFIX ".elf") set(CMAKE_C_COMPILER_TARGET thumbv7m-unknown-none-eabi) set(CMAKE_CXX_COMPILER_TARGET thumbv7m-unknown-none-eabi) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CPU_FLAGS -mthumb -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16) # set(COMPILER_FLAGS -ffreestanding -ffunction-sections -fdata-sections -fsigned-char -fmessage-length=0 -fshort-enums) set(COMPILER_FLAGS -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wno-expansion-to-defined -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500) # NOTE: -mlong-calls REMOVED (0.4.4) — it wedged the MCU under SteamVR addon # load (BeyondEyetracking/BeyondSteamVR co-driving 0101); hardware-isolated as # the sole cause. -ffast-math also removed (unsafe FP / -ffinite-math-only kills # NaN guards; its crtfastmath FPSCR init was gc-sections'd out anyway). The # official Studio .cproj uses neither flag. set(LINKER_FILE "${CMAKE_CURRENT_LIST_DIR}/src/ASF/sam/utils/linker_scripts/samg/samg55j19/gcc/flash_usb_bootloader.ld") add_compile_options(${CPU_FLAGS} ${COMPILER_FLAGS}) add_link_options(${CPU_FLAGS}) add_definitions(-D__SAMG55J19__ -DARM_MATH_CM4=true -Dprintf=iprintf -D__FREERTOS__ -Dscanf=iscanf -DBOARD=USER_EXT_BOARD -DUDD_ENABLE -DNOTBOARD=SAMG55_XPLAINED_PRO -DUSER_BOARD_REVISION=4) include(utils.cmake) if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") include(../../../clang_utils.cmake) clang_utils_get_arm_gcc_sysroot(${ARM_GCC_C_COMPILER} ${CPU_FLAGS}) clang_utils_get_arm_gcc_multilib_dir(${ARM_GCC_C_COMPILER} ${CPU_FLAGS}) clang_utils_get_arm_gcc_lib_dir(${ARM_GCC_C_COMPILER} ${CPU_FLAGS}) clang_utils_get_arm_gcc_crt(${ARM_GCC_SYSROOT} ${ARM_GCC_MULTIDIR} ${ARM_GCC_LIBGCC_DIR}) string(APPEND CMAKE_EXE_LINKER_FLAGS " -nostdlib -L${ARM_GCC_SYSROOT}/lib/${ARM_GCC_MULTIDIR} -L${ARM_GCC_LIBGCC_DIR}") string(APPEND CMAKE_EXE_LINKER_FLAGS " -lgcc -lc_nano -lc") elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") string(REGEX MATCH ".*\.specs.*" has_specs "${CMAKE_EXE_LINKER_FLAGS}") if(NOT has_specs) string(APPEND CMAKE_EXE_LINKER_FLAGS " --specs=nano.specs") endif() endif() string(REPLACE ";" " " _LINKER_CPU_FLAGS "${CPU_FLAGS}") # subdirlist(include_dir_list ${CMAKE_CURRENT_LIST_DIR}/src) add_executable(beyond_synaptics src/main.c) target_include_directories(beyond_synaptics PRIVATE src/ # Project source dirs must precede the ASF/CMSIS dirs: the samg55 CMSIS tree # ships its own component/instance "adc.h" which otherwise shadows the # project's src/Drivers/adc.h on a bare #include "adc.h". src/Devices/ src/Drivers/ src/config/ src/crash_handler/ src/ASF/ src/ASF/common/ src/ASF/common/boards/ src/ASF/common/services/ src/ASF/common/services/clock/ src/ASF/common/services/clock/samg/ src/ASF/common/services/ioport/ src/ASF/common/services/ioport/sam/ src/ASF/common/services/serial/ src/ASF/common/services/serial/sam_uart/ src/ASF/common/services/sleepmgr/ src/ASF/common/services/sleepmgr/sam/ src/ASF/common/services/usb/ src/ASF/common/services/usb/class/ src/ASF/common/services/usb/class/audio/device src/ASF/common/services/usb/class/audio src/ASF/common/services/usb/class/hid src/ASF/common/services/usb/class/hid/device src/ASF/common/services/usb/class/composite src/ASF/common/services/usb/class/hid/device/generic src/ASF/common/services/usb/udc/ src/ASF/common/utils/ src/ASF/common/utils/interrupt/ src/ASF/common/utils/stdio/ src/ASF/common/utils/stdio/stdio_serial/ src/ASF/sam/ src/ASF/sam/boards/ src/ASF/sam/boards/displayboard src/ASF/sam/boards/samg55_xplained_pro/ src/ASF/sam/drivers/ src/ASF/sam/drivers/adc/ src/ASF/sam/drivers/efc/ src/ASF/sam/drivers/flexcom/ src/ASF/sam/drivers/matrix/ src/ASF/sam/drivers/pdc/ src/ASF/sam/drivers/pdc/pdc_uart_example/ src/ASF/sam/drivers/pdm/ src/ASF/sam/drivers/pio/ src/ASF/sam/drivers/pmc/ src/ASF/sam/drivers/supc/ src/ASF/sam/drivers/udp/ src/ASF/sam/drivers/usart/ src/ASF/sam/utils/ src/ASF/sam/utils/cmsis/ src/ASF/sam/utils/cmsis/samg/ src/ASF/sam/utils/cmsis/samg/samg55/ src/ASF/sam/utils/cmsis/samg/samg55/include/ src/ASF/sam/utils/cmsis/samg/samg55/include/component/ src/ASF/sam/utils/cmsis/samg/samg55/include/instance/ src/ASF/sam/utils/cmsis/samg/samg55/include/pio/ src/ASF/sam/utils/cmsis/samg/samg55/source/ src/ASF/sam/utils/cmsis/samg/samg55/source/templates/ src/ASF/sam/utils/cmsis/samg/samg55/source/templates/gcc/ src/ASF/sam/utils/fpu/ src/ASF/sam/utils/header_files/ src/ASF/sam/utils/linker_scripts/ src/ASF/sam/utils/linker_scripts/samg/ src/ASF/sam/utils/linker_scripts/samg/samg55j19/ src/ASF/sam/utils/linker_scripts/samg/samg55j19/gcc/ src/ASF/sam/utils/make/ src/ASF/sam/utils/preprocessor/ src/ASF/sam/utils/syscalls/ src/ASF/sam/utils/syscalls/gcc/ src/ASF/thirdparty/ src/ASF/thirdparty/CMSIS/ src/ASF/thirdparty/CMSIS/Include/ src/ASF/thirdparty/CMSIS/Lib/ src/ASF/thirdparty/CMSIS/Lib/GCC/ src/ASF/thirdparty/freertos/ src/ASF/thirdparty/freertos/freertos-10.0.0/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/include/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/GCC/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/GCC/ARM_CM4F/ src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/MemMang/ src/config/ src/Devices src/Drivers src/crash_handler ) target_sources(beyond_synaptics PRIVATE src/ASF/common/services/usb/class/audio/device/udi_audio.c src/ASF/common/services/usb/class/hid/device/udi_hid_desc.c src/ASF/sam/boards/displayboard/displayboard_init.c src/ASF/sam/drivers/adc/adc2.c src/crash_handler/crash_handler.c src/Devices/eyetrack_fpga.c src/Devices/fan_motor_control.c src/Devices/linkbox_hpd.c src/Devices/oled_control.c src/Devices/prox_control.c src/Devices/prox_tmd2635.c src/Devices/rgb_led.c src/Devices/usb2517.c src/Devices/usb3803.c src/Devices/usbc_mux.c src/Devices/vxr_interface.c src/Devices/tundra_uart.c src/Drivers/adc.c src/Drivers/flash_mutex.c src/Drivers/i2c.c src/Drivers/pdm_mics.c src/Drivers/power_control.c src/Drivers/rtt_util.c src/Drivers/signature.c src/Drivers/temp_sense.c src/eeprom_emulation.c src/hw_test.c src/sw_ver.c src/ui_interface.c src/usart_interface.c src/usbhid_interface.c src/video_proc.c src/test_and_debug.c src/ASF/common/services/usb/class/composite/udi_composite_desc.c src/ASF/common/services/usb/class/hid/device/generic/udi_hid_generic.c src/ASF/common/services/usb/class/hid/device/udi_hid.c src/ASF/common/services/usb/udc/udc.c src/ASF/sam/drivers/pio/pio_handler.c src/ASF/sam/drivers/udp/udp_device.c src/ASF/sam/drivers/matrix/matrix.c src/ASF/sam/drivers/pdc/pdc.c src/ASF/sam/drivers/pdm/pdm.c src/ASF/sam/drivers/pio/pio.c src/ASF/common/services/clock/samg/sysclk.c src/ASF/common/services/serial/usart_serial.c src/ASF/common/services/sleepmgr/sam/sleepmgr.c src/ASF/common/utils/interrupt/interrupt_sam_nvic.c src/ASF/common/utils/stdio/read.c src/ASF/common/utils/stdio/write.c src/ASF/sam/drivers/efc/efc.c src/ASF/sam/drivers/flexcom/flexcom.c src/ASF/sam/drivers/pmc/pmc.c src/ASF/sam/drivers/pmc/sleep.c src/ASF/sam/drivers/supc/supc.c src/ASF/sam/drivers/usart/usart.c src/ASF/sam/utils/cmsis/samg/samg55/source/templates/gcc/startup_samg55.c src/ASF/sam/utils/cmsis/samg/samg55/source/templates/system_samg55.c src/ASF/sam/utils/syscalls/gcc/syscalls.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/croutine.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/event_groups.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/list.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/GCC/ARM_CM4F/port.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/portable/MemMang/heap_3.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/queue.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/stream_buffer.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/tasks.c src/ASF/thirdparty/freertos/freertos-10.0.0/Source/timers.c ) target_link_directories(beyond_synaptics PRIVATE src/ASF/thirdparty/CMSIS/Lib/GCC) target_link_libraries(beyond_synaptics PRIVATE arm_cortexM4lf_math m) target_link_options(beyond_synaptics PRIVATE -Wl,--gc-sections -Wl,-T ${LINKER_FILE}) firmware_size(beyond_synaptics sysv) generate_object(beyond_synaptics .bin binary) if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") generate_object(beyond_synaptics .hex ihex) endif()