@@ -328,40 +328,39 @@ in rec {
328328 });
329329 in allConfig;
330330 in (mkProject (projectDefinition args)).projectConfig);
331− mainProjectOut = projectOut { inherit system; };
331+ projectOutHost = projectOut { inherit system; };
332332 serverOn = projectInst: version: serverExe
333333 projectInst.ghc.backend
334− mainProjectOut.ghcjs.frontend
334+ projectOutHost.ghcjs.frontend
335335 projectInst.passthru.staticFiles
336336 projectInst.passthru.__closureCompilerOptimizationLevel
337337 version;
338− linuxExe = serverOn (projectOut { system = "x86_64-linux"; });
339338 dummyVersion = "Version number is only available for deployments";
340− in mainProjectOut // {
341− __unstable__.profiledObRun = let
342− profiled = projectOut { inherit system; enableLibraryProfiling = true; };
343− exeSource = builtins.toFile "ob-run.hs" ''
344− {-# LANGUAGE NoImplicitPrelude #-}
345− {-# LANGUAGE PackageImports #-}
346− module Main where
347−
348− -- Explicitly import Prelude from base lest there be multiple modules called Prelude
349− import "base" Prelude (IO, (++), read)
350−
351− import "base" Control.Exception (finally)
352− import "reflex" Reflex.Profiled (writeProfilingData)
353− import "base" System.Environment (getArgs)
354−
355− import qualified "obelisk-run" Obelisk.Run
356− import qualified Frontend
357− import qualified Backend
358−
359− main :: IO ()
360− main = do
361− [portStr, assets, profFileName] <- getArgs
362− Obelisk.Run.run (read portStr) (Obelisk.Run.runServeAsset assets) Backend.backend Frontend.frontend
363− `finally` writeProfilingData (profFileName ++ ".rprof")
364− '';
339+ profiledObRun =
340+ let
341+ profiled = projectOut { inherit system; enableLibraryProfiling = true; };
342+ exeSource = builtins.toFile "ob-run-profiled.hs" ''
343+ {-# LANGUAGE NoImplicitPrelude #-}
344+ {-# LANGUAGE PackageImports #-}
345+ module Main where
346+
347+ -- Explicitly import Prelude from base lest there be multiple modules called Prelude
348+ import "base" Prelude (IO, (++), read)
349+
350+ import "base" Control.Exception (finally)
351+ import "reflex" Reflex.Profiled (writeProfilingData)
352+ import "base" System.Environment (getArgs)
353+
354+ import qualified "obelisk-run" Obelisk.Run
355+ import qualified Frontend
356+ import qualified Backend
357+
358+ main :: IO ()
359+ main = do
360+ [portStr, assets, profFileName] <- getArgs
361+ Obelisk.Run.run (read portStr) (Obelisk.Run.runServeAsset assets) Backend.backend Frontend.frontend
362+ `finally` writeProfilingData (profFileName ++ ".rprof")
363+ '';
365364 in nixpkgs.runCommand "ob-run" {
366365 buildInputs = [ (profiled.ghc.ghcWithPackages (p: [p.backend p.frontend])) ];
367366 } ''
@@ -369,14 +368,16 @@ in rec {
369368 mkdir -p $out/bin
370369 ghc -x hs -prof -fno-prof-auto -threaded ob-run.hs -o $out/bin/ob-run
371370 '';
372−
373− linuxExeConfigurable = linuxExe;
374− linuxExe = linuxExe dummyVersion;
375− exe = serverOn mainProjectOut dummyVersion;
371+ in projectOutHost // lib.makeExtensible (self: {
372+ __unstable__.profiledObRun = profiledObRun;
373+ exeConfigurable = { system, version }: serverOn (projectOut { inherit system; }) version;
374+ exe = self.exeConfigurable { inherit system; version = dummyVersion; };
375+ linuxExeConfigurable = version: self.exeConfigurable { system = "x86_64-linux"; inherit version; };
376+ linuxExe = self.linuxExeConfigurable dummyVersion;
376377 server = args@{ hostName, adminEmail, routeHost, enableHttps, version, module ? serverModules.mkBaseEc2 }:
377− server (args // { exe = linuxExe version; });
378+ server (args // { exe = self.linuxExeConfigurable version; });
378379 obelisk = import (base' + "/.obelisk/impl") {};
379− };
380+ });
380381 haskellPackageSets = {
381382 inherit (reflex-platform) ghc ghcjs;
382383 };