1/******************************************************************************
2 *   Copyright (C) 2008-2011, International Business Machines
3 *   Corporation and others.  All Rights Reserved.
4 *******************************************************************************
5 */
6
7#ifndef __PKG_GENC_H__
8#define __PKG_GENC_H__
9
10#include "unicode/utypes.h"
11#include "toolutil.h"
12
13#include "unicode/putil.h"
14#include "putilimp.h"
15
16/*** Platform #defines move here ***/
17#if U_PLATFORM_HAS_WIN32_API
18#ifdef __GNUC__
19#define WINDOWS_WITH_GNUC
20#else
21#define WINDOWS_WITH_MSVC
22#endif
23#endif
24
25
26#if !defined(WINDOWS_WITH_MSVC)
27#define BUILD_DATA_WITHOUT_ASSEMBLY
28#endif
29
30#ifndef U_DISABLE_OBJ_CODE /* testing */
31#if defined(WINDOWS_WITH_MSVC) || U_PLATFORM_IS_LINUX_BASED
32#define CAN_WRITE_OBJ_CODE
33#endif
34#if U_PLATFORM_HAS_WIN32_API || defined(U_ELF)
35#define CAN_GENERATE_OBJECTS
36#endif
37#endif
38
39#if U_PLATFORM == U_PF_CYGWIN || defined(CYGWINMSVC)
40#define USING_CYGWIN
41#endif
42
43/*
44 * When building the data library without assembly,
45 * some platforms use a single c code file for all of
46 * the data to generate the final data library. This can
47 * increase the performance of the pkdata tool.
48 */
49#if U_PLATFORM == U_PF_OS400
50#define USE_SINGLE_CCODE_FILE
51#endif
52
53/* Need to fix the file seperator character when using MinGW. */
54#if defined(WINDOWS_WITH_GNUC) || defined(USING_CYGWIN)
55#define PKGDATA_FILE_SEP_STRING "/"
56#else
57#define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING
58#endif
59
60#define LARGE_BUFFER_MAX_SIZE 2048
61#define SMALL_BUFFER_MAX_SIZE 512
62#define SMALL_BUFFER_FLAG_NAMES 32
63#define BUFFER_PADDING_SIZE 20
64
65/** End platform defines **/
66
67
68
69U_INTERNAL void U_EXPORT2
70printAssemblyHeadersToStdErr(void);
71
72U_INTERNAL UBool U_EXPORT2
73checkAssemblyHeaderName(const char* optAssembly);
74
75U_INTERNAL void U_EXPORT2
76writeCCode(const char *filename, const char *destdir, const char *optName, const char *optFilename, char *outFilePath);
77
78U_INTERNAL void U_EXPORT2
79writeAssemblyCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optFilename, char *outFilePath);
80
81U_INTERNAL void U_EXPORT2
82writeObjectCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optMatchArch, const char *optFilename, char *outFilePath);
83
84#endif
85