mirror of
				https://github.com/Minres/conan-recipes.git
				synced 2025-10-31 06:01:53 +00:00 
			
		
		
		
	add tiny-c compiler package
This commit is contained in:
		
							
								
								
									
										9
									
								
								TCC/build.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								TCC/build.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #!/usr/bin/env python3 | ||||
| from conan.packager import ConanMultiPackager | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     builder = ConanMultiPackager(username="minres") | ||||
|     types = ['Debug','Release'] | ||||
|     for t in types: | ||||
|         builder.add(settings={"build_type":t}, options={}, env_vars={}, build_requires={}) | ||||
|     builder.run() | ||||
							
								
								
									
										41
									
								
								TCC/conanfile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								TCC/conanfile.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| from conans import ConanFile, AutoToolsBuildEnvironment, tools | ||||
| import os | ||||
|  | ||||
| class TccConan(ConanFile): | ||||
|     name = "tcc" | ||||
|     version = "0.9.27" | ||||
|     license = "GNU Lesser General Public License" | ||||
|     author = "Eyck Jentzsch <eyck@minres.com>" | ||||
|     url = "https://github.com/Minres/conan-recipes/tree/master/TCC" | ||||
|     description = "TinyCC (aka TCC) is a small but hyper fast C compiler. Unlike other C compilers, it is meant to be self-relying: you do not need an external assembler or linker because TCC does that for you." | ||||
|     topics = ("compiler", "c") | ||||
|     settings = "os", "compiler", "build_type", "arch" | ||||
|     default_options = {} | ||||
|  | ||||
|     source_tar = "http://download.savannah.gnu.org/releases/tinycc/tcc-%s.tar.bz2" % version | ||||
|     #generators = "cmake" | ||||
|     sub_folder = "tcc-%s" % version | ||||
|     exports_sources = "tcc-%s/*" % version | ||||
|  | ||||
|     def source(self): | ||||
|         self.output.info("Downloading %s" %self.source_tar) | ||||
|         tools.download(self.source_tar, "tcc.tar.bz2") | ||||
|         tools.unzip("tcc.tar.bz2") | ||||
|         os.remove("tcc.tar.bz2") | ||||
|  | ||||
|     def configure(self): | ||||
|         del self.settings.compiler.libcxx | ||||
|  | ||||
|     def build(self): | ||||
|         autotools = AutoToolsBuildEnvironment(self) | ||||
|         autotools.fpic = True | ||||
|         with tools.chdir("%s/%s" % (self.source_folder, self.sub_folder)): | ||||
|             autotools.configure() | ||||
|             autotools.make() | ||||
|             autotools.make(target="install") | ||||
|  | ||||
|     def package(self): | ||||
|         pass | ||||
|  | ||||
|     def package_info(self): | ||||
|         self.cpp_info.libs = ["tcc"] | ||||
							
								
								
									
										13
									
								
								TCC/test_package/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								TCC/test_package/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| cmake_minimum_required(VERSION 2.8.12) | ||||
| project(PackageTest CXX) | ||||
|  | ||||
| include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | ||||
| conan_basic_setup() | ||||
|  | ||||
| add_executable(example example.cpp) | ||||
| target_link_libraries(example ${CONAN_LIBS} ${CMAKE_DL_LIBS}) | ||||
| # CTest is a testing tool that can be used to test your project. | ||||
| # enable_testing() | ||||
| # add_test(NAME example | ||||
| #          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin | ||||
| #          COMMAND example) | ||||
							
								
								
									
										23
									
								
								TCC/test_package/conanfile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								TCC/test_package/conanfile.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| import os | ||||
