343 lines
14 KiB
Plaintext
343 lines
14 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Code::Blocks new project wizard script
|
|
//
|
|
// Project: Arduino project
|
|
// Author: Stanley Huang <stanleyhuangyc@gmail.com>
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Global Vars
|
|
AvrUpload <- false;
|
|
AvrPort <- ""
|
|
AvrLss <- false; // produce extended list file from ELF output?
|
|
AvrMap <- false; // produce Symbol Map file from ELF output?
|
|
AvrExtMem <- false; // Locate .data in on-board SRAM, or external SRAM
|
|
AvrExtMemAddr <- "" // The external memory address
|
|
BoardIndex <- 0;
|
|
Board <- _T("");
|
|
BaudRate <- _T("57600");
|
|
Variant <- _T("standard");
|
|
Libs <- _T("");
|
|
|
|
function BeginWizard()
|
|
{
|
|
local wiz_type = Wizard.GetWizardType();
|
|
|
|
if (wiz_type == wizProject)
|
|
{
|
|
local intro_msg = _T(" Welcome to the Arduino Project Wizard\n\n" +
|
|
"This wizard will guide you to create a new Arduino project.\nIf you want to be able to upload the built binary to your board,\nbe sure to choose a correct serial port which your board is connected on.\n\n" +
|
|
"When you 're ready to proceed, please click \"Next\"\n\n" +
|
|
"This wizard is created by Stanley Huang.\nFor updates, please visit http://www.arduinodev.com/codeblocks\nFor suggestions and bug reports, please send to\n<stanleyhuangyc@gmail.com>");
|
|
|
|
Wizard.AddInfoPage(_T("Intro"), intro_msg);
|
|
Wizard.AddPage(_T("processorChoice"));
|
|
Wizard.AddProjectPathPage();
|
|
Wizard.AddCompilerPage(_T("GNU AVR GCC Compiler"), _T("avr*"), true, true);
|
|
}
|
|
else
|
|
print(wiz_type);
|
|
}
|
|
|
|
function GetFilesDir()
|
|
{
|
|
local result = _T("arduino/files");
|
|
return result;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Processor choice page
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
function OnLeave_processorChoice(fwd)
|
|
{
|
|
if (fwd)
|
|
{
|
|
|
|
BoardIndex = Wizard.GetComboboxSelection(_T("comboboxBoard"));
|
|
Board = Wizard.GetComboboxStringSelection(_T("comboboxBoard"));
|
|
AvrUpload = Wizard.IsCheckboxChecked(_T("checkboxUpload"));
|
|
AvrPort = Wizard.GetComboboxStringSelection(_T("uploadPort"));
|
|
AvrMap = Wizard.IsCheckboxChecked(_T("checkboxMap"));
|
|
AvrLss = Wizard.IsCheckboxChecked(_T("checkboxLss"));
|
|
|
|
if (IsNull(AvrPort)) {
|
|
AvrPort = Wizard.GetTextControlValue(_T("uploadPort"));
|
|
if (IsNull(AvrPort)) {
|
|
AvrUpload = false;
|
|
}
|
|
}
|
|
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function AddSourceFile(project, targetName, filename)
|
|
{
|
|
local file;
|
|
file = project.AddFile(targetName, filename, true, true, 50);
|
|
file.AddBuildTarget(targetName);
|
|
file.compile = true;
|
|
file.link = true;
|
|
}
|
|
|
|
function AddCoreSourceCode(project, targetName)
|
|
{
|
|
AddSourceFile(project, targetName, _T("cores/WString.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/WMath.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/wiring.c"));
|
|
AddSourceFile(project, targetName, _T("cores/wiring_digital.c"));
|
|
AddSourceFile(project, targetName, _T("cores/wiring_analog.c"));
|
|
AddSourceFile(project, targetName, _T("cores/wiring_pulse.c"));
|
|
AddSourceFile(project, targetName, _T("cores/wiring_shift.c"));
|
|
AddSourceFile(project, targetName, _T("cores/HID.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/HardwareSerial.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/new.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/Print.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/Stream.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/Tone.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/USBCore.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/WInterrupts.c"));
|
|
AddSourceFile(project, targetName, _T("cores/CDC.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/IPAddress.cpp"));
|
|
AddSourceFile(project, targetName, _T("cores/main.cpp"));
|
|
AddSourceFile(project, targetName, _T("libraries/libraries.cpp"));
|
|
AddSourceFile(project, targetName, _T("sketch.cpp"));
|
|
}
|
|
|
|
function CreateTarget(project, targetName, processor, variant, baudrate, boardIndex)
|
|
{
|
|
local target = project.AddBuildTarget(targetName);
|
|
// Linker options
|
|
local lo_map = ::wxString();
|
|
local lo_extmem = ::wxString();
|
|
|
|
// Post Build steps
|
|
local pb_avrsize = ::wxString();
|
|
local pb_eephex = ::wxString();
|
|
local pb_hex = ::wxString();
|
|
local pb_eepbin = ::wxString();
|
|
local pb_bin = ::wxString();
|
|
local pb_lss = ::wxString();
|
|
local build_core1 = ::wxString();
|
|
local build_core2 = ::wxString();
|
|
local optimized = false;
|
|
|
|
if (!IsNull(target))
|
|
{
|
|
// Post build commands
|
|
pb_eephex = _T("avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).eep.hex");
|
|
pb_hex = _T("avr-objcopy -O ihex -R .eeprom -R .eesafe $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).hex");
|
|
pb_eepbin = _T("avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O binary $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).eep.bin");
|
|
pb_bin = _T("avr-objcopy -O binary -R .eeprom -R .eesafe $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_FILE).bin");
|
|
|
|
|
|
if ( PLATFORM == PLATFORM_MSW )
|
|
pb_lss = _T("cmd /c \"avr-objdump -h -S $(TARGET_OUTPUT_FILE) > $(TARGET_OUTPUT_FILE).lss\"");
|
|
else
|
|
pb_lss = _T("avr-objdump -h -S $(TARGET_OUTPUT_FILE) > $(TARGET_OUTPUT_FILE).lss");
|
|
|
|
// avr-size is compiled with patches under winavr to produce a fancy output
|
|
// which displays the percentage of memory used by the application for the
|
|
// target mcu. However, this option is not available under standard binutils
|
|
// avr-size.
|
|
if (PLATFORM_MSW == PLATFORM)
|
|
pb_avrsize = _T("avr-size --mcu=$(MCU) --format=avr $(TARGET_OUTPUT_FILE)");
|
|
else
|
|
pb_avrsize = _T("avr-size $(TARGET_OUTPUT_FILE)");
|
|
|
|
// Setup the linker options
|
|
lo_map = _T("-Wl,-Map=$(TARGET_OUTPUT_FILE).map,--cref");
|
|
|
|
// Get external memory start address
|
|
lo_extmem = _T("-Wl,--section-start=.data=") + AvrExtMemAddr;
|
|
|
|
// Project compiler options
|
|
target.AddCompilerOption(_T("-mmcu=$(MCU)"));
|
|
|
|
if (processor.Matches(_T("atmega1280"))) {
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega1280__"));
|
|
optimized = true;
|
|
} else if (processor.Matches(_T("atmega2560"))) {
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega2560__"));
|
|
optimized = true;
|
|
} else if (processor.Matches(_T("atmega168"))) {
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega168__"));
|
|
} else if (processor.Matches(_T("atmega32u4"))) {
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega32U4__"));
|
|
if (targetName.Matches(_T("Arduino Leonardo"))) {
|
|
target.AddCompilerOption(_T("-DUSB_VID=0x2341"));
|
|
target.AddCompilerOption(_T("-DUSB_PID=0x8036"));
|
|
} else if (targetName.Matches(_T("Arduino Esplora"))) {
|
|
target.AddCompilerOption(_T("-DUSB_VID=0x2341"));
|
|
target.AddCompilerOption(_T("-DUSB_PID=0x8037"));
|
|
} else if (targetName.Matches(_T("Arduino Micro"))) {
|
|
target.AddCompilerOption(_T("-DUSB_VID=0x2341"));
|
|
target.AddCompilerOption(_T("-DUSB_PID=0x803C"));
|
|
}
|
|
} else {
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega328P__"));
|
|
}
|
|
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/hardware/arduino/cores/arduino"));
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries"));
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/hardware/arduino/variants/" + variant));
|
|
|
|
// Project linker options
|
|
target.AddLinkerOption(_T("-mmcu=$(MCU)"));
|
|
|
|
if (AvrMap)
|
|
target.AddLinkerOption(lo_map);
|
|
|
|
if (AvrExtMem)
|
|
target.AddLinkerOption(lo_extmem);
|
|
|
|
// Project post-build steps
|
|
target.AddCommandsAfterBuild(pb_hex);
|
|
target.AddCommandsAfterBuild(pb_eephex);
|
|
target.AddCommandsAfterBuild(pb_avrsize);
|
|
|
|
if ( AvrLss )
|
|
target.AddCommandsAfterBuild(pb_lss);
|
|
|
|
target.AddLinkerOption(_T("-s"));
|
|
|
|
OptimizationsOn(target, Wizard.GetCompilerID());
|
|
target.SetTargetType(ttConsoleOnly);
|
|
target.SetTargetFilenameGenerationPolicy(tgfpPlatformDefault, tgfpNone);
|
|
target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + _T(".elf"));
|
|
|
|
target.SetVar(_T("BOARD"), targetName, false);
|
|
target.SetVar(_T("BOARD_INDEX"), boardIndex, false);
|
|
target.SetVar(_T("MCU"), processor, false);
|
|
target.SetVar(_T("UPLOAD_BAUDRATE"), baudrate, false);
|
|
target.SetVar(_T("UPLOAD_PORT"), AvrPort, false);
|
|
target.SetVar(_T("ARDUINO_DIR"), _T("$(APP_PATH)/arduino"), false);
|
|
|
|
if (optimized)
|
|
{
|
|
target.RemoveCompilerOption(_T("-Os"));
|
|
target.AddCompilerOption(_T("-O2"));
|
|
} else {
|
|
target.AddCompilerOption(_T("-Os"));
|
|
}
|
|
|
|
if (AvrUpload)
|
|
{
|
|
if (processor.Matches(_T("atmega32u4"))) {
|
|
target.AddCommandsAfterBuild(_T("\"$(TARGET_COMPILER_DIR)ArduinoUploader\" ${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.elf.hex ${BOARD_INDEX} ${UPLOAD_PORT}"));
|
|
} else {
|
|
if (PLATFORM_MSW == PLATFORM)
|
|
target.AddCommandsAfterBuild(_T("avrdude -V -C \"$(TARGET_COMPILER_DIR)bin/avrdude.conf\" -p${MCU} -carduino -P\\\\.\\${UPLOAD_PORT} -b${UPLOAD_BAUDRATE} -D -Uflash:w:${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.elf.hex:i"));
|
|
else
|
|
target.AddCommandsAfterBuild(_T("avrdude -V -C /etc/avrdude.conf -p${MCU} -carduino -P${UPLOAD_PORT} -b${UPLOAD_BAUDRATE} -D -Uflash:w:${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.elf.hex:i"));
|
|
}
|
|
}
|
|
AddCoreSourceCode(project, targetName);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function SetSimTarget(project, target)
|
|
{
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/arduino/cores"));
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/arduino/variants/standard"));
|
|
target.AddIncludeDir(_T("$(ARDUINO_DIR)/include"));
|
|
target.AddCompilerOption(_T("-DARDUSIM"));
|
|
target.AddCompilerOption(_T("-DENABLE_API_NAME"));
|
|
target.AddCompilerOption(_T("-D__AVR_ATmega328P__"));
|
|
target.SetVar(_T("ARDUINO_DIR"), _T("$(APP_PATH)/ardusim"), false);
|
|
target.SetTargetType(ttConsoleOnly);
|
|
target.SetTargetFilenameGenerationPolicy(tgfpPlatformDefault, tgfpNone);
|
|
//target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + _T(".exe"));
|
|
target.SetCompilerID(_T("GCC"));
|
|
}
|
|
|
|
function SetupProject(project)
|
|
{
|
|
project.AddCompilerOption(_T("-DF_CPU=16000000L"));
|
|
project.AddCompilerOption(_T("-DARDUINO=103"));
|
|
project.AddCompilerOption(_T("-fno-exceptions"));
|
|
project.AddCompilerOption(_T("-ffunction-sections"));
|
|
project.AddCompilerOption(_T("-fdata-sections"));
|
|
project.AddCompilerOption(_T("-x c++"));
|
|
project.AddCompilerOption(_T("-s"));
|
|
project.AddLinkerOption(_T("-Wl,--gc-sections"));
|
|
|
|
project.AddIncludeDir(_T("."));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/EEPROM"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Ethernet"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Firmata"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Flash"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/LCD4884"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/LCD4Bit_mod"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/LiquidCrystal"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/OBD"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/SD"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/SD/utility"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Servo"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/SevenSegment"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/SoftwareSerial"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/SPI"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Stepper"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/TinyGPS"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Wire"));
|
|
project.AddIncludeDir(_T("$(ARDUINO_DIR)/libraries/Wire/utility"));
|
|
|
|
project.AddCompilerOption(_T("-DUSE_EEPROM=0"));
|
|
project.AddCompilerOption(_T("-DUSE_ETHERNET=0"));
|
|
project.AddCompilerOption(_T("-DUSE_FIRMATA=0"));
|
|
project.AddCompilerOption(_T("-DUSE_LCD=0"));
|
|
project.AddCompilerOption(_T("-DUSE_LCD4884=0"));
|
|
project.AddCompilerOption(_T("-DUSE_OBD=0"));
|
|
project.AddCompilerOption(_T("-DUSE_SD=0"));
|
|
project.AddCompilerOption(_T("-DUSE_SERVO=0"));
|
|
project.AddCompilerOption(_T("-DUSE_SOFTSERIAL=0"));
|
|
project.AddCompilerOption(_T("-DUSE_SPI=0"));
|
|
project.AddCompilerOption(_T("-DUSE_STEPPER=0"));
|
|
project.AddCompilerOption(_T("-DUSE_TINYGPS=0"));
|
|
project.AddCompilerOption(_T("-DUSE_WIRE=0"));
|
|
|
|
WarningsOn(project, Wizard.GetCompilerID());
|
|
|
|
CreateTarget(project, _T("Arduino Uno"), _T("atmega328p"), _T("standard"), _T("115200"), _T("1"));
|
|
CreateTarget(project, _T("Arduino Leonardo"), _T("atmega32u4"), _T("leonardo"), _T("57600"), _T("2"));
|
|
CreateTarget(project, _T("Arduino Esplora"), _T("atmega32u4"), _T("leonardo"), _T("57600"), _T("3"));
|
|
CreateTarget(project, _T("Arduino Micro"), _T("atmega32u4"), _T("micro"), _T("57600"), _T("4"));
|
|
CreateTarget(project, _T("Arduino Duemilanove (328)"), _T("atmega328p"), _T("standard"), _T("57600"), _T("5"));
|
|
CreateTarget(project, _T("Arduino Duemilanove (168)"), _T("atmega168"), _T("standard"), _T("19200"), _T("6"));
|
|
CreateTarget(project, _T("Arduino Nano (328)"), _T("atmega328p"), _T("eightanaloginputs"), _T("57600"), _T("7"));
|
|
CreateTarget(project, _T("Arduino Nano (168)"), _T("atmega168"), _T("eightanaloginputs"), _T("19200"), _T("8"));
|
|
CreateTarget(project, _T("Arduino Mini (328)"), _T("atmega328p"), _T("eightanaloginputs"), _T("57600"), _T("9"));
|
|
CreateTarget(project, _T("Arduino Mini (168)"), _T("atmega168"), _T("eightanaloginputs"), _T("19200"), _T("10"));
|
|
CreateTarget(project, _T("Arduino Pro Mini (328)"), _T("atmega328p"), _T("standard"), _T("57600"), _T("11"));
|
|
CreateTarget(project, _T("Arduino Pro Mini (168)"), _T("atmega168"), _T("standard"), _T("19200"), _T("12"));
|
|
CreateTarget(project, _T("Arduino Mega 2560/ADK"), _T("atmega2560"), _T("mega"), _T("57600"), _T("13"));
|
|
CreateTarget(project, _T("Arduino Mega 1280"), _T("atmega1280"), _T("mega"), _T("57600"), _T("14"));
|
|
CreateTarget(project, _T("Arduino Mega 8"), _T("atmega8"), _T("standard"), _T("19200"), _T("15"));
|
|
|
|
// Debug build target
|
|
local target = project.GetBuildTarget(Wizard.GetDebugName());
|
|
if (!IsNull(target))
|
|
{
|
|
DebugSymbolsOn(target, Wizard.GetCompilerID());
|
|
SetSimTarget(project, target);
|
|
}
|
|
|
|
// Release build target
|
|
target = project.GetBuildTarget(Wizard.GetReleaseName());
|
|
if (!IsNull(target))
|
|
{
|
|
OptimizationsOn(target, Wizard.GetCompilerID());
|
|
SetSimTarget(project, target);
|
|
}
|
|
project.RenameBuildTarget(0, _T("Simulator - Debug"));
|
|
project.RenameBuildTarget(1, _T("Simulator - Release"));
|
|
|
|
return true;
|
|
}
|