cmake_minimum_required(VERSION 3.8) project(usr C ASM) set(CMAKE_C_FLAGS_DEBUG "-O0") add_definitions(${PMAKE_ARGS}) set(CMAKE_C_COMPILER "${CBC_COM}") include_directories("..") macro( GearsCommand ) set( _OPTIONS_ARGS ) set( _ONE_VALUE_ARGS TARGET ) set( _MULTI_VALUE_ARGS SOURCES ) cmake_parse_arguments( _Gears "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN} ) set (_Gears_CBC_SOURCES) set (_Gears_CSOURCES) foreach(i ${_Gears_SOURCES}) if (${i} MATCHES "\\.cbc") string(REGEX REPLACE "(.*).cbc" "c/\\1.c" j ${i}) add_custom_command ( OUTPUT ${j} DEPENDS ${i} COMMAND "perl" "gearsTools/generate_stub.pl" "-o" ${j} ${i} ) list(APPEND _Gears_CBC_SOURCES ${j}) elseif (${i} MATCHES "\\.cu") string(REGEX REPLACE "(.*).cu" "c/\\1.ptx" j ${i}) add_custom_command ( OUTPUT ${j} DEPENDS ${i} COMMAND nvcc ${NVCCFLAG} -c -ptx -o ${j} ${i} ) list(APPEND _Gears_CBC_SOURCES ${j}) else() set(j ${i}) list(APPEND _Gears_CSOURCES ${j}) endif() endforeach(i) add_custom_command ( OUTPUT c/${_Gears_TARGET}-context.c DEPENDS ${_Gears_CBC_SOURCES} COMMAND "perl" "gearsTools/generate_context.pl" "-o" ${_Gears_TARGET} ${_Gears_CBC_SOURCES} ) add_executable(${_Gears_TARGET} ${_Gears_CBC_SOURCES} ${_Gears_CSOURCES} c/${_Gears_TARGET}-context.c ) target_link_libraries(${_Gears_TARGET} ulib) endmacro() add_library(ulib STATIC ulib.c usys.c printf.c umalloc.c) set(USR_COMMANDS _cat _echo _grep _init _kill _ln _ls _mkdir _rm _sh _stressfs _usertests _wc _zombie _hello) foreach(cmd ${USR_COMMANDS) GearsCommand (TARGET ${cmd} SOURCES ${cmd}.c) end foreach(cmd) add_custom_command(OUTPUT fs.img COMMAND ./mkfs fs.img ${USR_COMMAND} UNIX DEPENDS ${USR_COMMANDS} )