You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.6 KiB
110 lines
3.6 KiB
2 years ago
|
#! /usr/bin/env bash
|
||
|
|
||
|
name=$1
|
||
|
cmake_version=$2
|
||
|
c_standard=$3
|
||
|
|
||
|
# Finds the directory of this script
|
||
|
if [[ "$OS_TYPE" == "linux-gnu" ]]; then
|
||
|
script_dir=$(cd "$( dirname "`readlink -f ${BASH_SOURCE[0]}`")" && pwd)
|
||
|
else
|
||
|
script_dir=$(cd "$( dirname "`greadlink -f ${BASH_SOURCE[0]}`")" && pwd)
|
||
|
fi
|
||
|
|
||
|
if [ -z $name ]
|
||
|
then
|
||
|
echo "Name must be specified"
|
||
|
echo ""
|
||
|
echo "./cgen.sh <name> [cmake version] [C Standard]"
|
||
|
exit -1
|
||
|
fi
|
||
|
|
||
|
if [ -z $cmake_version ]
|
||
|
then
|
||
|
echo "No CMake version supplied...defaulting to 3.15"
|
||
|
cmake_version="3.15"
|
||
|
fi
|
||
|
|
||
|
if [ -z $c_standard ]
|
||
|
then
|
||
|
echo "No C Standard supplied...defaulting to 11"
|
||
|
c_standard="11"
|
||
|
fi
|
||
|
|
||
|
mkdir $name
|
||
|
mkdir $name/src
|
||
|
mkdir $name/include
|
||
|
|
||
|
cmake_config=$name/CMakeLists.txt
|
||
|
|
||
|
touch $cmake_config
|
||
|
|
||
|
echo "cmake_minimum_required(VERSION $cmake_version)" >> $cmake_config
|
||
|
echo "project($name)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "set (CMAKE_C_STANDARD $c_standard)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "# Output to bin and lib" >> $cmake_config
|
||
|
echo "set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/lib)" >> $cmake_config
|
||
|
echo "set(CMAKE_LIBRARY_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/lib)" >> $cmake_config
|
||
|
echo "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \${CMAKE_BINARY_DIR}/bin)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "# The following lines enable compile_commands.json and dump it in the root of the project" >> $cmake_config
|
||
|
echo "# This is needed for clangd and lsp to work" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "set(CMAKE_EXPORT_COMPILE_COMMANDS ON)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "if(EXISTS \"\${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json\")" >> $cmake_config
|
||
|
echo " execute_process(COMMAND \${CMAKE_COMMAND} -E copy_if_different" >> $cmake_config
|
||
|
echo " \${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json" >> $cmake_config
|
||
|
echo " \${CMAKE_CURRENT_SOURCE_DIR}/compile_commands.json" >> $cmake_config
|
||
|
echo " )" >> $cmake_config
|
||
|
echo "endif()" >> $cmake_config
|
||
|
echo "#-------- END COMPILE_COMMANDS.JSON SECTION --------#" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "file(GLOB SOURCE \${PROJECT_SOURCE_DIR}/src/*.c)" >> $cmake_config
|
||
|
echo "file(GLOB INCLUDE \${PROJECT_SOURCE_DIR}/include/*.h)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "include_directories(\${PROJECT_SOURCE_DIR}/include)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "# Controls debug printing based on the compiled binary mode - check with #ifdef DEBUG_BUILD" >> $cmake_config
|
||
|
echo "IF(CMAKE_BUILD_TYPE MATCHES DEBUG)" >> $cmake_config
|
||
|
echo "message(\"-- Configuring debug build...\")" >> $cmake_config
|
||
|
echo "add_compile_definitions(DEBUG_BUILD)" >> $cmake_config
|
||
|
echo "ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)" >> $cmake_config
|
||
|
echo "" >> $cmake_config
|
||
|
echo "add_executable(\${PROJECT_NAME} \${SOURCE} \${INCLUDE})" >> $cmake_config
|
||
|
|
||
|
|
||
|
echo "Copying .clang-format..."
|
||
|
cp $script_dir/cgen_etc/clang_format_template $name/.clang-format
|
||
|
|
||
|
echo "Copying .gitignore..."
|
||
|
cp $script_dir/cgen_etc/gitignore_template $name/.gitignore
|
||
|
|
||
|
sample_file=$name/src/main.c
|
||
|
|
||
|
echo "#include <stdio.h>" >> $sample_file
|
||
|
echo "" >> $sample_file
|
||
|
echo "" >> $sample_file
|
||
|
echo "int main(int argc, char **argv)" >> $sample_file
|
||
|
echo "{" >> $sample_file
|
||
|
echo " printf(\"Hello, world!\\n\");" >> $sample_file
|
||
|
echo " return 0;" >> $sample_file
|
||
|
echo "}" >> $sample_file
|
||
|
echo "" >> $sample_file
|
||
|
|
||
|
git --version 2>&1 >/dev/null
|
||
|
GIT_IS_AVAILABLE=$?
|
||
|
|
||
|
if [ $GIT_IS_AVAILABLE -eq 0 ]
|
||
|
then
|
||
|
git init $name
|
||
|
fi
|
||
|
|
||
|
echo "Created project $name."
|