libcx/Makefile

56 lines
1.2 KiB
Makefile

LIB=libcx
BUILD_DIR?=build
COM_FLAGS = -fPIC -Isrc/include
CC_FLAGS = -std=c23
CXX_FLAGS = -std=c++23 -nostdinc++
LD_FLAGS = -nostdlib++ -lsupc++
CC=clang
CXX=clang
LD=clang
AR=ar
ifeq ($(DEBUG),true)
CXX_FLAGS += -DDEBUG -ggdb
CC_FLAGS += -DDEBUG -ggdb
LD_FLAGS += -ggdb
endif
cxx_sources=$(wildcard src/*.cpp)
c_sources=$(wildcard src/*.c)
objects=$(patsubst src/%.cpp,$(BUILD_DIR)/obj/%.cpp.o,$(cxx_sources)) $(patsubst src/%.c,$(BUILD_DIR)/obj/%.c.o,$(c_sources))
all: shared static compile_commands.json
shared: $(BUILD_DIR)/$(LIB).so
static: $(BUILD_DIR)/$(LIB).a
install: shared static
cp -r src/include/cx /usr/local/include/
cp $(BUILD_DIR)/libcx.a /usr/lib/
cp $(BUILD_DIR)/libcx.so /usr/lib/
ldconfig # updates linker cache
cp libcx.pc /usr/lib/pkgconfig/
$(BUILD_DIR)/$(LIB).a: $(objects)
$(AR) rcs $@ $^
$(BUILD_DIR)/$(LIB).so: $(objects)
$(LD) -shared -o $@ $^
clean:
rm -r $(BUILD_DIR)/obj/
$(BUILD_DIR)/obj/%.cpp.o: */%.cpp
@mkdir -p $(dir $@)
$(CXX) -c -o $@ $< $(CXX_FLAGS) $(COM_FLAGS)
$(BUILD_DIR)/obj/%.c.o: */%.c
@mkdir -p $(dir $@)
$(CC) -c -o $@ $< $(CC_FLAGS) $(COM_FLAGS)
compile_commands.json:
compiledb -n make