diff --git a/nix/lib.nix b/nix/lib.nix new file mode 100644 index 0000000..b0d8bb2 --- /dev/null +++ b/nix/lib.nix @@ -0,0 +1,88 @@ +# Builds the logos-storage-ui library +{ pkgs, common, src, logosStorageModule, logosSdk }: + +pkgs.stdenv.mkDerivation { + pname = "${common.pname}-lib"; + version = common.version; + + inherit src; + inherit (common) buildInputs cmakeFlags meta env; + + # Add logosSdk to nativeBuildInputs for logos-cpp-generator + nativeBuildInputs = common.nativeBuildInputs ++ [ logosSdk ]; + + preConfigure = '' + runHook prePreConfigure + + # Create generated_code directory for generated files + mkdir -p ./generated_code + + # Copy include files from logos-storage-module result + echo "Copying include files from logos-storage-module..." + if [ -d "${logosStorageModule}/include" ]; then + echo "Found include directory in logos-storage-module" + cp -r "${logosStorageModule}/include"/* ./generated_code/ + echo "Copied include files:" + ls -la ./generated_code/ + else + echo "Warning: No include directory found in logos-storage-module" + fi + + # Run logos-cpp-generator with metadata.json and --general-only flag + echo "Running logos-cpp-generator..." + logos-cpp-generator --metadata ${src}/metadata.json --general-only --output-dir ./generated_code + + # Check what was generated by logos-cpp-generator + echo "Checking generated files in generated_code:" + ls -la ./generated_code/ + + # Create include directory and move generated files there if they exist + if [ -f "./generated_code/core_manager_api.h" ] || [ -f "./generated_code/logos_sdk.h" ]; then + echo "Creating include directory and moving generated files..." + mkdir -p ./generated_code/include + # Move generated header files to include directory + for file in ./generated_code/*.h; do + if [ -f "$file" ]; then + mv "$file" ./generated_code/include/ + fi + done + # Also copy generated .cpp files to include directory + for file in ./generated_code/*.cpp; do + if [ -f "$file" ]; then + cp "$file" ./generated_code/include/ + fi + done + echo "Generated include directory:" + ls -la ./generated_code/include/ + else + echo "Warning: No header files generated by logos-cpp-generator" + fi + + runHook postPreConfigure + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + # Find and copy the built library file from the modules directory + if [ -f modules/storage_ui.dylib ]; then + cp modules/storage_ui.dylib $out/lib/ + elif [ -f modules/storage_ui.so ]; then + cp modules/storage_ui.so $out/lib/ + else + echo "Error: No library file found" + exit 1 + fi + + # Also install the generated include files + if [ -d "./generated_code/include" ]; then + mkdir -p $out/include + cp -r ./generated_code/include/* $out/include/ + echo "Installed generated include files:" + ls -la $out/include/ + fi + + runHook postInstall + ''; +} \ No newline at end of file