Files
qswiki/Makefile

121 wiersze
3.5 KiB
Makefile

CPPSTD=c++20
#CFIFLAGS=-fsanitize=cfi -fvisibility=hidden -fsanitize=cfi -flto
#Does not work reliably atm
CFIFLAGS=
CXXFLAGS=-std=$(CPPSTD) -O2 -g -no-pie -pipe -MMD -Wall -Wextra -DGLIBCXX_ASSERTIONS -D_LIBCPP_ENABLE_ASSERTIONS=1 $(CFIFLAGS)
RELEASE_CXXFLAGS=-std=$(CPPSTD) -O3 -pipe -MMD -Wall -Wextra -DGLIBCXX_ASSERTIONS -D_LIBCPP_ENABLE_ASSERTIONS=1 $(CFIFLAGS)
LDFLAGS=-lsqlite3 -lpthread -lcrypto -lstdc++fs $(CFIFLAGS)
INCLUDEFLAGS=-I submodules/sqlitemoderncpp/hdr -I submodules/cpp-httplib -I submodules/exile.h
SOURCES=$(wildcard *.cpp)
SOURCES+=$(wildcard gateway/*.cpp)
SOURCES+=$(wildcard handlers/*.cpp)
SOURCES+=$(wildcard database/*.cpp)
SOURCES+=$(wildcard cache/*.cpp)
SOURCES+=$(wildcard sandbox/*.cpp)
SOURCES+=$(wildcard dynamic/*.cpp)
HEADERS=$(wildcard *.h)
HEADERS+=$(wildcard gateway/*.h)
HEADERS+=$(wildcard handlers/*.h)
HEADERS+=$(wildcard database/*.h)
HEADERS+=$(wildcard cache/*.h)
HEADERS+=$(wildcard sandbox/*.h)
HEADERS+=$(wildcard dynamic/*.h)
BUILDDIR = build
OBJECTS=$(patsubst %.cpp, $(BUILDDIR)/%.o, $(SOURCES))
WIKIOBJECTS=$(filter-out test.o, $(OBJECTS))
TESTOBJECTS=$(filter-out qswiki.o, $(OBJECTS))
DEPENDS = ${WIKIOBJECTS:.o=.d}
-include ${DEPENDS}
# Points to the root of Google Test, relative to where this file is.
# Remember to tweak this if you move this file.
GTEST_DIR = ../../gtest/googletest
GTESTS_TESTDIR = ./tests/
GTEST_CXXFLAGS=-std=$(CPPSTD) -isystem $(GTEST_DIR)/include -I$(GTEST_DIR) -g -O0 -pipe -Wall -Wextra
GTEST_LDFLAGS=-lsqlite3 -g -O0 -lpthread -lcrypto -lstdc++fs
GTEST_OBJECTS=$(filter-out qswiki.o, $(WIKIOBJECTS))
RESOURCEDIR ?= template/quitesimple
RESOURCEFILES := $(shell find $(RESOURCEDIR) -type f)
RESOURCEOUTDIR := $(BUILDDIR)/resources
RESOURCEOBJECTS := $(patsubst $(RESOURCEDIR)/%,$(RESOURCEOUTDIR)/%.o,$(RESOURCEFILES))
GENERATED_PATH = $(BUILDDIR)/generated
OBJCOPY_ARCH := elf64-x86-64
OBJCOPY_TARGET := i386:x86-64
.DEFAULT_GOAL := qswiki
release: CXXFLAGS=$(RELEASE_CXXFLAGS)
profile: CXXFLAGS=$(RELEASE_CXXFLAGS) -pg
profile: LDFLAGS+= -pg
release: qswiki
profile: qswiki
OBJECTDIRS=$(sort $(dir $(OBJECTS)))
$(OBJECTS): | $(OBJECTDIRS)
$(OBJECTDIRS):
mkdir -p $@
$(BUILDDIR)/exile.o: submodules/exile.h/exile.c
$(CC) -std=c99 -c submodules/exile.h/exile.c -o $@
qswiki: $(WIKIOBJECTS) $(BUILDDIR)/exile.o genresources
$(CXX) $(shell shuf -e $(WIKIOBJECTS) $(RESOURCEOBJECTS) $(BUILDDIR)/exile.o ) ${LDFLAGS} ${INCLUDEFLAGS} -o $(BUILDDIR)/qswiki
test: $(TESTOBJECTS)
$(CXX) $(TESTOBJECTS) ${LDFLAGS} -o $(BUILDDIR)/test
gtest: $(GTESTS_TESTDIR)/*.cpp $(GTEST_OBJECTS)
$(CXX) -o gtest $(GTESTS_TESTDIR)/*.cpp $(GTEST_OBJECTS) $(GTEST_CXXFLAGS) $(GTEST_DIR)/src/gtest_main.cc $(GTEST_DIR)/src/gtest-all.cc $(GTEST_LDFLAGS)
$(BUILDDIR)/%.o:%.cpp
$(CXX) ${CXXFLAGS} ${INCLUDEFLAGS} -c -o $@ $<
$(BUILDDIR)/version.o:version.cpp
$(CXX) ${CXXFLAGS} ${INCLUDEFLAGS} -DGITCOMMIT=\"$(shell git rev-parse --short HEAD)\" -c -o $@ $<
$(BUILDDIR)/embedded.o:embedded.cpp genresources
$(CXX) ${CXXFLAGS} ${INCLUDEFLAGS} -I $(GENERATED_PATH) -c -o $@ $<
clean:
rm -r build
genresources: resources_gen.sh resources
./resources_gen.sh $(GENERATED_PATH) $(RESOURCEDIR)
$(RESOURCEOUTDIR)/%.o: $(RESOURCEDIR)/% .FORCE
@mkdir -p $(dir $@)
objcopy -I binary -O $(OBJCOPY_ARCH) -B $(OBJCOPY_TARGET) \
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
$< $@
.PHONY: resources
resources: $(RESOURCEOBJECTS)
.PHONY: clean-resources
clean-resources:
rm -rf $(RESOURCEOUTDIR)
rm -rf $(GENERATED_PATH)
.PHONY: .FORCE
.FORCE: