kopia lustrzana https://github.com/cariboulabs/cariboulite
60 wiersze
2.1 KiB
CMake
60 wiersze
2.1 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(smi_modules VERSION 0.1.0 LANGUAGES C)
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
|
# Module info
|
|
add_definitions(-D__KERNEL__ -DMODULE)
|
|
|
|
# Find the kernel release
|
|
execute_process(
|
|
COMMAND uname -r
|
|
OUTPUT_VARIABLE KERNEL_RELEASE
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
# Find the headers
|
|
find_path(
|
|
KERNELHEADERS_DIR
|
|
NAMES
|
|
include/linux/user.h
|
|
include/generated/autoconf.h
|
|
PATHS /usr/src/linux-headers-${KERNEL_RELEASE}
|
|
)
|
|
|
|
message(STATUS "Kernel release: ${KERNEL_RELEASE}")
|
|
message(STATUS "Kernel headers: ${KERNELHEADERS_DIR}")
|
|
|
|
function(compile_module obj)
|
|
set(TARGET_NAME ${obj})
|
|
add_custom_target(${TARGET_NAME} ALL cp -f ${CMAKE_CURRENT_SOURCE_DIR}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_BINARY_DIR}/
|
|
COMMAND echo "compiling module ${obj}.ko...")
|
|
list(LENGTH ARGN argn_len)
|
|
set(i 0)
|
|
set(depend_objlist "")
|
|
while(i LESS ${argn_len})
|
|
list(GET ARGN ${i} argn_value)
|
|
set(depend_objlist "${depend_objlist} ${argn_value}.o")
|
|
math(EXPR i "${i} + 1")
|
|
endwhile()
|
|
|
|
add_custom_command(TARGET ${TARGET_NAME}
|
|
POST_BUILD
|
|
COMMAND cp Makefile Makefile.bak
|
|
COMMAND echo "obj-m += ${obj}.o" > ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
#COMMAND echo "MY_CFLAGS += -g -DDEBUG" >> ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
#COMMAND echo "ccflags-y += -g -DDEBUG" >> ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
#COMMAND echo "CC += -g -DDEBUG" >> ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
COMMAND echo "ccflags-y += -O2 -DMODULE -D__KERNEL__" >> ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
COMMAND echo "${obj}-objs:=${depend_objlist}" >> ${CMAKE_CURRENT_BINARY_DIR}/Makefile
|
|
#COMMAND make -C ${KERNELHEADERS_DIR} M=${CMAKE_CURRENT_BINARY_DIR} modules EXTRA_CFLAGS="-g"
|
|
COMMAND make -C ${KERNELHEADERS_DIR} M=${CMAKE_CURRENT_BINARY_DIR} modules
|
|
COMMAND cp Makefile Makefile.op
|
|
COMMAND cp Makefile.bak Makefile
|
|
)
|
|
endfunction()
|
|
|
|
#compile_module(bcm2835_smi)
|
|
compile_module(smi_stream_dev)
|
|
#compile_module(bcm2835_smi_dev)
|