Generic-SDCC-C.cmake 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # This file implements basic support for sdcc (http://sdcc.sourceforge.net/)
  2. # a free C compiler for 8 and 16 bit microcontrollers.
  3. # To use it either a toolchain file is required or cmake has to be run like this:
  4. # cmake -DCMAKE_C_COMPILER=sdcc -DCMAKE_SYSTEM_NAME=Generic <dir...>
  5. # Since sdcc doesn't support C++, C++ support should be disabled in the
  6. # CMakeLists.txt using the PROJECT() command:
  7. # PROJECT(my_project C)
  8. SET(CMAKE_STATIC_LIBRARY_PREFIX "")
  9. SET(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
  10. SET(CMAKE_SHARED_LIBRARY_PREFIX "") # lib
  11. SET(CMAKE_SHARED_LIBRARY_SUFFIX ".lib") # .so
  12. SET(CMAKE_IMPORT_LIBRARY_PREFIX )
  13. SET(CMAKE_IMPORT_LIBRARY_SUFFIX )
  14. SET(CMAKE_EXECUTABLE_SUFFIX ".ihx") # intel hex file
  15. SET(CMAKE_LINK_LIBRARY_SUFFIX ".lib")
  16. SET(CMAKE_DL_LIBS "")
  17. SET(CMAKE_C_OUTPUT_EXTENSION ".rel")
  18. # find sdcclib as CMAKE_AR
  19. # since cmake may already have searched for "ar", sdcclib has to
  20. # be searched with a different variable name (SDCCLIB_EXECUTABLE)
  21. # and must then be forced into the cache
  22. GET_FILENAME_COMPONENT(SDCC_LOCATION "${CMAKE_C_COMPILER}" PATH)
  23. FIND_PROGRAM(SDCCLIB_EXECUTABLE sdcclib PATHS "${SDCC_LOCATION}" NO_DEFAULT_PATH)
  24. FIND_PROGRAM(SDCCLIB_EXECUTABLE sdcclib)
  25. SET(CMAKE_AR "${SDCCLIB_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" FORCE)
  26. # CMAKE_C_FLAGS_INIT and CMAKE_EXE_LINKER_FLAGS_INIT should be set in a CMAKE_SYSTEM_PROCESSOR file
  27. IF(NOT DEFINED CMAKE_C_FLAGS_INIT)
  28. SET(CMAKE_C_FLAGS_INIT "-mmcs51 --model-small")
  29. ENDIF(NOT DEFINED CMAKE_C_FLAGS_INIT)
  30. IF(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT)
  31. SET (CMAKE_EXE_LINKER_FLAGS_INIT --model-small)
  32. ENDIF(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT)
  33. # compile a C file into an object file
  34. SET(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>")
  35. # link object files to an executable
  36. SET(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <OBJECTS> --out-fmt-ihx -o <TARGET> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>")
  37. # needs sdcc 2.7.0 + sddclib from cvs
  38. SET(CMAKE_C_CREATE_STATIC_LIBRARY
  39. "\"${CMAKE_COMMAND}\" -E remove <TARGET>"
  40. "<CMAKE_AR> -a <TARGET> <LINK_FLAGS> <OBJECTS> ")
  41. # not supported by sdcc
  42. SET(CMAKE_C_CREATE_SHARED_LIBRARY "")
  43. SET(CMAKE_C_CREATE_MODULE_LIBRARY "")