diff --git a/Makefile b/Makefile index b0d00683..324ddf52 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,6 @@ cover: test $(REBAR) cover test: compile - $(MAKE) -C c_src test $(REBAR) as test do eunit dialyzer: diff --git a/c_src/Makefile b/c_src/Makefile index b38fbf8b..455bb7cf 100644 --- a/c_src/Makefile +++ b/c_src/Makefile @@ -1,9 +1,18 @@ LEVELDB_VSN ?= "2.0.38" -BASEDIR = $(shell pwd) - -LDFLAGS := $(LDFLAGS) -L$(BASEDIR)/system/lib -CFLAGS += -I $(BASEDIR)/leveldb/include -fPIC -CXXFLAGS += -I $(BASEDIR)/leveldb/include -fPIC +C_SRC_DIR := $(shell pwd) +PROJECT_DIR := $(abspath $(C_SRC_DIR)/..) +TARGET_DIR := $(PROJECT_DIR)/priv/ + +# LevelDB tools +TOOLS = \ + leveldb_repair \ + perf_dump \ + sst_rewrite \ + sst_scan + +LDFLAGS := $(LDFLAGS) -lpthread +CFLAGS := $(CFLAGS) -I. -I $(C_SRC_DIRC_SRC_DIR)/leveldb/include -fPIC +CXXFLAGS := $(CXXFLAGS) -I. -I $(C_SRC_DIR)/leveldb/include -fPIC TEST_CXXFLAGS := $(CXXFLAGS) -Wno-narrowing ifeq ($(shell uname -s), Darwin) @@ -33,15 +42,16 @@ get-deps: fi compile: get-deps ldb - cp leveldb/perf_dump leveldb/sst_rewrite leveldb/sst_scan leveldb/leveldb_repair ../priv + for tool in $(TOOLS); do cp leveldb/$$tool $(TARGET_DIR); done ldb: @echo "Building LevelDB..." - $(MAKE) LDFLAGS="$(LDFLAGS) -lsnappy -lpthread" LD_LIBRARY_PATH="$(LD_LIBRARY_PATH)" -C leveldb all - $(MAKE) LDFLAGS="$(LDFLAGS) -lsnappy -lpthread" LD_LIBRARY_PATH="$(LD_LIBRARY_PATH)" -C leveldb tools + $(MAKE) LDFLAGS="" -C leveldb all + $(MAKE) LDFLAGS="$(LDFLAGS)" -C leveldb tools clean: $(MAKE) -C leveldb clean + for tool in $(TOOLS); do rm -f $(TARGET_DIR)$$tool; done test: compile - $(MAKE) PLATFORM_CXXFLAGS="$(TEST_CXXFLAGS)" LDFLAGS="$(LDFLAGS) -lsnappy -lpthread" LD_LIBRARY_PATH="$(LD_LIBRARY_PATH)" -C leveldb test + $(MAKE) LDFLAGS="$(LDFLAGS)" CXXFLAGS="$(CXXFLAGS)" CFLAGS="$(CFLAGS)" -C leveldb test diff --git a/make b/make deleted file mode 100755 index 65a74a10..00000000 --- a/make +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -which gmake 1>/dev/null 2>/dev/null && MAKE=gmake -MAKE=${MAKE:-make} - -$MAKE $@ diff --git a/rebar.config b/rebar.config index d66adc3f..409c8147 100644 --- a/rebar.config +++ b/rebar.config @@ -5,19 +5,20 @@ {plugins, [{eqc_rebar, {git, "https://github.com/Quviq/eqc-rebar", {branch, "master"}}}, pc]}. -{provider_hooks, - [ - {post, - [ - {compile, {pc, compile}}, - {clean, {pc, clean}} - ] - } - ] -}. - -{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, - deprecated_function_calls, deprecated_functions]}. +{provider_hooks, [ + {post, [ + {compile, {pc, compile}}, + {clean, {pc, clean}} + ]} +]}. + +{xref_checks, [ + undefined_function_calls, + undefined_functions, + locals_not_used, + deprecated_function_calls, + deprecated_functions +]}. {erl_opts, [warnings_as_errors, debug_info]}. @@ -25,19 +26,26 @@ {gha, [{erl_opts, [{d, 'GITHUBEXCLUDE'}]}]} ]}. -{port_specs, [{ "priv/eleveldb.so", ["c_src/*.cc"] }]}. +{port_specs, [{"priv/eleveldb.so", ["c_src/*.cc"]}]}. {artifacts, ["priv/eleveldb.so"]}. {port_env, [ - %% Make sure to set -fPIC when compiling leveldb - {"CFLAGS", "$CFLAGS -Wall -O3 -fPIC"}, - {"CXXFLAGS", "$CXXFLAGS -Wall -O3 -fPIC"}, - {"DRV_CFLAGS", "$DRV_CFLAGS -O3 -Wall -I c_src/leveldb/include -I c_src/leveldb"}, - {"DRV_LDFLAGS", "$DRV_LDFLAGS c_src/leveldb/libleveldb.a -lstdc++"} - ]}. + %% Make sure to set -fPIC when compiling leveldb + {"CXXFLAGS", "$CXXFLAGS -Wall -O3 -fPIC -I c_src/leveldb/include -I c_src/leveldb"}, + {"LDFLAGS", "$LDFLAGS c_src/leveldb/libleveldb.a -lsnappy -lstdc++"} +]}. -{pre_hooks, [{'get-deps', "./make -C c_src get-deps"}, - {compile, "./make -C c_src compile"}]}. +{pre_hooks, [ + {"(linux|darwin|solaris)", 'get-deps', "./make -C c_src get-deps"}, + {"(freebsd|netbsd|openbsd)", 'get-deps', "gmake -C c_src get-deps"}, + {"(linux|darwin|solaris)", compile, "make -C c_src compile"}, + {"(freebsd|netbsd|openbsd)", compile, "gmake -C c_src compile"}, + {"(linux|darwin|solaris)", eunit, "make -C c_src test"}, + {"(freebsd|netbsd|openbsd)", eunit, "gmake -C c_src test"} +]}. -{post_hooks, [{clean, "./make -C c_src clean"}]}. +{post_hooks, [ + {"(linux|darwin|solaris)", clean, "make -C c_src clean"}, + {"(freebsd|netbsd|openbsd)", clean, "gmake -C c_src clean"} +]}. diff --git a/rebar.config.script b/rebar.config.script index 9e75fbd2..5cf2ec5f 100644 --- a/rebar.config.script +++ b/rebar.config.script @@ -6,12 +6,19 @@ %% actually running. case os:type() of {unix,darwin} -> - Opt = " -mmacosx-version-min=10.8 -stdlib=libc++", + DefaultOpt = " -mmacosx-version-min=10.8 -stdlib=libc++", + Opt = case os:find_executable("brew") of + false -> + DefaultOpt; + _Brew -> + HomebrewPrefix = string:trim(os:cmd("brew --prefix")), + DefaultOpt ++ " -L" ++ HomebrewPrefix ++ "/lib" + end, [Mjr|_] = string:tokens(os:cmd("/usr/bin/uname -r"), "."), Major = list_to_integer(Mjr), if Major >= 13 -> - Flags = ["CFLAGS", "CXXFLAGS", "DRV_CFLAGS", "DRV_LDFLAGS"], + Flags = ["CFLAGS", "CXXFLAGS", "LDFLAGS"], {port_env, Vals} = lists:keyfind(port_env, 1, CONFIG), Fold = fun({Flag,Val}, Acc) -> case lists:member(Flag, Flags) of