@@ -4,52 +4,74 @@ import Distribution.Simple.LocalBuildInfo
44import Distribution.Simple.Setup
55import Distribution.Simple.Utils
66import Distribution.System
7+ import Distribution.Verbosity
78
89import System.Directory
910import System.Environment
1011
1112import Data.Maybe
1213
13- smartContractRoot = " ../concordium-base/smart-contracts"
14+ -- | Notify and execute a command, if fails exit with the same exit code.
15+ runCmd :: Verbosity -> String -> IO ()
16+ runCmd verbosity cmd = do
17+ notice verbosity $ " Running '" ++ cmd ++ " '"
18+ let command : args = words cmd
19+ rawSystemExit verbosity command $ args
1420
15- makeRust :: Args -> ConfigFlags -> IO HookedBuildInfo
16- makeRust args flags = do
21+ -- | Path to Concordium Smart Contract Engine rust crate relative to this file.
22+ smartContractEngineCrateRelative = " ../concordium-base/smart-contracts/wasm-chain-integration"
23+
24+ -- | Path to plt-scheduler rust crate relative to this file.
25+ pltSchedulerCrateRelative = " ../plt-scheduler"
26+
27+ preConfHook :: Args -> ConfigFlags -> IO HookedBuildInfo
28+ preConfHook args flags = do
1729 let verbosity = fromFlag $ configVerbosity flags
18- rawSystemExit verbosity " mkdir" [" -p" , smartContractRoot ++ " /lib" ]
1930
20- -- This way of determining the platform is not ideal.
21- notice verbosity " Calling 'cargo build'"
22- rawSystemExit
23- verbosity
24- " cargo"
25- [" build" , " --release" , " --manifest-path" , smartContractRoot ++ " /wasm-chain-integration/Cargo.toml" , " --features=enable-ffi" ]
31+ -- Convert relative paths into absolute paths.
32+ libraryDestination <- canonicalizePath " ./lib"
33+ -- Ensure destination directory exists.
34+ runCmd verbosity $ " mkdir -p " ++ libraryDestination
35+
36+ -- Build and copy/symlink Concordium Smart contract Engine library.
37+ smartContractEngineCrate <- canonicalizePath smartContractEngineCrateRelative
38+ runCmd verbosity $ " cargo build --release --locked --features=enable-ffi --manifest-path=" ++ smartContractEngineCrate ++ " /Cargo.toml"
39+ case buildOS of
40+ Windows -> do
41+ runCmd verbosity $ " cp -u " ++ smartContractEngineCrate ++ " /target/release/concordium_smart_contract_engine.dll " ++ libraryDestination
42+ OSX -> do
43+ runCmd verbosity $ " ln -s -f " ++ smartContractEngineCrate ++ " /target/release/libconcordium_smart_contract_engine.a " ++ libraryDestination
44+ runCmd verbosity $ " ln -s -f " ++ smartContractEngineCrate ++ " /target/release/libconcordium_smart_contract_engine.dylib " ++ libraryDestination
45+ _ -> do
46+ runCmd verbosity $ " ln -s -f " ++ smartContractEngineCrate ++ " /target/release/libconcordium_smart_contract_engine.a " ++ libraryDestination
47+ runCmd verbosity $ " ln -s -f " ++ smartContractEngineCrate ++ " /target/release/libconcordium_smart_contract_engine.so " ++ libraryDestination
48+
49+ -- Build and copy/symlink PLT scheduler project
50+ pltSchedulerCrate <- canonicalizePath pltSchedulerCrateRelative
51+ runCmd verbosity $ " cargo build --release --locked --features ffi --manifest-path=" ++ pltSchedulerCrate ++ " /Cargo.toml"
2652 case buildOS of
2753 Windows -> do
28- notice verbosity " Copying concordium_smart_contract_engine library"
29- rawSystemExit verbosity " cp" [" -u" , smartContractRoot ++ " /wasm-chain-integration/target/release/concordium_smart_contract_engine.dll" , smartContractRoot ++ " /lib/" ]
30- -- We remove the static library if it exists. Previously, it would have been copied
31- -- over, but now we want to just link with the dynamic library, so we ensure it is
32- -- removed.
33- rawSystemExit verbosity " rm" [" -f" , smartContractRoot ++ " /lib/libconcordium_smart_contract_engine.a" ]
54+ runCmd verbosity $ " cp -u " ++ pltSchedulerCrate ++ " /target/release/plt_scheduler.dll " ++ libraryDestination
55+ OSX -> do
56+ runCmd verbosity $ " ln -s -f " ++ pltSchedulerCrate ++ " /target/release/libplt_scheduler.a " ++ libraryDestination
57+ runCmd verbosity $ " ln -s -f " ++ pltSchedulerCrate ++ " /target/release/libplt_scheduler.dylib " ++ libraryDestination
3458 _ -> do
35- rawSystemExit verbosity " ln" [" -s" , " -f" , " ../wasm-chain-integration/target/release/libconcordium_smart_contract_engine.a" , smartContractRoot ++ " /lib/" ]
36- case buildOS of
37- OSX ->
38- rawSystemExit verbosity " ln" [" -s" , " -f" , " ../wasm-chain-integration/target/release/libconcordium_smart_contract_engine.dylib" , smartContractRoot ++ " /lib/libconcordium_smart_contract_engine.dylib" ]
39- _ ->
40- rawSystemExit verbosity " ln" [" -s" , " -f" , " ../wasm-chain-integration/target/release/libconcordium_smart_contract_engine.so" , smartContractRoot ++ " /lib/libconcordium_smart_contract_engine.so" ]
59+ runCmd verbosity $ " ln -s -f " ++ pltSchedulerCrate ++ " /target/release/libplt_scheduler.a " ++ libraryDestination
60+ runCmd verbosity $ " ln -s -f " ++ pltSchedulerCrate ++ " /target/release/libplt_scheduler.so " ++ libraryDestination
4161 return emptyHookedBuildInfo
4262
4363-- | On Windows, copy the DLL files to the binary install directory. This is to ensure that they
4464-- are accessible when running the binaries, tests and benchmarks.
45- copyDlls :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()
46- copyDlls _ flags pkgDescr lbi = case buildOS of
65+ postCopyHook :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO ()
66+ postCopyHook _ flags pkgDescr lbi = case buildOS of
4767 Windows -> do
4868 let installDirs = absoluteComponentInstallDirs pkgDescr lbi (localUnitId lbi) copydest
49- let copyLib lib = do
50- rawSystemExit verbosity " cp" [" -u" , smartContractRoot ++ " /lib/" ++ lib ++ " .dll" , bindir installDirs]
51- notice verbosity $ " Copy " ++ lib ++ " to " ++ bindir installDirs
52- copyLib " concordium_smart_contract_engine"
69+ -- Copy DLL for Concordium Smart Contract Engine
70+ smartContractEngineCrate <- canonicalizePath smartContractEngineCrateRelative
71+ runCmd verbosity $ " cp -u " ++ smartContractEngineCrate ++ " /target/release/concordium_smart_contract_engine.dll " ++ bindir installDirs
72+ -- Copy DLL for PLT scheduler
73+ pltSchedulerCrate <- canonicalizePath pltSchedulerCrateRelative
74+ runCmd verbosity $ " cp -u " ++ pltSchedulerCrate ++ " /target/release/plt_scheduler.dll " ++ bindir installDirs
5375 _ -> return ()
5476 where
5577 distPref = fromFlag (copyDistPref flags)
@@ -59,6 +81,6 @@ copyDlls _ flags pkgDescr lbi = case buildOS of
5981main =
6082 defaultMainWithHooks $
6183 simpleUserHooks
62- { preConf = makeRust ,
63- postCopy = copyDlls
84+ { preConf = preConfHook ,
85+ postCopy = postCopyHook
6486 }
0 commit comments