ソースを参照

ENH: add basic support for sdcc (http://sdcc.sourceforge.net), needs sdcc (sdcclib) cvs for creating libraries)

Alex
Alexander Neundorf 18 年 前
コミット
cd8687782b
2 ファイル変更47 行追加3 行削除
  1. 2 3
      Modules/CMakeCCompilerId.c
  2. 45 0
      Modules/Platform/Generic-SDCC-C.cmake

+ 2 - 3
Modules/CMakeCCompilerId.c

@@ -40,10 +40,9 @@
 # define COMPILER_ID "IAR" */
 
 /* sdcc, the small devices C compiler for embedded systems, 
-   http://sdcc.sourceforge.net 
-   Not supported yet by CMake.
+   http://sdcc.sourceforge.net  */
 #elif defined(SDCC)
-# define COMPILER_ID "SDCC" */
+# define COMPILER_ID "SDCC"
 
 #elif defined(_COMPILER_VERSION)
 # define COMPILER_ID "MIPSpro"

+ 45 - 0
Modules/Platform/Generic-SDCC-C.cmake

@@ -0,0 +1,45 @@
+
+# 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)
+
+# compile a C file into an object file
+SET(CMAKE_C_COMPILE_OBJECT  "<CMAKE_C_COMPILER> <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 "")
+