From 2011b6f9daadb9e232d0bdc6241b65c0883e1c41 Mon Sep 17 00:00:00 2001 From: leepike Date: Wed, 15 Apr 2015 11:09:45 -0700 Subject: [PATCH] tower-aadl: generate kconfig, kbuild, etc. Also decompose Makefiles. --- tower-aadl/src/Tower/AADL.hs | 10 +++- tower-aadl/src/Tower/AADL/Build.hs | 74 ++++++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 6 deletions(-) diff --git a/tower-aadl/src/Tower/AADL.hs b/tower-aadl/src/Tower/AADL.hs index 146df9ae..3e09d25c 100644 --- a/tower-aadl/src/Tower/AADL.hs +++ b/tower-aadl/src/Tower/AADL.hs @@ -62,9 +62,15 @@ runCompileAADL opts' t = do outputAADLDeps (dir "AADL_FILES") (tyPkg ++ thdNames ++ [configSystemName c]) genIvoryCode (ivoryOpts dir) code deps sigs - writeFile (dir "Makefile") (makefile (configOpts opts')) - writeFile (dir (addExtension "build" "sh")) buildScript + wrFile ramsesMakefileName + (ramsesMakefile (configOpts opts')) + wrFile buildScriptName buildScript + wrFile kbuildName (kbuild dir) + wrFile kconfigName (kconfig dir dir) + wrFile kconfigName (kconfig dir dir) + wrFile makefileName makefile where + wrFile fName = writeFile (dir fName) go d = outputAADL dir (docName d) r where r = renderDocPkg (aTypesPkg docs) thdNames d diff --git a/tower-aadl/src/Tower/AADL/Build.hs b/tower-aadl/src/Tower/AADL/Build.hs index 6e41a8eb..63fc1100 100644 --- a/tower-aadl/src/Tower/AADL/Build.hs +++ b/tower-aadl/src/Tower/AADL/Build.hs @@ -5,8 +5,12 @@ module Tower.AADL.Build where +import Data.Char import Tower.AADL.Config (Config(..)) +-------------------------------------------------------------------------------- +-- Ramses build + buildScript :: String buildScript = unlines [ @@ -24,12 +28,15 @@ buildScript = unlines , "java -jar $RAMSES_PATH/ramses.jar -g rtos -i $AADL2RTOS_CONFIG_DIR -o . -l trace -s sys.impl -m SMACCM_SYS.aadl,$AADL_LIST" ] -makefile :: Config -> String -makefile c = unlines +buildScriptName :: String +buildScriptName = "ramses-build.sh" + +ramsesMakefile :: Config -> String +ramsesMakefile c = unlines [ ".PHONY: ramses" , "ramses:" - , tab "sh build.sh" + , tab "sh " ++ buildScriptName , "" , ".PHONY: tower-clean" , "tower-clean:" @@ -40,4 +47,63 @@ makefile c = unlines , tab "-rm -rf " ++ configSrcsDir c , tab "-rm -rf " ++ configHdrDir c ] - where tab = ('\t' :) + +ramsesMakefileName :: String +ramsesMakefileName = "ramses.mk" + +-------------------------------------------------------------------------------- +-- Kbuild, Kconfig + +kbuild :: String -> String +kbuild dir = unlines + [ "apps-$(CONFIG_APP_" ++ shellVar dir ++ ") += " ++ dir + , dir ++ ": libsel4 libmuslc libsel4platsupport libsel4muslccamkes libsel4camkes libsel4sync libsel4debug libsel4bench" + ] + +kbuildName :: String +kbuildName = "Kbuild" + +kconfig :: String -> String -> String +kconfig prog dir = unlines + [ "config APP_" ++ shellVar dir + , " bool \"Generated code for " ++ prog ++ " .\"" + , " default n" + , " select APP_CAMKES_EXECUTIVE" + , " help" + , " Generated AADL from " ++ prog + ] + +kconfigName :: String +kconfigName = "Kconfig" + +camkesMakefileName :: String +camkesMakefileName = "camkesmakefile.mk" + +otherCamkesTargets :: String +otherCamkesTargets = "othercamkestargets.mk" + +makefile :: String +makefile = unlines + [ + incl ramsesMakefileName + , incl camkesMakefileName + , incl otherCamkesTargets + , "" + , "camkesMakefileName: " ++ mkTp + , tab $ unwords ["cp ", mkTp, camkesMakefileName] + ] + where + mkTp = "make_template/Makefile" + incl = ("-include " ++) + +makefileName :: String +makefileName = "Makefile" + +-------------------------------------------------------------------------------- +-- Helpers + +tab :: String -> String +tab = ('\t' :) + +shellVar :: String -> String +shellVar = map toUpper