|  | ||||
| from conans import ConanFile, CMake, tools | ||||
|  | ||||
|  | ||||
| class TccTestConan(ConanFile): | ||||
|     settings = "os", "compiler", "build_type", "arch" | ||||
|     generators = "cmake" | ||||
|  | ||||
|     def build(self): | ||||
|         cmake = CMake(self) | ||||
|         cmake.configure() | ||||
|         cmake.build() | ||||
|  | ||||
|     def imports(self): | ||||
|         self.copy("*.dll", dst="bin", src="bin") | ||||
|         self.copy("*.dylib*", dst="bin", src="lib") | ||||
|         self.copy('*.so*', dst='bin', src='lib') | ||||
|  | ||||
|     def test(self): | ||||
|         if not tools.cross_building(self.settings): | ||||
|             os.chdir("bin") | ||||
|             self.run(".%sexample" % os.sep) | ||||
							
								
								
									
										97
									
								
								TCC/test_package/example.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								TCC/test_package/example.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| /* | ||||
|  * Simple Test program for libtcc | ||||
|  * | ||||
|  * libtcc can be useful to use tcc as a "backend" for a code generator. | ||||
|  */ | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #include "libtcc.h" | ||||
|  | ||||
|  | ||||
| /* this function is called by the generated code */ | ||||
| int add(int a, int b) | ||||
| { | ||||
|     return a + b; | ||||
| } | ||||
|  | ||||
| /* this strinc is referenced by the generated code */ | ||||
| const char hello[] = "Hello World!"; | ||||
|  | ||||
| char my_program[] = | ||||
| "#include <tcclib.h>\n" /* include the "Simple libc header for TCC" */ | ||||
| "extern int add(int a, int b);\n" | ||||
| "#ifdef _WIN32\n" /* dynamically linked data needs 'dllimport' */ | ||||
| " __attribute__((dllimport))\n" | ||||
| "#endif\n" | ||||
| "extern const char hello[];\n" | ||||
| "int fib(int n)\n" | ||||
| "{\n" | ||||
| "    if (n <= 2)\n" | ||||
| "        return 1;\n" | ||||
| "    else\n" | ||||
| "        return fib(n-1) + fib(n-2);\n" | ||||
| "}\n" | ||||
| "\n" | ||||
| "int foo(int n)\n" | ||||
| "{\n" | ||||
| "    printf(\"%s\\n\", hello);\n" | ||||
| "    printf(\"fib(%d) = %d\\n\", n, fib(n));\n" | ||||
| "    printf(\"add(%d, %d) = %d\\n\", n, 2 * n, add(n, 2 * n));\n" | ||||
| "    return 0;\n" | ||||
| "}\n"; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|     TCCState *s; | ||||
|     int i; | ||||
|     int (*func)(int); | ||||
|  | ||||
|     s = tcc_new(); | ||||
|     if (!s) { | ||||
|         fprintf(stderr, "Could not create tcc state\n"); | ||||
|         exit(1); | ||||
|     } | ||||
|  | ||||
|     /* if tcclib.h and libtcc1.a are not installed, where can we find them */ | ||||
|     for (i = 1; i < argc; ++i) { | ||||
|         char *a = argv[i]; | ||||
|         if (a[0] == '-') { | ||||
|             if (a[1] == 'B') | ||||
|                 tcc_set_lib_path(s, a+2); | ||||
|             else if (a[1] == 'I') | ||||
|                 tcc_add_include_path(s, a+2); | ||||
|             else if (a[1] == 'L') | ||||
|                 tcc_add_library_path(s, a+2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* MUST BE CALLED before any compilation */ | ||||
|     tcc_set_output_type(s, TCC_OUTPUT_MEMORY); | ||||
|  | ||||
|     if (tcc_compile_string(s, my_program) == -1) | ||||
|         return 1; | ||||
|  | ||||
|     /* as a test, we add symbols that the compiled program can use. | ||||
|        You may also open a dll with tcc_add_dll() and use symbols from that */ | ||||
|     tcc_add_symbol(s, "add", reinterpret_cast<const void*>(add)); | ||||
|     tcc_add_symbol(s, "hello", reinterpret_cast<const void*>(hello)); | ||||
|  | ||||
|     /* relocate the code */ | ||||
|     if (tcc_relocate(s, TCC_RELOCATE_AUTO) < 0) | ||||
|         return 1; | ||||
|  | ||||
|     /* get entry symbol */ | ||||
|     func = reinterpret_cast<int (*)(int)>(tcc_get_symbol(s, "foo")); | ||||
|     if (!func) | ||||
|         return 1; | ||||
|  | ||||
|     /* run the code */ | ||||
|     func(32); | ||||
|  | ||||
|     /* delete the state */ | ||||
|     tcc_delete(s); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user