diff --git a/pkgs/default.nix b/pkgs/default.nix index 255a365..a7a0189 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,12 +1,15 @@ final: prev: with prev.lib; let inherit (final) callPackage; + intel-decimalfp = callPackage ./intel-decimalfp {}; in { override = {}; athena-bccr = callPackage ./athena-bccr {vendor = "athena";}; ibkr-tws = callPackage ./ibkr-tws {}; + ibkr-tws-api = callPackage ./ibkr-tws-api {inherit intel-decimalfp;}; idopte-bccr = callPackage ./athena-bccr {vendor = "idopte";}; + inherit intel-decimalfp; snapborg = final.python3Packages.callPackage ./snapborg {}; socialpredict = callPackage ./socialpredict {}; spliit = callPackage ./spliit {}; diff --git a/pkgs/ibkr-tws-api/default.nix b/pkgs/ibkr-tws-api/default.nix new file mode 100644 index 0000000..879c3d2 --- /dev/null +++ b/pkgs/ibkr-tws-api/default.nix @@ -0,0 +1,150 @@ +{ + cmake, + lib, + fetchzip, + intel-decimalfp, + pkg-config, + protobuf, + python3Packages, + stdenv, +}: let + version = "1044.01"; + + src-with-protobuf = stdenv.mkDerivation { + pname = "ibkr-tws-api-src"; + inherit version; + + src = fetchzip { + url = "https://interactivebrokers.github.io/downloads/twsapi_macunix.${version}.zip"; + hash = "sha256-9bi2Mgp3qDHz8R2lrXEOYIeBffRKOWqKxDYecybR8Eo="; + stripRoot = false; + }; + + nativeBuildInputs = [ + protobuf + ]; + + configurePhase = '' + runHook preConfigure + + rm IBJts/source/{cppclient/client/protobufUnix/*,pythonclient/ibapi/protobuf/*} + protoc \ + -IIBJts/source/proto \ + --cpp_out=IBJts/source/cppclient/client/protobufUnix \ + --python_out=IBJts/source/pythonclient/ibapi/protobuf \ + IBJts/source/proto/*.proto + + sed -i '/^import / { s/\(\<[A-Za-z0-9_]*[A-Za-z0-9]_pb2\)/ibapi.protobuf.\1/g }' IBJts/source/pythonclient/ibapi/protobuf/*.py + touch IBJts/source/pythonclient/ibapi/protobuf/__init__.py + + runHook postConfigure + ''; + + installPhase = '' + runHook preInstall + + cp -r . $out + + runHook postInstall + ''; + }; + + native-lib = stdenv.mkDerivation { + pname = "ibkr-tws-api-native"; + inherit version; + + src = src-with-protobuf; + sourceRoot = "ibkr-tws-api-src-${version}/IBJts/source/cppclient/client"; + + buildInputs = [ + intel-decimalfp + protobuf + ]; + + postPatch = '' + sed -i 's/-std=c++11/-std=c++17/' makefile + ''; + + makeFlags = [ + "LIB_DIR=${intel-decimalfp}/lib" + "LIB_NAME=libbid.a" + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + cp -v lib*.so $out/lib + + runHook postInstall + ''; + }; + + test-client = stdenv.mkDerivation { + pname = "ibkr-tws-api-test-client"; + inherit version; + + src = src-with-protobuf; + sourceRoot = "ibkr-tws-api-src-${version}/IBJts/samples/Cpp/TestCppClient"; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + intel-decimalfp + native-lib + protobuf + ]; + + postPatch = '' + sed -i "s/-std=c++11/-std=c++17/; s@-lprotobuf@$(pkg-config --libs protobuf)@" makefile + ''; + + makeFlags = [ + "TestCppClientDynamic" + "LIB_DIR=${intel-decimalfp}/lib" + "LIB_NAME_SO=libbid.a" + "SOURCE_DIR=${native-lib}/lib" + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + install -m755 TestCppClientDynamic $out/bin/TestCppClient + + runHook postInstall + ''; + + postFixup = '' + patchelf --add-rpath ${native-lib}/lib $out/bin/TestCppClient + ''; + + meta = { + mainProgram = "TestCppClient"; + }; + }; + + py-client = { + buildPythonPackage, + protobuf, + }: + buildPythonPackage { + pname = "ibapi-python"; + inherit version; + + src = src-with-protobuf; + sourceRoot = "ibkr-tws-api-src-${version}/IBJts/source/pythonclient"; + + format = "setuptools"; + + propagatedBuildInputs = [ + protobuf + ]; + }; +in { + inherit test-client; + native = native-lib; + ibapi-python = python3Packages.callPackage py-client {}; +} diff --git a/pkgs/intel-decimalfp/default.nix b/pkgs/intel-decimalfp/default.nix new file mode 100644 index 0000000..9267b18 --- /dev/null +++ b/pkgs/intel-decimalfp/default.nix @@ -0,0 +1,41 @@ +{ + fetchzip, + lib, + stdenv, +}: let + version = "20U3"; +in + stdenv.mkDerivation { + pname = "intel-decimalfp"; + inherit version; + + src = fetchzip { + url = "https://www.netlib.org/misc/intel/IntelRDFPMathLib${version}.tar.gz"; + hash = "sha256-m+Yp1IwVEEZIz+cMQXHhkQrrWeRDfIk9ey7nWvV+u44="; + stripRoot = false; + }; + + sourceRoot = "source/LIBRARY"; + + makeFlags = [ + "OBJ_DIR=$(out)/lib" + "LIB_DIR=$(out)/lib" + ]; + + preBuild = '' + mkdir -p $out/lib + touch $out/lib/.directory_exists + ''; + + postBuild = '' + rm $out/lib/.directory_exists + ''; + + installPhase = '' + runHook preInstall + + rm -f $out/lib/*.o + + runHook postInstall + ''; + }