% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
% ex: ts=4 sw=4 ft=erlang et
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.

% Windows is "special" so we treat it "specially"
Msys = "msys2_shell.cmd -defterm -no-start -ucrt64 -here -lc ".

% Disabled CONFIG_LTO=y as of June 2025. It interfered with -j8 and microbench
% on quickjs repo didn't show any measurable per benefit for it. It even looked
% a bit slower on ubuntu-noble/x86_64 (lto:9032ns vs nolto:8746ns) and only a
% tiny bit faster on MacOS x86_64 (lto:12646 vs nolto:12614)
%
PreHooks = [
    {"(linux|darwin)", compile, "make -C quickjs -j8 libquickjs.a qjsc"},
    {"freebsd", compile, "gmake -C quickjs -j8 libquickjs.a qjsc"},
    {"win32", compile, Msys ++ "'make -C quickjs -j8 libquickjs.a qjsc.exe'"},
    {"(linux|darwin|freebsd|win32)", compile, "escript build_js.escript compile"}
].

PostHooks = [
    {"(linux|darwin)", clean, "make -C quickjs clean"},
    {"freebsd", clean, "gmake -C quickjs clean"},
    {"win32", clean, Msys ++ "'make -C quickjs clean'"},
    {"(linux|darwin|freebsd|win32)", clean, "escript build_js.escript clean"}
].

% We're not building a driver just an executable so we don't
% need all the Erlang/OTP headers and libraries
ResetFlags = [
    {"ERL_CFLAGS", ""},
    {"ERL_LDFLAGS", ""},
    {"EXE_CFLAGS", ""},
    {"EXE_LDFLAGS", ""}
].

UnixEnv = [
    {"CFLAGS", "$CFLAGS -g -Wall -O2 -Iquickjs"},
    {"LDFLAGS", "$LDFLAGS quickjs/libquickjs.a -lpthread -lm"}
] ++ ResetFlags.

WindowsEnv = [
    {"CFLAGS", "-D_GNU_SOURCE -O2 -fwrapv -DCONFIG_VERSION=\\\"0\\\" -Iquickjs"},
    {"LDFLAGS", "$LDFLAGS -lm -Wl,-Bstatic -lpthread quickjs/libquickjs.a"},
    {"EXE_CC_TEMPLATE", "gcc.exe -g -c $CFLAGS $PORT_IN_FILES -o $PORT_OUT_FILE"},
    {"EXE_LINK_TEMPLATE", "gcc.exe -g -lm $PORT_IN_FILES $LDFLAGS -o $PORT_OUT_FILE"}
].

% couchjs_*_bytecode.c sources are auto-generated by build_js.escript
%
UnixMainjsSrc = ["c_src/couchjs.c", "c_src/couchjs_mainjs_bytecode.c"],
UnixCoffeeSrc = ["c_src/couchjs.c", "c_src/couchjs_coffee_bytecode.c"],

WindowsBaseSrc = [
    "quickjs/quickjs.c",
    "quickjs/dtoa.c",
    "quickjs/libregexp.c",
    "quickjs/libunicode.c",
    "quickjs/cutils.c",
    "quickjs/libbf.c"
].

WindowsMainjsSrc = WindowsBaseSrc ++ UnixMainjsSrc.
WindowsCoffeeSrc = WindowsBaseSrc ++ UnixCoffeeSrc.

PortSpecs = [
    {"(linux|darwin|freebsd)", "priv/couchjs_mainjs", UnixMainjsSrc, [{env, UnixEnv}]},
    {"(linux|darwin|freebsd)", "priv/couchjs_coffee", UnixCoffeeSrc, [{env, UnixEnv}]},
    {"win32", "priv/couchjs_mainjs.exe", WindowsMainjsSrc, [{env, WindowsEnv}]},
    {"win32", "priv/couchjs_coffee.exe", WindowsCoffeeSrc, [{env, WindowsEnv}]}
].

AddConfig = [
    {port_specs, PortSpecs},
    {pre_hooks, PreHooks},
    {post_hooks, PostHooks}
].

lists:foldl(fun({K, V}, CfgAcc) ->
    case lists:keyfind(K, 1, CfgAcc) of
        {K, Existent} when is_list(Existent) andalso is_list(V) ->
            lists:keystore(K, 1, CfgAcc, {K, Existent ++ V});
        false ->
            lists:keystore(K, 1, CfgAcc, {K, V})
    end
end, CONFIG, AddConfig).
