kore

Kore is a web application platform for writing scalable, concurrent web based processes in C or Python.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

Makefile (7908B)



      1 # Kore Makefile
      2 
      3 CC?=cc
      4 DESTDIR?=
      5 PREFIX?=/usr/local
      6 OBJDIR?=obj
      7 KORE=kore
      8 KODEV=kodev/kodev
      9 KOREPATH?=$(shell pwd)
     10 KORE_CRYPTO?=crypto
     11 INSTALL_DIR=$(PREFIX)/bin
     12 SHARE_DIR=$(PREFIX)/share/kore
     13 INCLUDE_DIR=$(PREFIX)/include/kore
     14 TLS_BACKEND?=openssl
     15 KORE_TMPDIR?=/tmp
     16 
     17 TOOLS=	kore-serve
     18 
     19 GENERATED=
     20 PLATFORM=platform.h
     21 VERSION=$(OBJDIR)/version
     22 PYTHON_CURLOPT=misc/curl/python_curlopt.h
     23 
     24 S_SRC=	src/kore.c src/buf.c src/config.c src/connection.c \
     25 	src/domain.c src/filemap.c src/fileref.c src/json.c src/log.c \
     26 	src/mem.c src/msg.c src/module.c src/net.c src/pool.c src/runtime.c \
     27 	src/sha1.c src/sha2.c src/timer.c src/utils.c src/worker.c
     28 S_SRC+= src/tls_$(TLS_BACKEND).c
     29 
     30 FEATURES=
     31 FEATURES_INC=
     32 
     33 CFLAGS+=-Wall -Werror -Wstrict-prototypes -Wmissing-prototypes
     34 CFLAGS+=-Wmissing-declarations -Wshadow -Wpointer-arith -Wcast-qual
     35 CFLAGS+=-Wsign-compare -Iinclude/kore -I$(OBJDIR) -std=c99 -pedantic
     36 CFLAGS+=-Wtype-limits -fno-common
     37 CFLAGS+=-DPREFIX='"$(PREFIX)"' -fstack-protector-all
     38 
     39 LDFLAGS+=-rdynamic
     40 
     41 ifeq ("$(TLS_BACKEND)", "openssl")
     42 	S_SRC+=src/keymgr_openssl.c
     43 	CFLAGS+=-DTLS_BACKEND_OPENSSL
     44 	FEATURES+=-DTLS_BACKEND_OPENSSL
     45 
     46 	ifneq ("$(OPENSSL_PATH)", "")
     47 		CFLAGS+=-I$(OPENSSL_PATH)/include
     48 		LDFLAGS+=-L$(OPENSSL_PATH)/lib -lssl -l$(KORE_CRYPTO)
     49 	else
     50 		LDFLAGS+=-lssl -l$(KORE_CRYPTO)
     51 	endif
     52 else
     53 ifneq ("$(ACME)", "")
     54 $(error ACME not supported under TLS backend $(TLS_BACKEND))
     55 endif
     56 endif
     57 
     58 ifneq ("$(KORE_SINGLE_BINARY)", "")
     59 	CFLAGS+=-DKORE_SINGLE_BINARY -DKORE_TMPDIR='"$(KORE_TMPDIR)"'
     60 	FEATURES+=-DKORE_SINGLE_BINARY
     61 endif
     62 
     63 ifneq ("$(DEBUG)", "")
     64 	CFLAGS+=-g
     65 	FEATURES+=-DKORE_DEBUG
     66 endif
     67 
     68 ifneq ("$(NOOPT)", "")
     69 	CFLAGS+=-O0
     70 else
     71 	CFLAGS+=-O2
     72 endif
     73 
     74 ifneq ("$(NOSENDFILE)", "")
     75 	CFLAGS+=-DKORE_NO_SENDFILE
     76 endif
     77 
     78 ifneq ("$(NOHTTP)", "")
     79 	CFLAGS+=-DKORE_NO_HTTP
     80 	FEATURES+=-DKORE_NO_HTTP
     81 else
     82 	S_SRC+= src/auth.c src/accesslog.c src/http.c \
     83 		src/route.c src/validator.c src/websocket.c
     84 endif
     85 
     86 ifneq ("$(PGSQL)", "")
     87 	S_SRC+=src/pgsql.c
     88 	LDFLAGS+=-L$(shell pg_config --libdir) -lpq
     89 	CFLAGS+=-I$(shell pg_config --includedir) -DKORE_USE_PGSQL \
     90 	    -DPGSQL_INCLUDE_PATH="\"$(shell pg_config --includedir)\""
     91 	FEATURES+=-DKORE_USE_PGSQL
     92 	FEATURES_INC+=-I$(shell pg_config --includedir)
     93 endif
     94 
     95 ifneq ("$(TASKS)", "")
     96 	S_SRC+=src/tasks.c
     97 	LDFLAGS+=-lpthread
     98 	CFLAGS+=-DKORE_USE_TASKS
     99 	FEATURES+=-DKORE_USE_TASKS
    100 endif
    101 
    102 ifneq ("$(JSONRPC)", "")
    103 	S_SRC+=src/jsonrpc.c
    104 	LDFLAGS+=-lyajl
    105 	CFLAGS+=-DKORE_USE_JSONRPC
    106 	FEATURES+=-DKORE_USE_JSONRPC
    107 endif
    108 
    109 ifneq ("$(PYTHON)", "")
    110 	S_SRC+=src/python.c
    111 	GENERATED+=$(PYTHON_CURLOPT)
    112 	KORE_PYTHON_LIB?=$(shell ./misc/python3-config.sh --ldflags)
    113 	KORE_PYTHON_INC?=$(shell ./misc/python3-config.sh --includes)
    114 	LDFLAGS+=$(KORE_PYTHON_LIB)
    115 	CFLAGS+=$(KORE_PYTHON_INC) -DKORE_USE_PYTHON
    116 	FEATURES+=-DKORE_USE_PYTHON
    117 	FEATURES_INC+=$(KORE_PYTHON_INC)
    118 endif
    119 
    120 ifneq ("$(LUA)", "")
    121 	S_SRC+=src/lua.c
    122 	KORE_LUA_LIB?=$(shell pkg-config --libs lua$(LUA_VERSION))
    123 	KORE_LUA_INC?=$(shell pkg-config --cflags lua$(LUA_VERSION))
    124 	LDFLAGS+=$(KORE_LUA_LIB)
    125 	CFLAGS+=$(KORE_LUA_INC) -DKORE_USE_LUA
    126 	FEATURES+=-DKORE_USE_LUA
    127 	FEATURES_INC+=$(KORE_LUA_INC)
    128 endif
    129 
    130 OSNAME=$(shell uname -s | sed -e 's/[-_].*//g' | tr A-Z a-z)
    131 ifeq ("$(OSNAME)", "freebsd")
    132 	KORE_CURL_LIB=-L/usr/local/lib -lcurl
    133 	KORE_CURL_INC=-I/usr/local/include
    134 endif
    135 
    136 ifneq ("$(ACME)", "")
    137 	S_SRC+=src/acme.c
    138 	CURL=1
    139 	CFLAGS+=-DKORE_USE_ACME
    140 	FEATURES+=-DKORE_USE_ACME
    141 endif
    142 
    143 ifneq ("$(CURL)", "")
    144 	S_SRC+=src/curl.c
    145 	KORE_CURL_LIB?=$(shell curl-config --libs)
    146 	KORE_CURL_INC?=$(shell curl-config --cflags)
    147 	LDFLAGS+=$(KORE_CURL_LIB)
    148 	CFLAGS+=$(KORE_CURL_INC) -DKORE_USE_CURL
    149 	FEATURES+=-DKORE_USE_CURL
    150 	FEATURES_INC+=$(KORE_CURL_INC)
    151 endif
    152 
    153 ifneq ("$(SANITIZE)", "")
    154 	CFLAGS+=-fsanitize=$(SANITIZE)
    155 	LDFLAGS+=-fsanitize=$(SANITIZE)
    156 endif
    157 
    158 ifeq ("$(OSNAME)", "darwin")
    159 	ifeq ("$(TLS_BACKEND)", "openssl")
    160 		OSSL_INCL=$(shell pkg-config openssl --cflags)
    161 		CFLAGS+=$(OSSL_INCL)
    162 		LDFLAGS+=$(shell pkg-config openssl --libs)
    163 		FEATURES_INC+=$(OSSL_INCL)
    164 	endif
    165 	S_SRC+=src/bsd.c
    166 else ifeq ("$(OSNAME)", "linux")
    167 	CFLAGS+=-D_GNU_SOURCE=1 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
    168 	LDFLAGS+=-ldl
    169 	S_SRC+=src/linux.c src/seccomp.c
    170 else
    171 	S_SRC+=src/bsd.c
    172 	ifneq ("$(JSONRPC)", "")
    173 		CFLAGS+=-I/usr/local/include
    174 		LDFLAGS+=-L/usr/local/lib
    175 	endif
    176 endif
    177 
    178 S_OBJS=	$(S_SRC:src/%.c=$(OBJDIR)/%.o)
    179 S_OBJS+=$(OBJDIR)/version.o
    180 
    181 all:
    182 	$(MAKE) $(OBJDIR)
    183 	$(MAKE) $(PLATFORM)
    184 	$(MAKE) $(KORE)
    185 	$(MAKE) $(KODEV)
    186 
    187 $(PLATFORM): force
    188 	@if [ -f misc/$(OSNAME)-platform.sh ]; then \
    189 		misc/$(OSNAME)-platform.sh > $(OBJDIR)/$(PLATFORM) ; \
    190 	fi
    191 
    192 $(PYTHON_CURLOPT): force
    193 	@cp $(PYTHON_CURLOPT) $(OBJDIR)
    194 
    195 $(VERSION).c: force
    196 	@if [ -d .git ]; then \
    197 		GIT_REVISION=`git rev-parse --short=8 HEAD`; \
    198 		GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`; \
    199 		rm -f $(VERSION)_gen; \
    200 		printf "const char *kore_version = \"%s-%s\";\n" \
    201 		    $$GIT_BRANCH $$GIT_REVISION > $(VERSION)_gen; \
    202 	elif [ -f RELEASE ]; then \
    203 		printf "const char *kore_version = \"%s\";\n" \
    204 		    `cat RELEASE` > $(VERSION)_gen; \
    205 	else \
    206 		echo "No version information found (no .git or RELEASE)"; \
    207 		exit 1; \
    208 	fi
    209 	@printf "const char *kore_build_date = \"%s\";\n" \
    210 	    `date +"%Y-%m-%d"` >> $(VERSION)_gen;
    211 	@if [ -f $(VERSION).c ]; then \
    212 		cmp -s $(VERSION)_gen $(VERSION).c; \
    213 		if [ $$? -ne 0 ]; then \
    214 			cp $(VERSION)_gen $(VERSION).c; \
    215 		fi \
    216 	else \
    217 		cp $(VERSION)_gen $(VERSION).c; \
    218 	fi
    219 
    220 $(KODEV): src/cli.c
    221 	$(MAKE) -C kodev
    222 
    223 $(KORE): $(S_OBJS) $(GENERATED)
    224 	$(CC) $(S_OBJS) $(LDFLAGS) -o $(KORE)
    225 	@echo $(LDFLAGS) > kore.linker
    226 	@echo $(FEATURES) $(FEATURES_INC) > kore.features
    227 
    228 objects: $(PLATFORM) $(GENERATED) $(S_OBJS)
    229 	@echo $(LDFLAGS) > $(OBJDIR)/ldflags
    230 	@echo "$(FEATURES) $(FEATURES_INC)" > $(OBJDIR)/features
    231 
    232 $(OBJDIR):
    233 	@mkdir -p $(OBJDIR)
    234 
    235 install:
    236 	mkdir -p $(DESTDIR)$(SHARE_DIR)
    237 	mkdir -p $(DESTDIR)$(INCLUDE_DIR)
    238 	mkdir -p $(DESTDIR)$(INSTALL_DIR)
    239 	install -m 555 $(KORE) $(DESTDIR)$(INSTALL_DIR)/$(KORE)
    240 	install -m 644 kore.features $(DESTDIR)$(SHARE_DIR)/features
    241 	install -m 644 kore.linker $(DESTDIR)$(SHARE_DIR)/linker
    242 	install -m 644 include/kore/*.h $(DESTDIR)$(INCLUDE_DIR)
    243 	install -m 644 misc/ffdhe4096.pem $(DESTDIR)$(SHARE_DIR)/ffdhe4096.pem
    244 	$(MAKE) -C kodev install
    245 	$(MAKE) install-sources
    246 
    247 install-sources:
    248 	@mkdir -p $(DESTDIR)$(SHARE_DIR)
    249 	@cp Makefile $(DESTDIR)$(SHARE_DIR)
    250 	@cp -R src $(DESTDIR)$(SHARE_DIR)
    251 	@cp -R include $(DESTDIR)$(SHARE_DIR)
    252 	@cp -R misc $(DESTDIR)$(SHARE_DIR)
    253 	@if [ -d .git ]; then \
    254 		GIT_REVISION=`git rev-parse --short=8 HEAD`; \
    255 		GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`; \
    256 		echo "$$GIT_BRANCH-$$GIT_REVISION" > \
    257 		    $(DESTDIR)$(SHARE_DIR)/RELEASE; \
    258 	elif [ -f RELEASE ]; then \
    259 		cp RELEASE $(DESTDIR)$(SHARE_DIR); \
    260 	else \
    261 		echo "No version information found (no .git or RELEASE)"; \
    262 		exit 1; \
    263 	fi
    264 
    265 uninstall:
    266 	rm -f $(DESTDIR)$(INSTALL_DIR)/$(KORE)
    267 	rm -rf $(DESTDIR)$(INCLUDE_DIR)
    268 	rm -rf $(DESTDIR)$(SHARE_DIR)
    269 	$(MAKE) -C kodev uninstall
    270 
    271 tools-build: $(KODEV)
    272 	for t in $(TOOLS); do \
    273 		cd tools/$$t; \
    274 		env \
    275 		    KODEV_OUTPUT=$(KOREPATH) \
    276 		    KORE_SOURCE=$(KOREPATH) \
    277 		    KORE_BUILD_FLAVOR=$(OSNAME) \
    278 		    $(KOREPATH)/$(KODEV) build; \
    279 		cd $(KOREPATH); \
    280 	done
    281 
    282 tools-clean: $(KODEV)
    283 	for t in $(TOOLS); do \
    284 		cd tools/$$t; \
    285 		$(KOREPATH)/$(KODEV) clean; \
    286 		cd $(KOREPATH); \
    287 	done
    288 
    289 tools-install:
    290 	mkdir -p $(DESTDIR)$(INSTALL_DIR)
    291 	for t in $(TOOLS); do \
    292 		install -m 555 $$t $(DESTDIR)$(INSTALL_DIR)/$$t; \
    293 	done
    294 
    295 $(OBJDIR)/%.o: src/%.c
    296 	$(CC) $(CFLAGS) -c $< -o $@
    297 
    298 src/kore.c: $(VERSION).c
    299 
    300 src/python.c: $(PYTHON_CURLOPT)
    301 
    302 src/seccomp.c: $(PLATFORM)
    303 
    304 clean:
    305 	rm -f $(VERSION).c $(VERSION)_gen
    306 	find . -type f -name \*.o -exec rm {} \;
    307 	rm -rf $(KORE) $(OBJDIR) kore.features kore.linker
    308 	$(MAKE) -C kodev clean
    309 
    310 releng-build-examples:
    311 	rm -rf /tmp/kore_releng
    312 	$(MAKE) clean
    313 	$(MAKE) PYTHON=1 PGSQL=1 TASKS=1 PREFIX=/tmp/kore_releng
    314 	$(MAKE) install PREFIX=/tmp/kore_releng
    315 	$(MAKE) -C examples
    316 
    317 .PHONY: all clean force