diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..265abd10bfc63ee2d65114463a266db5285b0539 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,153 @@ +################################################################################## +# "THE ANY BEVERAGE-WARE LICENSE" (Revision 42 - based on beer-ware +# license): +# <dev@layer128.net> wrote this file. As long as you retain this notice +# you can do whatever you want with this stuff. If we meet some day, and +# you think this stuff is worth it, you can buy me a be(ve)er(age) in +# return. (I don't like beer much.) +# +# Matthias Kleemann +################################################################################## + +################################################################################## +# Modified by Jacob Brown (jb21g14) on 14/05/2018 +# Modified by James Scrase (jms1g19) on 08/04/2021 +# For use by Computer System 2 Students at the University of Southampton +# All settings are based on an at90usb1286 chip, using dfu-programmer as the upload tool +# +# N.B.: The CMake project needs to be reloaded every time a new source file is created +# +# Setup Instructions (CLion): +# Create a new CLion project +# Set cmake_minimum_required on line 38 to the version of cmake you are using e.g. "cmake_minimum_required(VERSION 3.17)" +# Set the name on line 60 of this file to the CLion project name you set above e.g. "project(Week4_task C)" +# Copy this and generic-gcc-avr.cmake into the root folder of the CLion project overwriting any conflicts +# Reload the CMake project in CLion +# +# Setup Instructions (general): +# Set cmake_minimum_required on line 38 to the version of cmake you are using e.g. "cmake_minimum_required(VERSION 3.17)" +# Set the name on line 60 of this file to anything you like e.g. "project(Week4_task C)" +# +# Any issues you can email me at jms1g19@soton.ac.uk (or the previous author at jb21g14@soton.ac.uk) or create an issue on the GitLab project +################################################################################## + +################################################################################## +# Sample CMakeLists.txt for a simple AVR project based on the toolchain +################################################################################## + +cmake_minimum_required(VERSION 3.19.2) + +### TOOLCHAIN SETUP AREA ################################################# +# Set any variables used in the toolchain prior project() call. In that +# case they are already set and used. +########################################################################## + +################################################################################## +# tools to be used for programming the AV +################################################################################## +set(AVR_UPLOADTOOL dfu-programmer) + +set(AVR_UPLOADTOOL_PORT usb) +#set(AVR_UPLOADTOOL_OPTIONS) +set(AVR_MCU at90usb1286) +set(F_CPU 8000000UL) +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +### END TOOLCHAIN SETUP AREA ############################################# + +include(generic-gcc-avr.cmake) + +########################################################################## +# name your project +########################################################################## +project(RasteriseProject C) + + +################################################################################## +# status messages +################################################################################## +message(STATUS "Current uploadtool is: ${AVR_UPLOADTOOL}") +message(STATUS "Current upload port is: ${AVR_UPLOADTOOL_PORT}") +message(STATUS "Current uploadtool options are: ${AVR_UPLOADTOOL_OPTIONS}") +message(STATUS "Current MCU is set to: ${AVR_MCU}") + +################################################################################## +# set build type, if not already set at cmake command line +################################################################################## +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif(NOT CMAKE_BUILD_TYPE) + +################################################################################## +# some cmake cross-compile necessities +################################################################################## +if(DEFINED ENV{AVR_FIND_ROOT_PATH}) + set(CMAKE_FIND_ROOT_PATH $ENV{AVR_FIND_ROOT_PATH}) +else(DEFINED ENV{AVR_FIND_ROOT_PATH}) + if(EXISTS "/opt/local/avr") + set(CMAKE_FIND_ROOT_PATH "/opt/local/avr") + elseif(EXISTS "/usr/avr") + set(CMAKE_FIND_ROOT_PATH "/usr/avr") + elseif(EXISTS "/usr/lib/avr") + set(CMAKE_FIND_ROOT_PATH "/usr/lib/avr") + elseif(EXISTS "/usr/local/CrossPack-AVR") + set(CMAKE_FIND_ROOT_PATH "/usr/local/CrossPack-AVR") + elseif(EXISTS "C:\\msys64\\mingw64\\avr") + set(CMAKE_FIND_ROOT_PATH "C:\\msys64\\mingw64\\avr") + else(EXISTS "/opt/local/avr") + message(FATAL_ERROR "Please set AVR_FIND_ROOT_PATH in your environment.") + endif(EXISTS "/opt/local/avr") +endif(DEFINED ENV{AVR_FIND_ROOT_PATH}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +# not added automatically, since CMAKE_SYSTEM_NAME is "generic" +set(CMAKE_SYSTEM_INCLUDE_PATH "${CMAKE_FIND_ROOT_PATH}/include") +set(CMAKE_SYSTEM_LIBRARY_PATH "${CMAKE_FIND_ROOT_PATH}/lib") + +################################################################################## +# status messages for generating +################################################################################## +message(STATUS "Set CMAKE_FIND_ROOT_PATH to ${CMAKE_FIND_ROOT_PATH}") +message(STATUS "Set CMAKE_SYSTEM_INCLUDE_PATH to ${CMAKE_SYSTEM_INCLUDE_PATH}") +message(STATUS "Set CMAKE_SYSTEM_LIBRARY_PATH to ${CMAKE_SYSTEM_LIBRARY_PATH}") + +################################################################################## +# set compiler options for specific build types +################################################################################## + +## Unecessary for our purposes + +################################################################################## +# compiler options for all build types +################################################################################## +set(CSTANDARD "") +set(CDEBUG "") +set(CWARN -Wall -Wextra -Wno-main -Wstrict-overflow=5 -Winline) +set(CTUNING -fstrict-overflow -fno-strict-aliasing) +set(COPT -Os) + +add_definitions(-DF_CPU=${F_CPU}) +add_compile_options(${CDEBUG} ${COPT} ${CWARN} ${CSTANDARD} ${CTUNING}) + + +### File Discovery +# Files to be compiled - The following lines allow for the project structure to be managed using directories upon subdirectories +# See https://stackoverflow.com/questions/6921695/how-can-i-build-a-c-project-with-multiple-interdependent-subdirectories +file(GLOB_RECURSE SRC_FILES "src/*.c") +file(GLOB_RECURSE HEADER_FILES "src/*.h") + +set (INCLUDE_DIRS "") +foreach (_headerFile ${HEADER_FILES}) + get_filename_component(_dir ${_headerFile} PATH) + list (APPEND INCLUDE_DIRS ${_dir}) +endforeach() +list(REMOVE_DUPLICATES INCLUDE_DIRS) + +include_directories(${INCLUDE_DIRS}) + +################################################################################## +# add AVR executable +################################################################################## +add_avr_executable(${PROJECT_NAME} ${SRC_FILES}) +