build: pass build profile as environment variable

This commit is contained in:
Zaiming (Stone) Shi 2022-08-13 10:38:22 +02:00
parent 4949fb222e
commit c93829c784
2 changed files with 47 additions and 5 deletions

11
build
View File

@ -14,9 +14,18 @@ if [ "$DEBUG" -eq 1 ]; then
set -x set -x
fi fi
PROFILE="$1" PROFILE_ARG="$1"
ARTIFACT="$2" ARTIFACT="$2"
if [[ "${PROFILE:-${PROFILE_ARG}}" != "$PROFILE_ARG" ]]; then
echo "PROFILE env var is set to '$PROFILE', but '$0' arg1 is '$1'"
exit 1
fi
# make sure PROFILE is exported, it is needed by rebar.config.erl
PROFILE=$PROFILE_ARG
export PROFILE
# ensure dir # ensure dir
cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")"

View File

@ -4,6 +4,7 @@
do(Dir, CONFIG) -> do(Dir, CONFIG) ->
ok = assert_otp(), ok = assert_otp(),
ok = warn_profile_env(),
case iolist_to_binary(Dir) of case iolist_to_binary(Dir) of
<<".">> -> <<".">> ->
C1 = deps(CONFIG), C1 = deps(CONFIG),
@ -117,6 +118,9 @@ is_raspbian() ->
is_win32() -> is_win32() ->
win32 =:= element(1, os:type()). win32 =:= element(1, os:type()).
project_app_dirs() ->
project_app_dirs(get_edition_from_profille_env()).
project_app_dirs(Edition) -> project_app_dirs(Edition) ->
["apps/*"] ++ ["apps/*"] ++
case is_enterprise(Edition) of case is_enterprise(Edition) of
@ -149,6 +153,9 @@ test_deps() ->
{er_coap_client, {git, "https://github.com/emqx/er_coap_client", {tag, "v1.0.5"}}} {er_coap_client, {git, "https://github.com/emqx/er_coap_client", {tag, "v1.0.5"}}}
]. ].
common_compile_opts(Vsn) ->
common_compile_opts(get_edition_from_profille_env(), Vsn).
common_compile_opts(Edition, Vsn) -> common_compile_opts(Edition, Vsn) ->
% always include debug_info % always include debug_info
[ [
@ -159,6 +166,32 @@ common_compile_opts(Edition, Vsn) ->
[{d, 'EMQX_BENCHMARK'} || os:getenv("EMQX_BENCHMARK") =:= "1"] ++ [{d, 'EMQX_BENCHMARK'} || os:getenv("EMQX_BENCHMARK") =:= "1"] ++
[{d, 'BUILD_WITHOUT_QUIC'} || not is_quicer_supported()]. [{d, 'BUILD_WITHOUT_QUIC'} || not is_quicer_supported()].
warn_profile_env() ->
case os:getenv("PROFILE") of
false ->
io:format(
standard_error,
"WARN: environment variable PROFILE is not set, using 'emqx-enterprise'~n",
[]
);
_ ->
ok
end.
%% this function is only used for test/check profiles
get_edition_from_profille_env() ->
case os:getenv("PROFILE") of
"emqx" ->
ce;
"emqx-enterprise" ->
ee;
false ->
ee;
V ->
io:format(standard_error, "ERROR: bad_PROFILE ~p~n", [V]),
exit(bad_PROFILE)
end.
prod_compile_opts(Edition, Vsn) -> prod_compile_opts(Edition, Vsn) ->
[ [
compressed, compressed,
@ -212,14 +245,14 @@ profiles_dev() ->
Vsn = get_vsn('emqx-enterprise'), Vsn = get_vsn('emqx-enterprise'),
[ [
{check, [ {check, [
{erl_opts, common_compile_opts(ee, Vsn)}, {erl_opts, common_compile_opts(Vsn)},
{project_app_dirs, project_app_dirs(ee)} {project_app_dirs, project_app_dirs()}
]}, ]},
{test, [ {test, [
{deps, test_deps()}, {deps, test_deps()},
{erl_opts, common_compile_opts(ee, Vsn) ++ erl_opts_i()}, {erl_opts, common_compile_opts(Vsn) ++ erl_opts_i()},
{extra_src_dirs, [{"test", [{recursive, true}]}]}, {extra_src_dirs, [{"test", [{recursive, true}]}]},
{project_app_dirs, project_app_dirs(ee)} {project_app_dirs, project_app_dirs()}
]} ]}
]. ].