shrub/Makefile

480 lines
11 KiB
Makefile
Raw Normal View History

2013-09-29 00:21:18 +04:00
# A simple makefile.
#
2014-11-14 02:33:46 +03:00
default: all
2015-04-01 23:56:43 +03:00
-include .make.conf
2014-11-14 02:33:46 +03:00
CORE=.MAKEFILE-VERSION
2015-02-20 08:27:23 +03:00
# Pick one of:
# linux
# osx
2013-09-29 00:21:18 +04:00
UNAME=$(shell uname)
ifeq ($(UNAME),Darwin)
OS=osx
else ifeq ($(UNAME),Linux)
OS=linux
else ifeq ($(UNAME),FreeBSD)
OS=bsd
2013-10-30 22:44:35 +04:00
else ifeq ($(UNAME),OpenBSD)
OS=bsd
else
2013-09-29 00:21:18 +04:00
$(error unknown unix)
endif
# Pick one of:
# little
# big
#
ENDIAN=little
# Binary directory - not in quotes.
#
BIN=bin
# Only include/link with this if it exists.
# (Mac OS X El Capitan clean install does not have /opt)
ifneq (,$(wildcard /opt/local/.))
OPTLOCALINC?=/opt/local/include
OPTLOCALLIB?=/opt/local/lib
endif
# Only include/link with this if it exists.
# (`brew install openssl` on Mac OS X El Capitan puts openssl here)
ifneq (,$(wildcard /usr/local/opt/openssl/.))
OPENSSLINC?=/usr/local/opt/openssl/include
OPENSSLLIB?=/usr/local/opt/openssl/lib
endif
# can't have empty -I or -L options due to whitespace sensitivity
ifdef OPTLOCALINC
OPTLOCALIFLAGS=-I$(OPTLOCALINC)
endif
ifdef OPTLOCALLIB
2016-08-31 22:12:48 +03:00
OPTLOCALLFLAGS=-L$(OPTLOCALLIB)
endif
ifdef OPENSSLINC
OPENSSLIFLAGS=-I$(OPENSSLINC)
endif
ifdef OPENSSLLIB
2016-08-31 22:12:48 +03:00
OPENSSLLFLAGS=-L$(OPENSSLLIB)
endif
2016-08-29 21:26:03 +03:00
CURLINC=$(shell curl-config --cflags)
CURLLIB=$(shell curl-config --libs)
2013-09-29 00:21:18 +04:00
RM=rm -f
2015-06-19 06:52:38 +03:00
CC=cc
2016-12-30 21:26:59 +03:00
LN=ln -f
2015-06-19 06:52:38 +03:00
CXX=c++
CXXFLAGS=$(CFLAGS)
2016-09-06 20:56:27 +03:00
CLD=c++ $(CFLAGS) -L/usr/local/lib $(OPTLOCALLFLAGS) $(OPENSSLLFLAGS)
2013-09-29 00:21:18 +04:00
ifeq ($(OS),osx)
CLDOSFLAGS=-bind_at_load
OSLIBS=-framework CoreServices -framework CoreFoundation
endif
ifeq ($(OS),linux)
2014-08-21 02:09:51 +04:00
OSLIBS=-lpthread -lrt -lcurses -lz
2014-01-27 22:48:55 +04:00
DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
2013-09-29 00:21:18 +04:00
endif
ifeq ($(OS),bsd)
2014-04-10 03:35:31 +04:00
OSLIBS=-lpthread -lncurses -lkvm
endif
2013-09-29 00:21:18 +04:00
2014-05-20 02:07:05 +04:00
ifeq ($(STATIC),yes)
2016-12-14 01:44:49 +03:00
LIBS=-lssl -lcrypto -luv -lncurses /usr/local/lib/libsigsegv.a /usr/local/lib/libgmp.a $(CURLLIB) $(OSLIBS)
2014-05-20 02:07:05 +04:00
else
2016-12-14 01:44:49 +03:00
LIBS=-lssl -lcrypto -luv -lgmp -lncurses -lsigsegv $(CURLLIB) $(OSLIBS)
2014-05-20 02:07:05 +04:00
endif
2013-09-29 00:21:18 +04:00
INCLUDE=include
2016-08-29 20:06:41 +03:00
MDEFINES=-DU3_OS_$(OS) -DU3_OS_ENDIAN_$(ENDIAN)
2013-09-29 00:21:18 +04:00
2015-10-19 11:33:25 +03:00
DEBUG=no
ifeq ($(DEBUG),yes)
CFLAGS=-g
2015-10-19 11:33:25 +03:00
else
CFLAGS?=-O3
2015-10-19 11:33:25 +03:00
endif
2014-10-28 20:36:22 +03:00
# NOTFORCHECKIN - restore -O3
2015-09-03 02:20:11 +03:00
# -DGHETTO \
2015-07-17 21:55:32 +03:00
# -DHUSH
CFLAGS+= $(COSFLAGS) -ffast-math \
2014-06-10 22:02:33 +04:00
-funsigned-char \
2013-09-29 00:21:18 +04:00
-I/usr/local/include \
$(OPTLOCALIFLAGS) \
$(OPENSSLIFLAGS) \
2016-08-29 21:26:03 +03:00
$(CURLINC) \
-I$(INCLUDE) \
-Ioutside/anachronism/include \
2014-04-11 05:05:59 +04:00
-Ioutside/ed25519/src \
2014-12-04 01:07:01 +03:00
-Ioutside/commonmark/src \
-Ioutside/commonmark/build/src \
2015-05-04 02:31:45 +03:00
-Ioutside/scrypt \
-Ioutside/softfloat-3/source/include \
-Ioutside/murmur3 \
2014-01-27 22:48:55 +04:00
$(DEFINES) \
$(MDEFINES)
2013-09-29 00:21:18 +04:00
# TODO remove -Wno-*
CWFLAGS=-Wall \
-Wextra \
-Wno-sign-compare \
-Wno-unused-parameter \
-Wno-missing-field-initializers \
2015-02-23 03:11:46 +03:00
-Wno-strict-aliasing \
-Wno-error
ifneq ($(OS),bsd)
CWFLAGS+=-Wno-error=unused-result
endif
2013-09-29 00:21:18 +04:00
# glibc 2.24 deprecates readdir_r; iff glibc >=2.24,
# don't upgrade 'deprecated declarations' warnings to errors
# dependency: `getconf`, which comes w/glibc
GLIBC := $(lastword $(shell getconf GNU_LIBC_VERSION 2>/dev/null))
# dependency: none, uses make's native functions
GLIBC_MAJ := $(word 1, $(subst ., ,$(GLIBC)))
GLIBC_MIN := $(word 2, $(subst ., ,$(GLIBC)))
# dependency: `expr` shell built-in
GLIBC_GE_2_24 := $(shell expr $(GLIBC_MAJ) ">" 2 "|" \
$(GLIBC_MAJ) "=" 2 "&" $(GLIBC_MIN) ">=" 24 2>/dev/null)
ifeq (1,$(GLIBC_GE_2_24))
CWFLAGS+=-Wno-error=deprecated-declarations
endif
2014-11-14 02:33:46 +03:00
ifdef NO_SILENT_RULES
%.o: %.c $(CORE)
$(CC) -c $(CWFLAGS) $(CFLAGS) -o $@ $<
@$(CC) -MM -MP $(CWFLAGS) $(CFLAGS) -MT $@ $< -MF .d/$*.d
else
%.o: %.c $(CORE)
@echo " CC $@"
@$(CC) -c $(CWFLAGS) $(CFLAGS) -o $@ $<
@$(CC) -MM -MP $(CWFLAGS) $(CFLAGS) -MT $@ $< -MF .d/$*.d
endif
2013-09-29 00:21:18 +04:00
2014-11-06 22:29:53 +03:00
N_OFILES=\
noun/allocate.o \
noun/events.o \
noun/hashtable.o \
noun/imprison.o \
noun/jets.o \
noun/manage.o \
noun/nock.o \
noun/retrieve.o \
noun/trace.o \
noun/xtract.o \
noun/vortex.o \
noun/zave.o
2013-09-29 00:21:18 +04:00
2014-11-06 22:49:41 +03:00
J_A_OFILES=\
jets/a/add.o \
jets/a/dec.o \
jets/a/div.o \
jets/a/gte.o \
jets/a/gth.o \
jets/a/lte.o \
jets/a/lth.o \
jets/a/mod.o \
jets/a/mul.o \
jets/a/sub.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_B_OFILES=\
jets/b/bind.o \
jets/b/clap.o \
jets/b/drop.o \
jets/b/flop.o \
jets/b/lent.o \
jets/b/levy.o \
jets/b/lien.o \
2015-09-14 21:31:02 +03:00
jets/b/murn.o \
jets/b/need.o \
2015-09-16 23:29:39 +03:00
jets/b/reap.o \
jets/b/reel.o \
jets/b/roll.o \
2015-09-19 19:50:39 +03:00
jets/b/skid.o \
jets/b/skim.o \
jets/b/skip.o \
jets/b/scag.o \
jets/b/slag.o \
jets/b/snag.o \
jets/b/sort.o \
jets/b/turn.o \
jets/b/weld.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_C_OFILES=\
jets/c/bex.o \
2015-08-27 13:38:24 +03:00
jets/c/xeb.o \
jets/c/can.o \
jets/c/cap.o \
jets/c/cat.o \
jets/c/con.o \
jets/c/cut.o \
jets/c/dor.o \
2015-07-29 23:43:55 +03:00
jets/c/dvr.o \
jets/c/dis.o \
jets/c/end.o \
jets/c/gor.o \
jets/c/hor.o \
jets/c/lsh.o \
jets/c/mas.o \
jets/c/met.o \
jets/c/mix.o \
jets/c/mug.o \
2016-08-02 20:35:32 +03:00
jets/c/muk.o \
jets/c/peg.o \
jets/c/po.o \
2015-07-29 23:43:55 +03:00
jets/c/pow.o \
jets/c/rap.o \
jets/c/rep.o \
jets/c/rip.o \
jets/c/rsh.o \
2015-07-29 23:43:55 +03:00
jets/c/sqt.o \
jets/c/vor.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_D_OFILES=\
jets/d/in_has.o \
jets/d/in_int.o \
jets/d/in_gas.o \
jets/d/in_mer.o \
jets/d/in_put.o \
jets/d/in_tap.o \
jets/d/in_uni.o \
2016-11-09 04:26:24 +03:00
jets/d/in_wyt.o \
2015-07-02 08:21:38 +03:00
jets/d/in_bif.o \
jets/d/in_dif.o \
jets/d/by_gas.o \
jets/d/by_get.o \
jets/d/by_has.o \
jets/d/by_int.o \
jets/d/by_put.o \
2015-07-02 08:21:38 +03:00
jets/d/by_uni.o \
jets/d/by_bif.o \
jets/d/by_dif.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_E_OFILES=\
2016-05-24 19:02:06 +03:00
jets/e/aes_ecb.o \
jets/e/aes_cbc.o \
jets/e/aesc.o \
jets/e/cue.o \
2015-07-31 05:01:20 +03:00
jets/e/fl.o \
jets/e/jam.o \
jets/e/mat.o \
jets/e/mink.o \
jets/e/mule.o \
jets/e/parse.o \
jets/e/rd.o \
2015-07-29 19:53:45 +03:00
jets/e/rq.o \
2015-07-29 23:43:55 +03:00
jets/e/rs.o \
jets/e/rub.o \
jets/e/scr.o \
jets/e/shax.o \
jets/e/lore.o \
jets/e/loss.o \
2016-03-03 08:06:24 +03:00
jets/e/lune.o \
jets/e/trip.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_E_OFILES_ED=\
jets/e/ed_puck.o \
jets/e/ed_sign.o \
jets/e/ed_veri.o \
jets/e/ed_shar.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_F_OFILES=\
jets/f/al.o \
jets/f/ap.o \
jets/f/cell.o \
jets/f/comb.o \
jets/f/cons.o \
jets/f/core.o \
jets/f/face.o \
jets/f/fitz.o \
jets/f/flan.o \
jets/f/flip.o \
jets/f/flor.o \
jets/f/fork.o \
jets/f/hike.o \
jets/f/look.o \
2014-09-05 23:55:16 +04:00
2014-11-06 22:49:41 +03:00
J_F_OFILES_UT=\
jets/f/ut.o \
jets/f/ut_burn.o \
2016-06-04 04:51:07 +03:00
jets/f/ut_buss.o \
jets/f/ut_conk.o \
jets/f/ut_crop.o \
2016-06-04 04:51:07 +03:00
jets/f/ut_find.o \
jets/f/ut_fire.o \
jets/f/ut_fish.o \
jets/f/ut_fuse.o \
jets/f/ut_gain.o \
jets/f/ut_lose.o \
jets/f/ut_mint.o \
jets/f/ut_mull.o \
jets/f/ut_nest.o \
jets/f/ut_peek.o \
2016-10-28 03:26:40 +03:00
jets/f/ut_peel.o \
jets/f/ut_play.o \
jets/f/ut_repo.o \
jets/f/ut_rest.o \
jets/f/ut_tack.o \
2015-12-26 14:44:32 +03:00
jets/f/ut_toss.o \
jets/f/ut_wrap.o
2014-09-05 23:55:16 +04:00
2014-12-04 02:21:55 +03:00
J_G_OFILES=\
jets/g/down.o
2014-12-04 02:21:55 +03:00
2014-09-05 23:55:16 +04:00
J_OFILES=\
2014-11-06 22:49:41 +03:00
$(J_A_OFILES) \
$(J_B_OFILES) \
$(J_C_OFILES) \
$(J_D_OFILES) \
$(J_E_OFILES) \
$(J_E_OFILES_ED) \
$(J_F_OFILES) \
$(J_F_OFILES_UT) \
2014-12-04 02:21:55 +03:00
$(J_G_OFILES) \
jets/tree.o
2014-09-05 23:55:16 +04:00
2014-11-06 22:29:53 +03:00
BASE_OFILES=$(N_OFILES) $(J_OFILES)
2013-09-29 00:21:18 +04:00
OUT_OFILES=\
outside/jhttp/http_parser.o \
outside/murmur3/MurmurHash3.o
2013-09-29 00:21:18 +04:00
2014-01-17 21:38:15 +04:00
V_OFILES=\
vere/ames.o \
vere/behn.o \
vere/cttp.o \
vere/http.o \
2016-12-30 21:26:59 +03:00
vere/newt.o \
vere/reck.o \
vere/term.o \
vere/time.o \
vere/unix.o \
vere/save.o \
2016-12-30 21:26:59 +03:00
vere/serf.o \
vere/pier.o \
vere/foil.o \
vere/walk.o \
vere/ivory.o
2014-01-17 21:38:15 +04:00
2014-08-21 02:09:51 +04:00
MAIN_FILE =\
vere/main.o
2014-08-21 02:09:51 +04:00
2014-01-17 21:38:15 +04:00
VERE_OFILES=\
$(OUT_OFILES) \
$(BASE_OFILES) \
$(MAIN_FILE) \
$(V_OFILES)
2013-09-29 00:21:18 +04:00
2014-11-14 02:33:46 +03:00
VERE_DFILES=$(VERE_OFILES:%.o=.d/%.d)
-include $(VERE_DFILES)
2014-04-11 04:09:01 +04:00
LIBED25519=outside/ed25519/ed25519.a
2014-05-20 02:07:05 +04:00
LIBANACHRONISM=outside/anachronism/build/libanachronism.a
2014-12-04 01:07:01 +03:00
LIBCOMMONMARK=outside/commonmark/build/src/libcmark.a
2015-05-04 02:31:45 +03:00
LIBSCRYPT=outside/scrypt/scrypt.a
2015-07-29 06:56:02 +03:00
LIBSOFTFLOAT=outside/softfloat-3/build/Linux-386-GCC/softfloat.a
TAGS=\
.tags \
.etags \
GPATH GTAGS GRTAGS \
cscope.in.out cscope.po.out cscope.out
2016-12-30 21:26:59 +03:00
all: urbit links
2014-09-29 01:56:17 +04:00
2015-04-01 23:56:43 +03:00
.MAKEFILE-VERSION: Makefile .make.conf
2014-11-14 02:33:46 +03:00
@echo "Makefile update."
@touch .MAKEFILE-VERSION
2015-04-01 23:56:43 +03:00
.make.conf:
@echo "# Set custom configuration here, please!" > ".make.conf"
2014-11-14 02:33:46 +03:00
2016-12-30 21:26:59 +03:00
links: urbit
$(LN) $(BIN)/urbit $(BIN)/urbit-worker
2015-05-19 21:38:23 +03:00
urbit: $(BIN)/urbit
2014-08-21 02:09:51 +04:00
2014-04-11 04:09:01 +04:00
$(LIBED25519):
$(MAKE) -C outside/ed25519
$(LIBANACHRONISM):
$(MAKE) -C outside/anachronism static
2014-12-04 01:07:01 +03:00
$(LIBCOMMONMARK):
$(MAKE) -C outside/commonmark
2015-05-04 02:31:45 +03:00
$(LIBSCRYPT):
$(MAKE) -C outside/scrypt MDEFINES="$(MDEFINES)"
2015-07-29 06:56:02 +03:00
$(LIBSOFTFLOAT):
$(MAKE) -C outside/softfloat-3/build/Linux-386-GCC
$(V_OFILES): include/vere/vere.h
2014-01-17 21:38:15 +04:00
2014-11-14 02:33:46 +03:00
ifdef NO_SILENT_RULES
2016-12-14 01:44:49 +03:00
$(BIN)/urbit: $(LIBCOMMONMARK) $(VERE_OFILES) $(LIBED25519) $(LIBANACHRONISM) $(LIBSCRYPT) $(LIBSOFTFLOAT)
2013-09-29 00:21:18 +04:00
mkdir -p $(BIN)
2016-12-14 01:44:49 +03:00
$(CLD) $(CLDOSFLAGS) -o $(BIN)/urbit $(VERE_OFILES) $(LIBED25519) $(LIBANACHRONISM) $(LIBS) $(LIBCOMMONMARK) $(LIBSCRYPT) $(LIBSOFTFLOAT)
2014-11-14 02:33:46 +03:00
else
2016-12-14 01:44:49 +03:00
$(BIN)/urbit: $(LIBCOMMONMARK) $(VERE_OFILES) $(LIBED25519) $(LIBANACHRONISM) $(LIBSCRYPT) $(LIBSOFTFLOAT)
2015-05-19 21:38:23 +03:00
@echo " CCLD $(BIN)/urbit"
2014-11-14 02:33:46 +03:00
@mkdir -p $(BIN)
2016-12-14 01:44:49 +03:00
@$(CLD) $(CLDOSFLAGS) -o $(BIN)/urbit $(VERE_OFILES) $(LIBED25519) $(LIBANACHRONISM) $(LIBS) $(LIBCOMMONMARK) $(LIBSCRYPT) $(LIBSOFTFLOAT)
2014-11-14 02:33:46 +03:00
endif
2014-09-22 20:10:57 +04:00
tags: ctags etags gtags cscope
ctags:
@ctags -R -f .tags --exclude=root || true
2013-09-29 00:21:18 +04:00
etags:
@etags -f .etags $$(find . -name '*.c' -or -name '*.h') || true
gtags:
@gtags || true
cscope:
@cscope -b -q -R || true
2013-09-29 00:21:18 +04:00
2014-05-20 02:07:05 +04:00
osxpackage:
$(RM) -r inst
$(MAKE) distclean
2015-05-19 21:38:23 +03:00
$(MAKE) $(BIN)/urbit LIB=/usr/local/lib/urb STATIC=yes
2014-05-20 02:07:05 +04:00
mkdir -p inst/usr/local/lib/urb inst/usr/local/bin
2015-05-19 21:38:23 +03:00
cp $(BIN)/urbit inst/usr/local/bin
2014-05-20 02:07:05 +04:00
cp urb/urbit.pill inst/usr/local/lib/urb
2015-05-19 21:38:23 +03:00
pkgbuild --root inst --identifier org.urbit.urbit --version 0.2 urbit.pkg
2014-05-20 02:07:05 +04:00
2014-05-22 03:21:16 +04:00
debbuild:
2015-05-19 21:38:23 +03:00
$(MAKE) $(BIN)/urbit LIB=/usr/share/urb
2014-05-22 03:21:16 +04:00
debinstall:
2014-05-26 05:48:07 +04:00
mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/share/urb
2015-05-19 21:38:23 +03:00
install -m755 $(BIN)/urbit $(DESTDIR)/usr/bin
2014-05-26 05:48:07 +04:00
cp urb/urbit.pill $(DESTDIR)/usr/share/urb
2014-05-22 03:21:16 +04:00
clean:
$(RM) $(VERE_OFILES) $(BIN)/urbit urbit.pkg $(VERE_DFILES) $(TAGS)
2015-09-10 07:56:36 +03:00
$(RM) -r debian/files debian/urbit*
2014-04-10 23:06:40 +04:00
# 'make distclean all -jn' ∀ n>1 still does not work because it is possible
# Make will attempt to build urbit while it is also cleaning urbit..
2016-12-14 01:44:49 +03:00
distclean: clean
2014-04-11 04:09:01 +04:00
$(MAKE) -C outside/ed25519 clean
$(MAKE) -C outside/anachronism clean
2015-05-04 02:31:45 +03:00
$(MAKE) -C outside/scrypt clean
2015-07-29 06:56:02 +03:00
$(MAKE) -C outside/softfloat-3/build/Linux-386-GCC clean
2014-05-22 03:21:16 +04:00
2014-06-10 22:19:55 +04:00
.PHONY: clean debbuild debinstalldistclean etags osxpackage tags