Start to build Scol using CMAKE » History » Version 20
brainsandwich, 06/29/2015 04:44 PM
| 1 | 1 | arkeon | h1. Start to build Scol using CMAKE |
|---|---|---|---|
| 2 | |||
| 3 | |||
| 4 | 20 | brainsandwich | h2. Tools |
| 5 | 1 | arkeon | |
| 6 | 20 | brainsandwich | h3. Common to all platforms |
| 7 | 1 | arkeon | |
| 8 | 20 | brainsandwich | * "CMake":http://www.cmake.org/download/ |
| 9 | * Visual Studio (not free) |
||
| 10 | * "Tortoise SVN":http://tortoisesvn.net/ (or any SVN client) |
||
| 11 | * "Tortoise git":https://code.google.com/p/tortoisegit/ (or any Git client too) |
||
| 12 | 1 | arkeon | |
| 13 | 20 | brainsandwich | h3. Windows target |
| 14 | 1 | arkeon | |
| 15 | 20 | brainsandwich | The minimum compiler supported is the one in Visual Studio 2010. |
| 16 | You can try with a newer version at your own risks ! |
||
| 17 | 1 | arkeon | |
| 18 | 20 | brainsandwich | h3. Android target |
| 19 | 1 | arkeon | |
| 20 | 20 | brainsandwich | _With standard tools_ |
| 21 | 1 | arkeon | |
| 22 | 20 | brainsandwich | i.e. free tools found on the web or provided by Google |
| 23 | 1 | arkeon | |
| 24 | 20 | brainsandwich | * "Java Development Kit (JDK)":http://www.oracle.com/technetwork/java/javase/downloads |
| 25 | * "Android SDK":https://developer.android.com/sdk/installing |
||
| 26 | * "Native Development Kit (NDK)":https://developer.android.com/tools/sdk/ndk |
||
| 27 | * "Apache ANT":http://ant.apache.org/ |
||
| 28 | 1 | arkeon | |
| 29 | 20 | brainsandwich | _With Tegra Android Development Pack_ |
| 30 | 10 | brainsandwich | |
| 31 | 20 | brainsandwich | A package provided by Nvidia to build applications for Android. The download process requires authentication to the Nvidia Developper Network (it's free and not too spammy though) |
| 32 | |||
| 33 | * "TADP":https://developer.nvidia.com/gameworksdownload |
||
| 34 | * On setup, let it download everything or at least the tools described in the previous section. |
||
| 35 | |||
| 36 | _SDK preparation_ |
||
| 37 | |||
| 38 | You should launch the SDK to download other tools like emulators for each API you want to target. |
||
| 39 | (Our target API is 17 so you can get any emulator above). |
||
| 40 | |||
| 41 | h3. Linux target |
||
| 42 | |||
| 43 | Not supported yet. |
||
| 44 | |||
| 45 | h3. Mac OS target |
||
| 46 | |||
| 47 | Not supported yet. |
||
| 48 | |||
| 49 | |||
| 50 | 7 | brainsandwich | h2. Get the Scol sources |
| 51 | 1 | arkeon | |
| 52 | 20 | brainsandwich | Scol uses Subversion for source control and you can use your SVN client to get the source code. |
| 53 | 6 | arkeon | |
| 54 | 1 | arkeon | So first retrieve the sources from "https://svn.scolring.org/trunk/", accept the certificate and go take some coffee. |
| 55 | The source directories contains most of the dependencies, and since some of them are modified they are provided in the sources. |
||
| 56 | 7 | brainsandwich | |
| 57 | 20 | brainsandwich | Some sources like curl use Git as source control and are downloaded when building, so make sure it's installed before building the project |
| 58 | 7 | brainsandwich | |
| 59 | 20 | brainsandwich | |
| 60 | |||
| 61 | 1 | arkeon | h2. Dependencies search paths |
| 62 | 8 | brainsandwich | |
| 63 | 1 | arkeon | h3. Windows |
| 64 | |||
| 65 | Once you get the sources, you can execute "setWindowsSearchPaths.bat" in the dependencies directory. |
||
| 66 | !!WARNING!! when you execute the bat file using the mouse the current directory is wrong. |
||
| 67 | You need to start a DOS command line "cmd.exe" as administrator and go to the dependencies directory to start the bat file manually. |
||
| 68 | |||
| 69 | This will add needed environment variables and paths. |
||
| 70 | |||
| 71 | h3. Android |
||
| 72 | |||
| 73 | 20 | brainsandwich | If you downloaded the TADP, the following variables are likely to be defined already (or they should look alike). |
| 74 | If not, add these to the environment variables |
||
| 75 | 1 | arkeon | * ANDROID_HOME : path/to/sdk |
| 76 | * ANDROID_SDK_HOME : path/to/sdk |
||
| 77 | * ANDROID_SDK : path/to/sdk |
||
| 78 | * ANDROID_NDK : path/to/ndk |
||
| 79 | * ANT_HOME : path/to/ant |
||
| 80 | 7 | brainsandwich | * JAVA_HOME : path/to/jdk -- should be something like "C:\Progra~1\Java\<jdkfolder>" |
| 81 | 1 | arkeon | * CMAKE : path/to/cmake |
| 82 | 7 | brainsandwich | |
| 83 | 20 | brainsandwich | Then you should add these variables into the PATH: |
| 84 | 1 | arkeon | |
| 85 | @%ANDROID_NDK%;%ANT_HOME%\bin;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;%CMAKE%;%JAVA_HOME%\bin;@ |
||
| 86 | |||
| 87 | 20 | brainsandwich | |
| 88 | |||
| 89 | |||
| 90 | 1 | arkeon | h2. Build needed dependencies |
| 91 | |||
| 92 | 20 | brainsandwich | h3. From Windows, for Windows |
| 93 | 1 | arkeon | |
| 94 | 20 | brainsandwich | 1. Launch cmake-gui from a Visual Studio command line (it configures environment so you can build things correctly) |
| 95 | 2. Specify the source folder to trunk/dependencies and the build to trunk/dependencies/build/windows/x86 |
||
| 96 | 3. Hit configure, specifying no toolchain, using your Visual Studio version as generator. |
||
| 97 | 4. Wait for things to set up |
||
| 98 | 5. Configure again |
||
| 99 | 6. Generate |
||
| 100 | 7. Build the project in Visual Studio (Build->Batch Build, check debug and release for "INSTALL" configuration) |
||
| 101 | 8. Wait for completion |
||
| 102 | 9. Read the start of the output of "CMake configure" and do as it says (it says you have to check/uncheck some "SCOL_" configuration variables) |
||
| 103 | 10. Repeat steps 4 to 8 until everything's built |
||
| 104 | 7 | brainsandwich | |
| 105 | 20 | brainsandwich | h3. From Windows, for Android |
| 106 | 7 | brainsandwich | |
| 107 | 20 | brainsandwich | Do the same as for Windows target, but |
| 108 | * Set source folder to trunk/dependencies and build folder to trunk/scol/build/android/<target abi> |
||
| 109 | * Specify the generator : "NMake" |
||
| 110 | * The toolchain for crosscompile : trunk/dependencies/CMake/toolchain/android.toolchain.cmake |
||
| 111 | * Build dependencies with "nmake install" command from a command line. |
||
| 112 | 13 | brainsandwich | |
| 113 | |||
| 114 | 19 | brainsandwich | |
| 115 | 20 | brainsandwich | |
| 116 | 19 | brainsandwich | h2. Build the Scol project |
| 117 | 13 | brainsandwich | |
| 118 | 20 | brainsandwich | As for the dependencies: |
| 119 | 13 | brainsandwich | |
| 120 | 20 | brainsandwich | h3. Windows target |
| 121 | 3 | arkeon | |
| 122 | 20 | brainsandwich | * Set source folder to trunk/scol and build folder to trunk/scol/build/windows/x86 |
| 123 | * Configure, generate and build from Visual Studio |
||
| 124 | |||
| 125 | h3. Android target |
||
| 126 | |||
| 127 | * Set source folder to trunk/scol and build folder to trunk/scol/build/android/<target abi> |
||
| 128 | * If you're using Nsight with Visual Studio (TADP), some build paramaters should be modified for each build if you want to install and test the project on a device : |
||
| 129 | - Open ScolLauncher subproject -> properties |
||
| 130 | - Configuration Properties -> General -> Configuration Type -> Make Application (ndk-build -> .apk|.so|.a) |
||
| 131 | - Configuration Properties -> Deployment -> Fast Deploy -> No |
||
| 132 | - Configuration Properties -> Ant Build -> Skip Ant Step -> No |
||
| 133 | * Without TADP, after it's build, go to trunk/scol/build/android/<target abi>/App/bin, and run "ant debug install" if you wish to install the project on an emulator or your device |
||
| 134 | 1 | arkeon | |
| 135 | h1. Start your new plugin |
||
| 136 | |||
| 137 | h2. Source paths |
||
| 138 | |||
| 139 | Start by creating a directory with your new plugin name in the trunk/scol/plugins folder. |
||
| 140 | For example trunk/scol/plugins/myPlugin |
||
| 141 | 4 | arkeon | |
| 142 | Usually we prefer to separate the sources and the includes. |
||
| 143 | 1 | arkeon | So creates a "src" and "include" directory in your plugin folder. |
| 144 | |||
| 145 | Creates the empty files you will need for your project, usually : |
||
| 146 | - include/myplugin.h for your classes declaration |
||
| 147 | - src/myplugin.cpp for your classes definition |
||
| 148 | - src/scolplugin.cpp for the Scol binding functions |
||
| 149 | |||
| 150 | h2. Dependencies |
||
| 151 | |||
| 152 | If your project need an external SDK or dependencies, add then in the trunk/dependencies directory. |
||
| 153 | Then create a findMydepname.cmake file in trunk\scol\CMake\Packages. |
||
| 154 | You can copy and change an existing Find.cmake file to make yours. |
||
| 155 | Start from a simple one like FindMyo.cmake for example. |
||
| 156 | |||
| 157 | h2. Cmake files |
||
| 158 | |||
| 159 | It's time to creates the CMAKE script for your plugin. |
||
| 160 | |||
| 161 | Create a "CMakeLists.txt" file in the plugin directory. |
||
| 162 | trunk/scol/plugins/myPlugin/CMakeLists.txt |
||
| 163 | |||
| 164 | And edit the file with a text editor. |
||
| 165 | |||
| 166 | <pre> |
||
| 167 | #------------------------------------------------------------------- |
||
| 168 | # This file is part of the CMake build system for Scol |
||
| 169 | # |
||
| 170 | # The contents of this file are placed in the public domain. Feel |
||
| 171 | # free to make use of it in any way you like. |
||
| 172 | #------------------------------------------------------------------- |
||
| 173 | |||
| 174 | ############################################################ |
||
| 175 | # CmakeList file for Myplugin |
||
| 176 | ############################################################ |
||
| 177 | |||
| 178 | #Your project name |
||
| 179 | PROJECT(myPLugin) |
||
| 180 | |||
| 181 | # define header and source files for the library |
||
| 182 | set (MYPLUGIN_HEADER_FILES |
||
| 183 | include/myplugin.h |
||
| 184 | ) |
||
| 185 | |||
| 186 | set (MYPLUGIN_SOURCE_FILES |
||
| 187 | src/myplugin.cpp |
||
| 188 | src/scolplugin.cpp |
||
| 189 | ) |
||
| 190 | |||
| 191 | # Add includes directories from dependencies |
||
| 192 | # include_directories(include ${MYDEP_INCLUDE_DIRS}) |
||
| 193 | |||
| 194 | # Add definition for P4 optimizations, warnings removal. |
||
| 195 | add_definitions(-DOPTI_P4 -D_CRT_SECURE_NO_WARNINGS -D) |
||
| 196 | |||
| 197 | # Add dependencies libraries |
||
| 198 | # set(LIBRARIES |
||
| 199 | # ${MYDEP_LIBRARIES} |
||
| 200 | # ${ZLIB_LIBRARIES} |
||
| 201 | # ${PNG_LIBRARIES} |
||
| 202 | # ) |
||
| 203 | |||
| 204 | # setup Scol plugin target |
||
| 205 | add_library(myPLugin |
||
| 206 | ${Scol_LIB_TYPE} |
||
| 207 | ${MYPLUGIN_HEADER_FILES} |
||
| 208 | ${MYPLUGIN_SOURCE_FILES} |
||
| 209 | ) |
||
| 210 | add_dependencies(myPLugin kernel) |
||
| 211 | |||
| 212 | # set the dll version. |
||
| 213 | set_target_properties(myPLugin PROPERTIES VERSION ${Scol_VERSION} SOVERSION ${Scol_VERSION_MAJOR}) |
||
| 214 | target_link_libraries(myPLugin ${LIBRARIES}) |
||
| 215 | |||
| 216 | # install Scol |
||
| 217 | scol_config_plugin(myPLugin) |
||
| 218 | install(FILES ${MYPLUGIN_HEADER_FILES} DESTINATION include/SCOL/plugins/myPLugin) |
||
| 219 | </pre> |
||
| 220 | |||
| 221 | Now we need to declare this new plugin in the common Scol cmake files. |
||
| 222 | Edit the trunk/scol/CMakeLists.txt file and add your plugin definition like the following. |
||
| 223 | |||
| 224 | If you don't have dependencies. |
||
| 225 | <pre> |
||
| 226 | option(Scol_BUILD_MYPLUGIN "Build myPluginplugin, my library" TRUE) |
||
| 227 | </pre> |
||
| 228 | |||
| 229 | If you have depencies |
||
| 230 | <pre> |
||
| 231 | cmake_dependent_option(Scol_BUILD_MYPLUGIN "Build myPlugin, my library." TRUE "MYDEP_FOUND;ZLIB_FOUND;PNG_FOUND" FALSE) |
||
| 232 | </pre> |
||
| 233 | |||
| 234 | Now edit the trunk/scol/plugin/CMakeLists.txt file and add the following. |
||
| 235 | <pre> |
||
| 236 | # Configure myPlugin plugin build |
||
| 237 | if (Scol_BUILD_MYPLUGIN) |
||
| 238 | add_subdirectory(myPlugin) |
||
| 239 | endif () |
||
| 240 | </pre> |
||
| 241 | |||
| 242 | Only if you have dependencies, edit the trunk/scol/CMake/ScolDependencies.cmake file and add the dependencies resolution as the following |
||
| 243 | |||
| 244 | <pre> |
||
| 245 | # Find MyDep |
||
| 246 | find_package(MYDEP) |
||
| 247 | macro_log_feature(MYDEP_FOUND "Mydep" "MydepLibrary" "http://Mydep.org/" FALSE "" "") |
||
| 248 | </pre> |
||
| 249 | |||
| 250 | h2. Almost done |
||
| 251 | |||
| 252 | Open the CMAKE-gui again. |
||
| 253 | Hit the "Configure button" and check if you found your plugin in the scol group. |
||
| 254 | Then hit the generate button, and open the scol.sln project again. |
||
| 255 | |||
| 256 | You should have the project added in Visual Studio. |