SimpleClient Android Application change for BLE
[platform/upstream/iotivity.git] / scons_script_how_to.txt
index 5c49533..4203602 100644 (file)
@@ -41,7 +41,7 @@ CPPPATH: The directories that the preprocessor will search for include headers.
 CPPDEFINES: Platform independent specification of C preprocessor definitions.
 
 Note: CPPPATH and CPPDEFINES is common for all compiler. But others are
-compiler specific, when change the key value, it may requried to specify the
+compiler specific, when change the key value, it may required to specify the
 target platform(actually the compiler).
 
 e.g.
@@ -82,7 +82,7 @@ In above example, 'target_os' is used. How to get it?
 
 User can build IoTivity project on Linux / Windows / MAC OSX for various
 targets(Linux, Tizen, Android, Arduino, Windows, MAC OSX, IOS ...). Most
-platform specific configures have been done in the common scripts which are in
+platform specific configurations have been done in the common scripts which are in
 build_common. The common scripts prepare an environment named 'env' with
 target platform specific configuration.
 
@@ -90,8 +90,8 @@ When write IoTivity project build script, you can get this environment as
 following:
        Import('env')
 
-You can use 'env' directly after import it. You can also clone a new environment
-and update its keys.
+You can use 'env' directly after import it(it isn't recommended). You can also
+clone a new environment and update its keys(recommended).
 
        new_env1 = Clone('env')
        new_env2 = Clone('env')
@@ -105,23 +105,22 @@ or
        env['XXX']
 
 XXX is the information name, below are the extra information added by IoTivity
-common scrirpts:
+common scripts:
 BUILD_DIR: the path of the build directory, all output are in this directory
 SRC_DIR: the path of the top directory of the source code
-OIC_UTILS: the path of oic-utilities project
 RELEASE: build type, boolean. True - release build, False - debug build
 TARGET_OS: the name of the target OS. The possible value depends on the host
        platform. Bellow is the list of host and possible target OS. (darwin means
        MAC OSX)
-               linux: linux / android / arduino / tizen
-(the line means on Linux, you can build the project for Linux/Android/Arduino/Tizen)
+               linux: linux / android / arduino / tizen (means on Linux, you can build the
+                       project for Linux/Android/Arduino/Tizen)
                windows: windows / winrt / android / arduino
                darwin: darwin / ios / android / arduino
 
-TARGET_ARCH: the target CPU arch. Its possible value depend on the target OS.
+TARGET_ARCH: the target CPU arch. Its possible value depends on the target OS.
        Bellow list the target OS and allowed CPU architecture.
-               linux: x86 / x86_64 / arm / arm64
-(above line means if the target OS is Linux, the CPU arch can be x86/x86_64/arm/arm64)
+               linux: x86 / x86_64 / arm / arm64 (means if the target OS is Linux, the CPU
+                       arch can be x86/x86_64/arm/arm64)
                android: x86 / x86_64 / armeabi / armeabi-v7a / armeabi-v7a-hard / arm64-v8a
                windows: x86 / amd64 / arm
                winrt: arm
@@ -133,9 +132,12 @@ TARGET_ARCH: the target CPU arch. Its possible value depend on the target OS.
 
 For convenience, in the common scripts, some extra functions are added.
 
-PrintTargets(): print all targets in the help information.
-AppendTarget(target): add 'target' into targets list, when use PrintTargets,
-       the 'target' will be print.
+PrintTargets(): print all target names in the help information.
+AppendTarget(name, target = None): add a target name into targets list, when use
+       PrintTargets, the target name will be print
+# @param name - the name of the target(s)(user defined name)
+# @param target - Final binary, file(s) etc generated after build.
+
 InstallTarget(files, name): it takes the same action as AppendTarget, besides,
        it installs the 'files' to BUILD_DIR.
 
@@ -146,21 +148,47 @@ this function. 'lib' is the name of the library to import. The 'include' path
 will be auto added to the environment and the library will be built and linked
 into the final binary.
 
-CreateBin('bin', src): For Arduino, after build the program, it's required to
-be converted into specific format (e.g .hex). This function will genearate the
-required .hex (and .eep if target arch is avr) file.
+CreateBin(bin, src): For Arduino, after build the program, it's required to
+be converted into specific format (e.g .hex). This function will generate the
+required .hex (and .eep if target arch is avr) file from 'bin'.
 
 UploadHelp(): For different board, the upload command line is different, this
 function print the recommended upload command line. You can see the recommended
 upload command line in the help information(the output of command "scons
 [options] -h")
+Functions for external library management:
+PrepareLib(libname, lib = None, path = None, script = None): Check whether a
+library exists, if not, notify user to install it or try to download the source
+code and build it
+# @param libname - the name of the library try to prepare
+# @param lib - the lib(.so, .a etc) to check (a library may include more then
+#      one lib, e.g. boost, includes boost_thread, boost_system ...
+# @param path - the path of the library building script, if it's not set,
+#                      by default, it's <src_dir>/extlibs/<libname>/
+# @param script - the building script, by default, it's 'SConscript'
+
+Download(target, url): Download source code from URL 'url' and save as 'target'.
+# @param target - the name of the source code package to be saved as
+# @param url - the URL from which to download the source code
+
+Configure(cwd, cmd): Run configure command(such as: bootstrap, configure etc.
+usually it's done before build a library)
+# @param cwd - the work directory, full path or relative path to the directory
+               where the library build script in
+# @param cmd - the command to run, can be a script or system command
+
+Install_head_file(file): Install header file(s) to <src_dir>/deps/<target_os>/include
+# @param file - the head file(s) to install
+
+Install_lib(lib): Install library binaries to <src_dir>/deps/<target_os>/lib/<arch>
+# @param lib - the library binary(.so, .a etc) to install
 
 ==== Scripts Hierarchy ====
 
 Scons provides a function 'SConscript(scripts, [exports, variant_dir, duplicate])'
 It tells scons to execute one or more subsidiary configuration files(A script,
 usually named SConscript). Take below project hierarchy as example to show how
-to organize the scripts.
+to organise the scripts.
 
                prj
                |-------prj_1
@@ -176,7 +204,7 @@ to organize the scripts.
 As above project hierarchy, in 'SConstruct' file in the 'prj' directory, there
 should include some lines like these:
 
-#Please change this part according to the organization of your projects.
+#Please change this part according to the organisation of your projects.
 #Note: To make the output is in build_dir, the path of the scripts should
 #be relevant to build_dir
 SConscript(build_dir + 'prj_1/SConscript')
@@ -192,49 +220,50 @@ SConscript('sub_prj_11/SConscript')
 SConscript('sub_prj_1n/SConscript')
 
 The path is relevant to 'prj_1/SConscript'. You can also use the full path
-build_dir + 'prj_1/sub_prj_1x/SConscript', but it's not recommended.
+(build_dir + 'prj_1/sub_prj_1x/SConscript'), but it's not recommended.
 
 Above just to show a recommended way to manage subsidiary scripts. You don't
-need restrictly follow it.
+need strictly follow it.
 
 ==== The content of a typical script ====
 
-After run the scripts in build_common (usally it's done at the beginning of
+After run the scripts in build_common (usually it's done at the beginning of
 SConstruct), an global environment 'env' is exported, 'env' has include the
 default configuration of the target OS and arch. 'env' is used in all projects,
 should avoid to change its keys. To avoid change 'env', usually clone 'env' and
-update it accroding to the requirement of cuurent sub project. Then specify the
-target(usually binary) to build.
+update it according to the requirement of current sub project. Then specify the
+target (usually binary) to build.
 
 Below is an example:
-       # import the global enviroment 'env'
+       # import the global environment 'env'
        Import('env')
 
-       # Clone a new enviroment from 'env'
+       # Clone a new environment from 'env'
        new_env = env.Clone()
 
-       # Update the new enviroment, usally include add header file paths,
+       # Update the new environment, usually include add header file paths,
        # library path, libs to link and other compiler flags. This part is
-       # optional. If not present, the default configuration will be used
-       new_env.AppeneUnique(xxx = [ .... ])
+       # optional.
+       new_env.AppendUnique(xxx = [ .... ])
 
        # Specify the target(application, library, object or others) to build
-       ts = new_env.Program('progam_name', [source_list])
+       ts = new_env.Program('program_name', [source_list])
 
        # Install the target (optional)
        # If it's an important library or daemon to be published
        new_env.InstallTarget(ts, 'target_name')
 or
-       # If is't examples or test program or others will not be published
-       new_env.Alias('target_name', ts)
-       new_env.AppendTarget('target_name')
+       # If it's examples or test program or others will not be published
+       new_env.AppendTarget('target_name', ts)
 
 ==== Tips ====
-1. library order: if A lib use B lib, both A and B are linked to target T, the
-       when specify libraries, A should in front of B, otherwise there may be link
-       error.
+1. library order: if A lib use B lib, both A and B are linked to target T, when
+       specify libraries, A should in front of B, otherwise there may be link
+       error. e.g.
+               xx_env.AppendUnique(LIBS = ['A', 'B'])
+
 2. On android:
        (1)'pthread' is in libc. So don't use '-lpthread' for android
        (2)By default 'rtti' and 'exception' is disabled, to enable it, you need
        add flags '-frtti' and '-fexceptions'
-       (3)If STL is used, need link 'gnustl_static' library
+       (3)If STL is used, need link 'gnustl_shared' library