1- import docker
1+ import docker , argparse , os , time
22from docker .errors import DockerException
33from docker import DockerClient
4+ from docker .types import Mount
45from operator import attrgetter
56from itertools import chain
67from typing import Any , Callable
7- import argparse
88
99IMAGE : str = 'francescomecatti/tricore-dev-env:1.0'
1010
@@ -27,16 +27,35 @@ def inner(*args, **kwargs):
2727 print (f'Downloading container { IMAGE } ...' )
2828 client .images .pull (IMAGE )
2929 print ('Done!' )
30-
30+
3131 f (client , * args , ** kwargs )
3232
3333 return inner
3434
3535
3636@container_startup
3737def build (client : DockerClient , args : Any ) -> None :
38- out = client .containers .run (IMAGE , 'ls /' , remove = True )
38+ abs_path = os .path .join (os .getcwd (), args .folder )
39+ if not os .path .isfile (os .path .join (abs_path , "CMakeLists.txt" )):
40+ raise FileNotFoundError ("Missing CMake file." )
41+
42+ build_path = os .path .join (abs_path , "build" )
43+ if not os .path .isdir (build_path ):
44+ os .makedirs (build_path )
45+
46+ src_folder = Mount ("/home/src" , abs_path , type = 'bind' )
47+
48+ print (f"Building source from { args .folder } ..." )
49+ out = client .containers .run (
50+ IMAGE ,
51+ remove = True ,
52+ mounts = [src_folder ],
53+ entrypoint = '/bin/bash -c' ,
54+ # command='/bin/bash -c "apt install -y cmake "'
55+ command = '"apt install -y cmake && cd /home/src/build && cmake --toolchain tricore_toolchain.cmake .. && make -j$(nproc)"'
56+ )
3957 print (out )
58+ print ("Done!" )
4059
4160
4261@container_startup
@@ -49,7 +68,7 @@ def flash(client: DockerClient, args: Any) -> None:
4968 subparsers = parser .add_subparsers (title = 'action' , required = True )
5069
5170 build_subparser = subparsers .add_parser ('build' , help = 'Build a project for TriCore architecture. A CMake file is required.' )
52- build_subparser .add_argument ('folder' , metavar = 'BASEDIR ' , type = str )
71+ build_subparser .add_argument ('folder' , metavar = 'SRCDIR ' , type = str )
5372 build_subparser .add_argument ('-v' , '--verbose' , help = 'Enable container log on the terminal.' , action = 'count' , default = 0 , required = False )
5473 build_subparser .set_defaults (handler = build )
5574
0 commit comments