9db3116226
Ancient versions of CMake required else(), endif(), and similar block termination commands to have arguments matching the command starting the block. This is no longer the preferred style. Run the following shell code: for c in else endif endforeach endfunction endmacro endwhile; do echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/' done >convert.sed && git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' | egrep -z -v '^(Utilities/cm|Source/kwsys/)' | egrep -z -v 'Tests/CMakeTests/While-Endwhile-' | xargs -0 sed -i -f convert.sed && rm convert.sed
55 lines
2.1 KiB
CMake
55 lines
2.1 KiB
CMake
|
|
# 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)
|
|
set(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()
|
|
|
|
# compile a C file into an object file
|
|
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>")
|
|
|
|
# link object files to an executable
|
|
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <OBJECTS> --out-fmt-ihx -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 "")
|
|
|