12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # 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 "")
|