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