#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
 
#integrate files to classpath
-cp src
-cp ../src
-cp gen-haxe

#this class wil be used as entry point for your app.
-main Main

# forced compile of all source files
--macro include('org.apache.thrift', true)
--macro include('thrift', true)
--macro include('constantsDemo', true)

#JavaScript target
-js bin/Test.js

#You can use -D source-map-content (requires Haxe 3.1+) to have the .hx 
#files directly embedded into the map file, this way you only have to 
#upload it, and it will be always in sync with the compiled .js even if 
#you modify your .hx files.
-D source-map-content

# libs
-lib uuid

#Generate source map and add debug information
-debug

#dead code elimination : remove unused code
-dce full