build: hectic C: shared library in build
This commit is contained in:
@@ -20,6 +20,7 @@ stdenv.mkDerivation {
|
|||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/lib $out/include $out/bin
|
mkdir -p $out/lib $out/include $out/bin
|
||||||
cp target/libhectic.a $out/lib/
|
cp target/libhectic.a $out/lib/
|
||||||
|
cp target/libhectic.so $out/lib/
|
||||||
cp hectic.h $out/include/
|
cp hectic.h $out/include/
|
||||||
|
|
||||||
# Create hectic-config script
|
# Create hectic-config script
|
||||||
@@ -27,9 +28,10 @@ stdenv.mkDerivation {
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: hectic-config [--cflags] [--libs]"
|
echo "Usage: hectic-config [--cflags] [--libs] [--static]"
|
||||||
echo " --cflags Print the compiler flags"
|
echo " --cflags Print the compiler flags"
|
||||||
echo " --libs Print the linker flags"
|
echo " --libs Print the linker flags (dynamic library by default)"
|
||||||
|
echo " --static When used with --libs, use static linking"
|
||||||
echo " --help Display this help message"
|
echo " --help Display this help message"
|
||||||
exit \$1
|
exit \$1
|
||||||
}
|
}
|
||||||
@@ -38,13 +40,28 @@ stdenv.mkDerivation {
|
|||||||
usage 1
|
usage 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
static=0
|
||||||
|
|
||||||
|
for arg in "\$@"; do
|
||||||
|
if [ "\$arg" = "--static" ]; then
|
||||||
|
static=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
while [ \$# -gt 0 ]; do
|
while [ \$# -gt 0 ]; do
|
||||||
case "\$1" in
|
case "\$1" in
|
||||||
--cflags)
|
--cflags)
|
||||||
echo "-I$out/include"
|
echo "-I$out/include"
|
||||||
;;
|
;;
|
||||||
--libs)
|
--libs)
|
||||||
|
if [ \$static -eq 1 ]; then
|
||||||
|
echo "-L$out/lib -static -lhectic"
|
||||||
|
else
|
||||||
echo "-L$out/lib -lhectic"
|
echo "-L$out/lib -lhectic"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--static)
|
||||||
|
# Already processed above
|
||||||
;;
|
;;
|
||||||
--help)
|
--help)
|
||||||
usage 0
|
usage 0
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ esac
|
|||||||
RUN_TESTS=1
|
RUN_TESTS=1
|
||||||
OPTFLAGS="-O2"
|
OPTFLAGS="-O2"
|
||||||
CFLAGS="-Wall -Wextra -Werror -pedantic -fsanitize=address -fanalyzer"
|
CFLAGS="-Wall -Wextra -Werror -pedantic -fsanitize=address -fanalyzer"
|
||||||
|
LDFLAGS="-lhectic"
|
||||||
STD_FLAGS="-std=c99"
|
STD_FLAGS="-std=c99"
|
||||||
COLOR_FLAG=""
|
COLOR_FLAG=""
|
||||||
DEBUG=0
|
DEBUG=0
|
||||||
@@ -96,9 +97,18 @@ case "$MODE" in
|
|||||||
build)
|
build)
|
||||||
mkdir -p target
|
mkdir -p target
|
||||||
echo "# Build library"
|
echo "# Build library"
|
||||||
|
# Build object file with position independent code for shared library
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
cc $CFLAGS $OPTFLAGS $STD_FLAGS -c hectic.c -o target/hectic.o
|
cc $CFLAGS $OPTFLAGS $STD_FLAGS -fPIC -c hectic.c -o target/hectic.o
|
||||||
|
|
||||||
|
# Create static library (.a)
|
||||||
|
echo "# Creating static library (libhectic.a)"
|
||||||
ar rcs target/libhectic.a target/hectic.o
|
ar rcs target/libhectic.a target/hectic.o
|
||||||
|
|
||||||
|
# Create shared library (.so)
|
||||||
|
echo "# Creating shared library (libhectic.so)"
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
cc -shared -o target/libhectic.so target/hectic.o
|
||||||
;;
|
;;
|
||||||
check)
|
check)
|
||||||
mkdir -p target/test
|
mkdir -p target/test
|
||||||
@@ -137,7 +147,8 @@ case "$MODE" in
|
|||||||
exe="target/test/$test_name"
|
exe="target/test/$test_name"
|
||||||
echo "Building test: $test_name"
|
echo "Building test: $test_name"
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
cc $CFLAGS $OPTFLAGS -I. "$test_file" -Ltarget -lhectic $LDFLAGS -o "$exe"
|
# Explicitly link with the static library to maintain original behavior
|
||||||
|
cc $CFLAGS $OPTFLAGS -I. "$test_file" -o "$exe" target/libhectic.a
|
||||||
if [ "$?" -ne 0 ]; then
|
if [ "$?" -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user