| |
| # This file implements basic support for sdcc (http://sdcc.sourceforge.net/) |
| # a free C compiler for 8 and 16 bit microcontrollers. |
| # To use it either a toolchain file is required or cmake has to be run like this: |
| # cmake -DCMAKE_C_COMPILER=sdcc -DCMAKE_SYSTEM_NAME=Generic <dir...> |
| # Since sdcc doesn't support C++, C++ support should be disabled in the |
| # CMakeLists.txt using the project() command: |
| # project(my_project C) |
| |
| set(CMAKE_STATIC_LIBRARY_PREFIX "") |
| set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") |
| set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib |
| set(CMAKE_SHARED_LIBRARY_SUFFIX ".lib") # .so |
| set(CMAKE_IMPORT_LIBRARY_PREFIX ) |
| set(CMAKE_IMPORT_LIBRARY_SUFFIX ) |
| set(CMAKE_EXECUTABLE_SUFFIX ".ihx") # intel hex file |
| set(CMAKE_LINK_LIBRARY_SUFFIX ".lib") |
| set(CMAKE_DL_LIBS "") |
| |
| set(CMAKE_C_OUTPUT_EXTENSION ".rel") |
| |
| # find sdcclib as CMAKE_AR |
| # since cmake may already have searched for "ar", sdcclib has to |
| # be searched with a different variable name (SDCCLIB_EXECUTABLE) |
| # and must then be forced into the cache |
| get_filename_component(SDCC_LOCATION "${CMAKE_C_COMPILER}" PATH) |
| find_program(SDCCLIB_EXECUTABLE sdcclib PATHS "${SDCC_LOCATION}" NO_DEFAULT_PATH) |
| find_program(SDCCLIB_EXECUTABLE sdcclib) |
| set(CMAKE_AR "${SDCCLIB_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" FORCE) |
| |
| # CMAKE_C_FLAGS_INIT and CMAKE_EXE_LINKER_FLAGS_INIT should be set in a CMAKE_SYSTEM_PROCESSOR file |
| if(NOT DEFINED CMAKE_C_FLAGS_INIT) |
| string(APPEND CMAKE_C_FLAGS_INIT " -mmcs51 --model-small") |
| endif() |
| |
| if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT) |
| set (CMAKE_EXE_LINKER_FLAGS_INIT --model-small) |
| endif() |
| |
| set(CMAKE_C_LINKER_WRAPPER_FLAG "-Wl" ",") |
| |
| # compile a C file into an object file |
| set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") |
| |
| # link object files to an executable |
| set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <OBJECTS> -o <TARGET> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>") |
| |
| # needs sdcc 2.7.0 + sddclib from cvs |
| set(CMAKE_C_CREATE_STATIC_LIBRARY |
| "\"${CMAKE_COMMAND}\" -E remove <TARGET>" |
| "<CMAKE_AR> -a <TARGET> <LINK_FLAGS> <OBJECTS> ") |
| |
| # not supported by sdcc |
| set(CMAKE_C_CREATE_SHARED_LIBRARY "") |
| set(CMAKE_C_CREATE_MODULE_LIBRARY "") |