Add CMake build
This commit is contained in:
parent
7bb26dbe88
commit
a5c62cfe1e
3 changed files with 97 additions and 0 deletions
81
CMakeLists.txt
Normal file
81
CMakeLists.txt
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
cmake_minimum_required(VERSION 3.27)
|
||||||
|
|
||||||
|
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||||
|
message(FATAL_ERROR "Do not build in-source. Please remove CMakeCache.txt and the CMakeFiles/ directory. Then build out-of-source.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
project(sparsemap LANGUAGES C)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
set(CMAKE_C_OUTPUT_EXTENSION .o)
|
||||||
|
|
||||||
|
# Set source and header file locations
|
||||||
|
set(SOURCE_DIR src)
|
||||||
|
set(HEADER_DIR include)
|
||||||
|
|
||||||
|
set(COMMON_CMAKE_C_FLAGS "-Wall -Wextra -Wpedantic")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "-DSPARSEMAP_DIAGNOSTIC -DDEBUG -g -O0")
|
||||||
|
set(CMAKE_C_FLAGS_PROFILE "-DSPARSEMAP_DIAGNOSTIC -DDEBUG -g -Og -fsanitize=address,leak,object-size,pointer-compare,pointer-subtract,null,return,bounds,pointer-overflow,undefined -fsanitize-address-use-after-scope")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "-Ofast")
|
||||||
|
|
||||||
|
# Include all header files from the header directory
|
||||||
|
file(GLOB_RECURSE HEADERS CONFIGURE_FILES ${HEADER_DIR}/*.h)
|
||||||
|
|
||||||
|
# Configure library sources
|
||||||
|
set(LIB_SRC
|
||||||
|
${SOURCE_DIR}/sparsemap.c
|
||||||
|
)
|
||||||
|
|
||||||
|
# Option to control building shared/static libraries
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
||||||
|
|
||||||
|
# Add shared library
|
||||||
|
add_library(sparsemap_SHARED SHARED ${LIB_SRC} ${HEADERS})
|
||||||
|
# Set target properties for shared library (adjust if needed)
|
||||||
|
set_target_properties(sparsemap_SHARED PROPERTIES
|
||||||
|
VERSION 1.0.0 # Set library version
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" # Set output directory
|
||||||
|
COMPILE_FLAGS "${CMAKE_C_FLAGS_${CMAKE_CURRENT_LIST_MODE}}"
|
||||||
|
)
|
||||||
|
target_include_directories(sparsemap_SHARED PRIVATE ${HEADER_DIR})
|
||||||
|
|
||||||
|
# Add static library
|
||||||
|
add_library(sparsemap STATIC ${LIB_SRC} ${HEADERS})
|
||||||
|
# Set target properties for static library (adjust if needed)
|
||||||
|
set_target_properties(sparsemap PROPERTIES
|
||||||
|
OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" # Set output directory
|
||||||
|
)
|
||||||
|
target_include_directories(sparsemap PRIVATE ${HEADER_DIR})
|
||||||
|
|
||||||
|
# Add ex_1 program
|
||||||
|
add_executable(ex_1 examples/ex_1.c tests/munit.c lib/common.c)
|
||||||
|
target_link_libraries(ex_1 PRIVATE sparsemap)
|
||||||
|
target_include_directories(ex_1 PRIVATE ${HEADER_DIR})
|
||||||
|
add_custom_target(run_ex_1 COMMAND ex_1 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
|
# Add ex_2 program
|
||||||
|
add_executable(ex_2 examples/ex_2.c tests/munit.c lib/common.c)
|
||||||
|
target_link_libraries(ex_2 PRIVATE sparsemap)
|
||||||
|
target_include_directories(ex_2 PRIVATE ${HEADER_DIR})
|
||||||
|
add_custom_target(run_ex_2 COMMAND ex_2 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
|
# Add ex_3 program
|
||||||
|
add_executable(ex_3 examples/ex_3.c tests/munit.c lib/common.c)
|
||||||
|
target_link_libraries(ex_3 PRIVATE sparsemap)
|
||||||
|
target_include_directories(ex_3 PRIVATE ${HEADER_DIR})
|
||||||
|
add_custom_target(run_ex_3 COMMAND ex_3 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
|
# Add ex_4 program
|
||||||
|
add_executable(ex_4 examples/ex_4.c tests/munit.c lib/common.c)
|
||||||
|
target_link_libraries(ex_4 PRIVATE sparsemap)
|
||||||
|
target_include_directories(ex_4 PRIVATE ${HEADER_DIR})
|
||||||
|
add_custom_target(run_ex_4 COMMAND ex_4 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
|
# Add test program
|
||||||
|
add_executable(test tests/test.c tests/munit.c lib/common.c)
|
||||||
|
target_link_libraries(test PRIVATE sparsemap)
|
||||||
|
target_include_directories(test PRIVATE ${HEADER_DIR})
|
||||||
|
add_custom_target(run_test COMMAND test WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
14
build.sh
Executable file
14
build.sh
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
target=${1:-Debug}
|
||||||
|
set targets="Debug Profile Release"
|
||||||
|
case "$target" in
|
||||||
|
$targets*) echo "Building ${target}..." ;;
|
||||||
|
*) echo "Unknown target ${target}, exiting." ;;
|
||||||
|
esac
|
||||||
|
name=${target,,}
|
||||||
|
echo $name
|
||||||
|
rm -rf "./cmake-build-${name}-system" && \
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=${target} -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_C_COMPILER=clang -G Ninja -S "${PWD}" -B "${PWD}/cmake-build-${name}-system" && \
|
||||||
|
(cd "${PWD}/cmake-build-${name}-system" && ninja)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
act
|
act
|
||||||
autoconf
|
autoconf
|
||||||
clang
|
clang
|
||||||
|
cmake
|
||||||
ed
|
ed
|
||||||
gcc
|
gcc
|
||||||
gdb
|
gdb
|
||||||
|
@ -31,6 +32,7 @@
|
||||||
graphviz-nox
|
graphviz-nox
|
||||||
libtool
|
libtool
|
||||||
m4
|
m4
|
||||||
|
ninja
|
||||||
perl
|
perl
|
||||||
pkg-config
|
pkg-config
|
||||||
python3
|
python3
|
||||||
|
|
Loading…
Reference in a new issue