cmake_minimum_required(VERSION 3.13) # # set this option in your IDE (CLion-->Build-->CMake --2-Profiles--> -DCOMPUTER=ON # #option(COMPUTER "Testing on a x86 System" OFF) #option(MICROCONTROLLER "Build for Flashing AVR" ON) add_definitions(-DIRQS=5000) if (COMPUTER) SET(FILES_PRINT ) else () SET(FILES_PRINT ) endif () SET(FILES_CONTROL ) SET(FILES_INPUT input/switches.c #input/adc.c input/motorMonitoring.c) SET(FILES_CONFIG properties.c menu.c ) SET(FILES_OUTPUT output/outputs.c output/motor.c output/display.c output/display_strings.c output/clock.c output/clock.h) SET(FILES_SIMULATION ) SET(FILES_TEST ) SET(FILES_TWI i2c/twi_master.c i2c/i2c_lcd.c i2c/i2c_lcd_2.c ) SET(FILES_LIBS countdown.c ) SET(FILES_ timer1.c timer2.c inits.c ${FILES_LIBS} ${FILES_CONTROL} ${FILES_INPUT} ${FILES_OUTPUT} ${FILES_CONFIG}) if (COMPUTER) SET(MICROCONTROLLER OFF) message(WARNING "Settting up build for x68") SET(FILES main.c ${FILES_} ${FILES_SIMULATION}) # <-- Quelldatei(en) add_definitions(-DALLOW_PRINTF) add_definitions(-DGCC) add_definitions(-DTEST) project(HelloC_Computer C) SET(CMAKE_C_STANDARD 99) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") add_definitions(-DCMAKE_BUILD_TYPE=Debug) #SET(SOURCE_FILES ${FILES}) add_executable(${CMAKE_PROJECT_NAME} main.c ${FILES}) include_directories(/opt/local/avr/include) endif () if (MICROCONTROLLER) message(STATUS "Settting up build for AVR") SET(FILES main.c ${FILES_} #${FILES_TEST} ${FILES_TWI}) # <-- Quelldatei(en) add_definitions(-DAVR_GCC) add_definitions(-DTWI) endif () #============================================================================================ if (MICROCONTROLLER) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) SET(CMAKE_SYSTEM_NAME Generic) #============================================================================================ PROJECT(HelloC_AVR) # <-- Prjektname #SET(FILES main.c) # <-- Quelldatei(en) SET(DEVICE atmega88) # <-- MCU SET(FREQ 8000000) # <-- MCU-Frequenz SET(F_CPU FREQ) #SET(AVRBIN /opt/local/bin) # <-- Toolchain SET(AVRBIN /usr/bin) # <-- Toolchain SET(AVROBJCOPY avr-objcopy) # <-- "" SET(AVRSIZE avr-size) # <-- "" SET(AVRDUDE avrdude) # <-- "" SET(PROGRAMMER stk500) # <-- Programmertype SET(PORT /dev/ttyUSB0) # <-- USB bzw. Schnittstelle z.B. /dev/cu.usbserial.... SET(BAUD 115200) # <-- Übertragungsrate SET(EEPROM YES) # <-- soll eine x.eep Datei erstellt werden? SET(FLASH YES) # <-- soll Geflasht werden? #============================================================================================ SET(CMAKE_C_COMPILER ${AVRBIN}/avr-gcc) SET(CMAKE_CXX_COMPILER ${AVRBIN}/avr-g++) #Binaryinterface (ABI) #-funsigned-char #-funsigned-bitfields #-fpack-struct #-fshort-enums add_compile_options(-funsigned-char) # CMake 2.8.12 or newer add_compile_options(-fshort-enums) add_compile_options(-ffunction-sections) add_compile_options(-fdata-sections) add_compile_options(-Wall)#all Warnings add_compile_options(-std=gnu99) SET(COMMON_FLAGS -Os -mmcu=${DEVICE} -DF_CPU=${FREQ}UL -Wl,--gc-sections) add_compile_options(${COMMON_FLAGS}) #(__AVR_ATmega??__) add_link_options(${COMMON_FLAGS}) #SET(CMAKE_C_FLAGS "-Os -mmcu=${DEVICE} -DF_CPU=${FREQ}UL -std=gnu99 -Wl,--gc-sections") #SET(CMAKE_CXX_FLAGS "-Os -mmcu=${DEVICE} -DF_CPU=${FREQ}UL -Wl,--gc-sections") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") set(CMAKE_PREFIX_PATH /opt/local/avr) set(CMAKE_EXECUTABLE_SUFFIX ".elf") include_directories(/opt/local/avr/include) SET(SOURCE_FILES ${FILES}) #============================================================================================ ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${SOURCE_FILES}) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVROBJCOPY} -O ihex -R .eeprom ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.elf ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.hex) if (EEPROM) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVROBJCOPY} -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.elf ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.eep) endif (EEPROM) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRSIZE} --target=ihex ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.hex) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRSIZE} --target=ihex --mcu=${DEVICE} -C ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.elf) if (FLASH) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRDUDE} -p${DEVICE} -c${PROGRAMMER} -P${PORT} -b${BAUD} -U flash:w:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.hex) ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRDUDE} -p${DEVICE} -c${PROGRAMMER} -P${PORT} -b${BAUD} -U eeprom:w:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.eep) #ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRDUDE} -p${DEVICE} -c${PROGRAMMER} -P${PORT} -b${BAUD} -U -U lfuse:w:<0x62>:m) #ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRDUDE} -p${DEVICE} -c${PROGRAMMER} -P${PORT} -b${BAUD} -U -U hfuse:w:<0xDE>:m) #ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${AVRBIN}/${AVRDUDE} -p${DEVICE} -c${PROGRAMMER} -P${PORT} -b${BAUD} -U -U efuse:w:<0x01>:m) endif (FLASH) endif (MICROCONTROLLER)